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

マイクロチームでの高速な新規開発を支える開発・分析基盤

 マイクロチームでの高速な新規開発を支える開発・分析基盤

マイクロチームでの高速な新規開発を支える開発・分析基盤 by @__timakin__
Builderscon2017でのプレゼン内容です。

Seiji Takahashi

August 04, 2017
Tweet

More Decks by Seiji Takahashi

Other Decks in Programming

Transcript

  1. Copyright© Gunosy Inc. All Rights Reserved 3 Go / Python

    ΤϯδχΞืूத ▶https://gunosy.co.jp/recruit/ Gunosy͸ɺ౦ژେֶʹ௨͏3ਓͷֶੜͷ
 ʮ৘ใΛੈքதͷਓʹ࠷దʹಧ͚͍ͨʯͱ͍͏૝͍͔Β࢝·Γ·ͨ͠ɻ ౦ূϚβʔζ্৔ɺ࿡ຊ໦ώϧζ΁ͷΦϑΟεҠసΛܦͯɺ
 େ͖͘੒௕͍ͯ͠ΔձࣾͰ׆༂͍ͨ͠ϝϯόʔΛืू͍ͯ͠·͢ɻ
  2. εέδϡʔϧͱ੍໿৚݅ • ։ൃཁ݅ • iOSΫϥΠΞϯτ • هࣄɺάϧʔϐϯά৘ใɺϢʔβʔೝূଞϦιʔεશମʹؔΘ ΔAPI • هࣄੜ੒ɺػցֶशج൫

    • Ϋϩʔϥʔ / ίϯςϯπ෼ྨ / هࣄςϯϓϨੜ੒API • पล؀ڥ • Ωϟογϡػߏ / Τϥʔ, syslog؂ࢹ / ؅ཧπʔϧ • Pushج൫ / ϩά෼ੳج൫ / ABςετج൫
  3. ࣮ࡍͷεέδϡʔϧ ݄ • API • ϞοΫ੔උʢεϐʔυײʹ߹Θͣ1೔͘Β͍͔͠໾ʹཱͨ ͣʣ • هࣄɺάϧʔϐϯά৘ใAPIͷ࡞੒ +

    stg؀ڥߏங • ΫϥΠΞϯτ • UtilɺAPIClientɺLoggingɺϧʔςΟϯάपΓͷ੔උ • ػցֶशɺهࣄੜ੒ج൫ • Ϋϩʔϥʔ࡞੒ + stgʹॾʑͷΠϯϑϥߏங ԼճΓͷ੔උͱϓϩτλΠϓ࡞੒
  4. ࣮ࡍͷεέδϡʔϧ ݄ • API • ϢʔβʔೝূAPIͷ࡞੒ • ΫϥΠΞϯτͭͳ͗͜Έ • push,

    ABج൫, Ωϟογϡؔ࿈ͷௐ੔, ϩάج൫ͷ࡞੒ • ΫϥΠΞϯτ • هࣄҰཡɺৄࡉը໘σβΠϯ౰ͯࠐΈ • ೝূɺpushɺར༻ن໿ɾFAQ౳֤छઃఆɺڧ੍Ξοϓσʔτ౳ • ػցֶशɺهࣄੜ੒ج൫ • هࣄ෼ྨɺΫϩʔϥʔɺؔ࿈هࣄੜ੒౳ͷ࡞੒ɺstg؀ڥߏங ࣮૷٧Ί + σβΠϯ౰ͯࠐΈ
  5. ࣮ࡍͷεέδϡʔϧ ݄ • API • ϩάج൫ɺϛυϧ΢ΣΞ(Τϥʔ, syslog؂ࢹɺmemd౳)ͷ setup • ֤छهࣄࣗಈੜ੒ج൫ɺϩάج൫ͱͷͭͳ͗͜Έ

    • ຊ൪؀ڥߏங • ΫϥΠΞϯτ • σβΠϯϒϥογϡΞοϓɺจݴɾಈ࡞मਖ਼ɺਃ੥࡞ۀ • ػցֶशɺهࣄੜ੒ج൫ • ෼ྨɺείΞ෇͚ϩδοΫͷमਖ਼ɺଞAPIͷमਖ਼ɺ֤छຊ൪؀ ڥߏங ϛυϧ΢ΣΞ௥Ճɺ֤APIͭͳ͗͜Έɺຊ൪؀ڥߏங
  6. ʁ

  7. ʁ

  8. • هࣄ෼ྨɾੜ੒ج൫ • ෼ੳج൫ • ೝূɺ
 هࣄͷҰཡɺӾཡɺ
 γΣΞ౳ • ※৹ࠪʹ൐͍+α

    ΍Δ ΍Βͳ͍ • Android • ݫີͳϦϑΝΫλ • “ߴ଎Ͱແବͷͳ͍”ج൫ • ݕࡧ • ϑΥϩʔɾ͓ؾʹೖΓ • Ӿཡཤྺػೳ
  9. Πϯϑϥߏஙฤ • middleware • papertrail, td_agent, datadog, nginx, memcached •

    ଞɺmysql, jq, einhornʢGoͷAPIͷgraceful restart
 ༻్ʣͳͲΛΆͪΆͪೖΕΔ
  10. API

  11. APIฤ • gunosy/go • mysql, redis, memd, fluent, airbrakeͳͲ
 ϛυϧ΢ΣΞΫϥΠΞϯτ܈͕ೖͬͯΔ

    • jwt authenticator, fluent-loggerͳͲɺ
 ֤APIͰඞཁʹͳΔutilΛ·ͱΊͯΔ • OpsWorks࠷దͳઃఆಡΈࠐΈ
  12. APIฤ • gunosy/goͷϝϦοτ / σϝϦοτ • ϝϦοτ • OpsWorksͰ؀ڥߏஙͯ͠deploy͢Ε͹ɺ
 API͕͍͍͙ͩͨ͢ಈ͘Α͏ʹͳͬͯΔɻ

    • JWTೝূͳͲ͸΄΅࣮૷ʹࠩҟ͕ͳ͍ͷͰɺ
 ڞ௨ϥΠϒϥϦʹ͢ΔϝϦοτ͕େ͖͍ • ӡ༻ɺ؂ࢹपΓͷઃఆ͕OpsWorksͱͷ๊͖߹ΘͤͰ
 ͔ͳΓγϣʔτΧοτͰ͖Δ
  13. APIฤ • ֤໰୊఺ͷղফʹ޲͚ͯ • AWS OpsWorks΁ͷґଘ౓ͷߴ͞ • ϑϨʔϜϫʔΫΛguregu/kami -> net/httpʹҠߦ͠

    ͯɺϛυϧ΢ΣΞ܈΍Ϟσϧ૚ͷґଘΛղফɻ • DIύλʔϯͰॻ͘͜ͱͰɺͳΜͰ΋globalʹ٧Ίͯ ͍ͨॻ͖ํ͔Β୤٫
  14. APIฤ • Ϋϩʔϥʔɺ෼ྨ • GunosyͰഓͬͨػցֶशج൫ϊ΢ϋ΢Λϑϧ׆༻ • ϑϨʔϜϫʔΫ: Django • δϣϒεέδϡʔϥ:

    Celery • σʔλߏ଄: GunosyFeed Ver.2 • ref: https://www.slideshare.net/mosa_siru/ss-65205273
  15. APIฤ • هࣄ෼ྨɺੜ੒ʹඞཁͳAPI܈ • Crawler • GunosyFeedʹଇͬͨAPIΛୟ͍ͯσʔλΛऔͬͯ͘Δ • HTMLαχλΠζɺϑΟʔϧυ৘ใͷύʔαʔػߏ •

    CategoryClassifier • هࣄͷΧςΰϦ෼ྨث • URL(υϝΠϯ)ʹΑΔϧʔϧϕʔεͷ෼ྨ + ػցֶशϞσϧʹΑΔ෼ྨ • NG൑ఆ • TabGenerator • ಛఆΧςΰϦ(λϒ)ͷهࣄҰཡΛੜ੒ • ElasticSearchʹ஝ੵͨ͠ӾཡɾΫϦοΫϩά͔ΒείΞϦϯάͯ͠อଘ • खಈϐοΫΞοϓ౳ͷӡ༻޲͚API
  16. ΞʔΩςΫνϟฤ • LUCRAͰ͸ϚΠΫϩαʔϏεʹ͗͢͠ͳ͍ • هࣄऩूपΓ • ෼ྨɺΫϩʔϥʔɺهࣄੜ੒͸ݸผʹɻ • Client޲͚ͷAPI •

    هࣄɺάϧʔϐϯά৘ใɺϢʔβʔ৘ใ͸ϝΠϯAPI͕શ෦ฦ͢ • PushɺABςετ؅ཧAPI͚ͩ͸ݸผʹɻ
  17. iOS

  18. ։ൃ؀ڥ·ͱΊ • Infrastructure as Code͸పఈ & apply݁ՌͷՄࢹԽ • एׯͷґଘɺటष͍࣮૷͸ڐ༰ͭͭ͠ɺ
 AWS࠷దͳ؀ڥʹ৐͔ͬΔ͜ͱͰ଎౓Λग़ͯ͠Δ

    • ࠷ॳ͔ΒΞʔΩςΫνϟΛϚΠΫϩʹ͗͢͠ͳ͍ • ίϯύΠϧɺCIͳͲͷ܁Γฦ͠࡞ۀ͸ແବͳ࣌ؒΛ
 ա͝͞ͳ͍Α͏ʹɺࣗಈԽ & ߴ଎Խ
  19. • launchΠϕϯτϩά • fore/backgroundϩά • push heartbeatϩά • ೝূ, initAPI

    callϩά • ॳظදࣔ࣌هࣄimpϩά • ΧςΰϦεϫΠϓભҠϩά • ΧςΰϦΫϦοΫભҠϩά • εΫϩʔϧ࣌impϩά • هࣄΫϦοΫϩά • pull-refreshϩά • refresh࣌impϩά • push௨஌։෧ϩά
  20. • launchΠϕϯτϩά • fore/backgroundϩά • push heartbeatϩά • ೝূ, initAPI

    callϩά • ॳظදࣔ࣌هࣄimpϩά • ΧςΰϦεϫΠϓભҠϩά • ΧςΰϦΫϦοΫભҠϩά • εΫϩʔϧ࣌impϩά • هࣄΫϦοΫϩά • pull-refreshϩά • refresh࣌impϩά • push௨஌։෧ϩά ͍ͬͺ͍
  21. ओཁKPI • DAU • 14೔ޙܧଓ཰ • 7೔ޙܧଓ཰ • 1೔ޙܧଓ཰ •

    ௚ۙ1࣌ؒهࣄCTR • ొ࿥ܦ࿏ผ֫ಘ਺ • هࣄΫϦοΫճ਺/DAU • εϫΠϓճ਺/DAU • ͓ؾʹೖΓొ࿥/DAU • શମ / ొ࿥ܦ࿏ผίϗʔτ • Pushڐ୚ঢ়گ • ΧςΰϦผهࣄӾཡ਺
  22. ։ൃख๏·ͱΊ • Infrastructure as Code͸పఈ & apply݁ՌͷՄࢹԽ • एׯͷґଘɺటष͍࣮૷͸ڐ༰ͭͭ͠ɺ
 AWS࠷దͳ؀ڥʹ৐͔ͬΔ͜ͱͰ଎౓Λग़ͯ͠Δ

    • ࠷ॳ͔ΒΞʔΩςΫνϟΛϚΠΫϩʹ͗͢͠ͳ͍ • ίϯύΠϧɺCIͳͲͷ܁Γฦ͠࡞ۀ͸ແବͳ࣌ؒΛ
 ա͝͞ͳ͍Α͏ʹɺࣗಈԽ & ߴ଎Խ