Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BtoBスタートアップとサーバーレス / Serverless Architecture for a BtoB Startup

BtoBスタートアップとサーバーレス / Serverless Architecture for a BtoB Startup

Yosuke Hizen

August 21, 2018
Tweet

More Decks by Yosuke Hizen

Other Decks in Technology

Transcript

  1. HiCustomer inc. • 2017೥12݄૑ۀ • ϑϧλΠϜ3ਓ / ۀ຿ҕୗ + ෭ۀ6ਓ

    • ϏδωεαΠυ: 2ਓ • σβΠφʔ: 1ਓ • ΤϯδχΞ: 6ਓ • https://hicustomer.jp/
  2. ໨࣍ 1. αʔϏεͷѻ͏υϝΠϯ • ΧελϚʔαΫηεͱ͸ • ϓϩμΫτͷѻ͏ϏδωεϩδοΫ 2. υϝΠϯͷಛੑͱٕज़తΞϓϩʔν •

    ॲཧͷྲྀΕ • ߟྀ͢΂͖͜ͱ • ΞʔΩςΫνϟ • ։ൃݴޠ • ࠓޙͷ՝୊ • (͓·͚) ౿Έൈ͍ͨαʔόʔϨεΞϯνύλʔϯ
  3. ࣮ݱ͍ͨ͠ϏδωεϩδοΫ HiCustomerͷ3ͭͷओཁ֓೦ 1. ΧελϚʔ • (BtoB) SaaSϓϩμΫτΛར༻͍ͯ͠Δސ٬اۀ 2. εςʔδ •

    ϓϩμΫτͷར༻ϑΣʔζ • e.g. τϥΠΞϧ / ΦϯϘʔσΟϯά / ܖ໿ߋ৽લͳͲ 3. ϔϧεείΞ • ΧελϚʔ͕ϓϩμΫτΛ׆༻Ͱ͖͍ͯΔ͔ͷࢦඪ • ֤εςʔδʹ͍ͭͯఆٛͨ͠ཧ૝తͳΧελϚʔͷৼΔ෣͍ʹରͯ͠Ͳͷఔ౓͍͔ۙ͠ʹΑΓධՁ͢Δ • e.g. Good / Normal / Bad
  4. ߟྀ͢΂͖͜ͱ αʔϏεͷಛੑ: • ࣌ܥྻσʔλ (ϓϩμΫτͷར༻ϩά) ΛΠϕϯτυϦϒϯʹѻ͏ • Πϕϯτͷछྨ͕ΫϥΠΞϯτʹΑΓେ͖͘ҟͳΔ ੑೳཁ݅: •

    ϩάऩूͷՄ༻ੑ/Ϩεϙϯε଎౓͕΋ͬͱ΋ॏཁ • ಋೖઌϓϩμΫτن໛ʹΑΓτϥϑΟοΫͷٸ૿͕ߟ͑ΒΕΔ
  5. ΞʔΩςΫνϟ ऩूॲཧͷՄ༻ੑΛߴΊΔΞϓϩʔν • Immutable Tables͸ॻ͖ࠐΈɺMutable Tables͸ಡΈࠐΈʹ࠷దԽͨ͠ςʔϒϧ (CQRSͷ֓೦) • Immutable Tablesʹ͸શͯͷΠϕϯτ͕ه࿥͞ΕΔ

    • Immutable Tables΁ͷॻ͖ࠐΈΠϕϯτΛτϦΨʔʹूܭॲཧ͕૸Γɺ݁ՌΛMutable Tablesʹه࿥͢Δ • ·ͣ͸ॻ͖ࠐΈίετͷ௿͍ImmutableͳςʔϒϧʹσʔλΛอଘ͢Δ͜ͱͰߴτϥϑΟοΫ࣌ͷσʔλܽଛΛ๷͙ • ूܭॲཧʹࣦഊͯ͠΋Immutable Tablesʹσʔλ͕อଘ͞Ε͍ͯΕ͹ॲཧΛϦτϥΠͰ͖Δ
  6. ։ൃݴޠ ౰࣌ͷબ୒ࢶ: • Python • Node.js • Go • Java

    • .NET GoΛબΜͩཧ༝: • ࣮ߦ଎౓ • ฒྻ • ֶशίετͷ௿͞ • ૉ๿ͳॻ͖ຯ ࣮ߦ؀ڥͱͯ͠AWS LambdaΛબ୒ͨ࣌͠఺Ͱ͋Δఔ౓ߜΒΕͨத͔Βબఆ ଞͷݴޠॲཧܥ͔Βདྷͯ΋ΩϟονΞοϓ͠΍͍͢ͱ͍͏఺΋ߟྀͯ͠GoΛબ୒ (Scala/RubyϝΠϯͰͨ͠)
  7. ࠓޙͷ՝୊ • ετϦʔϜॲཧͷεϩοτϦϯά • DynamoDB Streams͸4events/secݻఆ • ΑΓॊೈͳόοϑΝϦϯάͷͨΊKinesisΛಋೖ • ςʔϒϧ/ΠϯσοΫεͷ਺ΛݮΒ͢

    • ςʔϒϧ͕෼ࢄ͢ΔͱΩϟύγςΟαΠζ࠷దԽͷ໘Ͱෆར • DynamoDB͸range keyͰΞΠςϜͷछྨΛදݱ͢ΔΑ͏ʹ͢Ε͹ҟͳΔछྨͷΞΠςϜΛ 1ςʔϒϧͰѻ͏͜ͱ͕Մೳ • ߴ౓ͳݕࡧͷ࣮ݱ • DynamoDBͷΈͰݕࡧػೳ͢Δͷ͸ࠔ೉ɺιʔτΛ࣮ݱ͢Δ͚ͩͰ΋1ྻ1index͕ඞཁ • ݕࡧΤϯδϯͱͯ͠ElasticsearchΛಋೖ
  8. (͓·͚) ౿Έൈ͍ͨ αʔόʔϨεΞϯνύλʔϯ • ϢʔεέʔεʹԊΘͳ͍εΩʔϚઃܭ • RDBͱಉ͡Α͏ͳΞϓϩʔνͰ͋Δఔ౓ਖ਼نԽͯ͠σʔλϞσϧ͝ͱʹςʔϒϧΛ෼͚ ͍ͯͨ • DynamoDBͰ͸Ϣʔεέʔεͷಉ͡σʔλͷςʔϒϧΛ෼཭͢Δͱݪࢠੑͱಠཱੑ͕ࣦ

    ΘΕɺΩϟύγςΟαΠζ࠷దԽͷ໘Ͱ΋ෆར • ݕࡧ΋KVSϕʔεͷNoSQLͰؤுΔ • ଟ਺ͷΞΠςϜΛදࣔ͢ΔҰཡը໘Ͱͷݕࡧ΍ιʔτ΋DynamoDBͰ΍Ζ͏ͱ͍ͯͨ͠ • ྻ͕૿͑Δͨͼindex͕૿͑ॻ͖ࠐΈίετ΋૿Ճ • શจݕࡧͳͲؒҧͬͨ࢖͍ํΛ͢Δͱશ͘ύϑΥʔϚϯε͕ग़ͳ͍ͷͰɺ༻్ʹదͨ͠ ΞʔΩςΫνϟ(͜ͷ৔߹͸ElasticsearchͳͲ)Λซ༻͢Δͷ͕ྑ͍
  9. Θ͔ͬͨ͜ͱ • ཁ݅ʹΑΓ޲͖ෆ޲͖͕͋Δ (େલఏ) • ΠϕϯτιʔγϯάͳΞϓϦέʔγϣϯͱ͸૬ੑ͕ྑ͍ • ਖ਼͘͠࢖͑͹ΞϓϦέʔγϣϯ։ൃʹूதͰ͖Δ • ॻ͖ࠐΈͱಡΈࠐΈͷςʔϒϧΛ෼͚͓ͯ͘ͱϢʔεέʔε͕มΘͬͯ΋σʔλϞσϧ͕ม

    ߋ͠΍͍͢ • ϓϩμΫτͷํ޲ੑ͕׬શʹఆ·͍ͬͯͳ͍ελʔτΞοϓͰ͸ಛʹॏཁ • σʔλετΞ΁ͷΞΫηε͸ந৅Խͯ͠มߋ΍૊Έ߹ΘͤΛ͠΍͍͢Α͏ʹ͓ͯ͘͠ͱΑ͍ • ݕࡧ͸ElasticsearchͰߦ͏Α͏ʹ͢ΔɺͳͲ͕ޙ͔ΒͰ͖Δ • ཁ্݅ɺRDS͕ඞཁʹͳͬͨͱͯ͠΋KinesisΛڬΜͰඇಉظ࣮ߦͳͲͰͳΜͱ͔͢Δ͜ͱ͸Ͱ͖Δ BtoBελʔτΞοϓͱ͍͏จ຺ͰAWS Lambda + DynamoDBΛத৺ͱͨ͠ߏ੒Ͱͷ ΞϓϦέʔγϣϯ։ൃΛ൒೥ߦͬͨײ૝