グローバル展開を支える量子的なサービス設計 #mercariday / mercariday2017-api

グローバル展開を支える量子的なサービス設計 #mercariday / mercariday2017-api

Mercari DAY 2017の登壇資料です。

2295fec4d38f59366f983d38628e6ca0?s=128

Hiraku NAKANO

January 20, 2017
Tweet

Transcript

  1. άϩʔόϧల։Λࢧ͑Δ ྔࢠతͳαʔϏεઃܭ 2017/01/20 Mercari DAY Hiraku NAKANO

  2. About Me • த໺ ୓(@Hiraku) • ϝϧΧϦͷJP൛ BizDevνʔϜॴଐ • αʔόʔαΠυ୲౰ɺPHP͹͔Γॻ͍ͯΔ

    • ೖࣾͯ͠Ұ೥ͪΐͬͱ
  3. όοΫΤϯυܥͷ৬छ 43& αʔόʔαΠυ w ৴པੑʹϑΥʔΧε w ύϑΥʔϚϯενϡʔχϯά
 ͕ओઓ৔ w 0QT΋݉ͶΔ

    w ػೳ։ൃʹϑΥʔΧε w υϝΠϯϩδοΫ͕ओઓ৔ w 1ͱηοτͰಈ͘ ࢲ͸ͬͪ͜ʹॴଐ
  4. άϩʔόϧల։Λࢧ͑Δ ྔࢠతͳαʔϏεઃܭ 2017/01/20 Mercari DAY

  5. None
  6. "FacebookͩͱɺԿສͱ͍͏ ABςετ͕ಉ࣌ʹ૸͍ͬͯΔɻ
 ϝϧΧϦͰ΋਺ेຊ͸૸ͬͯΔɻ ύλʔϯ͸๲େʹ͋Δ"

  7. ͹ͬ͘
 ͑ΜͲ Web൛

  8. ͹ͬ͘
 ͑ΜͲ Web൛ ͦ͏͍͏Πϝʔδ͡Όͳ͍

  9. ͹ͬ͘
 ͑ΜͲ Web൛ ͳΜ͔ྠֲ͕
 Α͘෼͔Βͳ͍…

  10. ͹ͬ͘
 ͑ΜͲ • ೔ຊ൛ʹΞΫηε • ΫϥΠΞϯτόʔδϣϯ͕XX • ϩάΠϯதͷϢʔβʔID͕YY • ୺຤͕ZZ

    • ΞΫηεͨ࣌͠ࠁ͕TT • etc ΍ͬͱྠֲ͕
 ݟ͑ͯ͘Δ
  11. "ྔࢠత"ͱ͍͏ൺᄻ • ݟΔਓʹΑͬͯҧ͏ಈ͖ʹͳΔ • ؍ଌ͠ͳ͍ͱΑ͘෼͔Βͳ͍ • શύλʔϯʹରͯ͠ໃ६ͳ͘ಈ࡞͢Δ

  12. ͳͥ"ྔࢠత"ͳͷ͔ • Ծઆ࣮ݧओٛ • ࣮ݧͨ͠΄͏͕଎͘ਖ਼ղʹͨͲΓண͚Δ • ֎෦؀ڥͷಈ͖͸ෆ࣮֬ • ಥવͷো֐ɾ֎෦͔Βͷ߈ܸ •

    શͯ૝ఆ͢Δͷ͸ࠔ೉
  13. "ྔࢠత"ͳιϑτ΢ΣΞ͸ • ෳࡶɾϝϯςϯφϯεେม • ߟྀ࿙Εͱ͔ى͖ͳ͍ͷʁ • ϝϧΧϦ͸Ͳ͏࣮ݱ͍ͯ͠Δͷ͔ʁ

  14. ࠓ೔ ࿩͢͜ͱ 1. ϞόΠϧΞϓϦͷόοΫΤϯυʹ
 ٻΊΒΕΔ͜ͱ 2. ॏཁͰ͸ͳ͔ͬͨ͜ͱ 3. mercari-apiͷࢥ૝ 4.

    ࠓΛੜ͖࢒ΔͨΊʹ
  15. ٻΊΒΕ͍ͯΔ͜ͱ

  16. ͹ͬ͘
 ͑ΜͲ • ϦϦʔεͷίετ͕௿͍ • ׬શʹίϯτϩʔϧԼ • ϦϦʔεޙ΋ؚΉ • ඇެ։ʹͰ͖Δ

  17. όοΫΤϯυ͔ͩΒͰ͖Δ͜ͱ • ࢪࡦΛ਺ଧͭͨΊͷ౔୆ • ʮࠓ͙͢ϦϦʔεʯ͕ৗʹՄೳͳଘࡏ • ΞυϗοΫͳো֐ରԠྗ • σʔλͷ࠷ऴ๷น

  18. ΋ͪΖΜલఏͱͯ͠ • ඼࣭ • ύϑΥʔϚϯε • কདྷతʹഁ୼͠ͳ͍ݟ௨͠ • ௿Լ͠ͳ͍։ൃ଎౓ •

    ηΩϡϦςΟ߈ܸ΁ͷରԠ
  19. None
  20. શͯରॲ͢Δͷ͸େม

  21. ࣮͸ॏཁͰͳ͔ͬͨ͜ͱ

  22. ίʔυతʹඒಙͱ͞ΕΔ΋ͷ • ൚༻ੑ • ඒ͠͞ • Ұ؏ੑ ϝϧΧϦ಺Ͱ͸ Ձ஋͕௿Ί

  23. ൚༻ੑͳͲͳ͍ • ެࣜΫϥΠΞϯτͷΈߟྀ • ͔͠΋αϙʔτόʔδϣϯͷΈ • ͦΕҎ֎͔Β͸࢖͑ͳ͍͠ɺ
 ࢖͏͜ͱ΋૝ఆ͠ͳ͍

  24. WebAPIͱͯ͠ͷඒ͠͞ • RESTful, HATEOASͱ͍ͬͨ
 ϕετϓϥΫςΟε…ͱ͞ΕΔ΋ͷ • શવकͬͯͳ͍ • ࠷ॳ͸͋ͬͨ͸ͣͳͷ͕ͩ •

    ެࣜΫϥΠΞϯτʹ߹Θͤͯվम͠·͘ΕΔ͜ͱ ͷ΄͏͕ॏཁ
  25. Ұ؏ੑͷͳ͞ • ※σʔλ͸Ұ؏ੑࢮकͰ͢Α • ίʔυͱͯ͠͸ேྩ฻վ ͲΜͱདྷ͍ʂ • Ή͠ΖҰ؏ੑͷͳ͍मਖ਼ʹ଱͑ΒΕΔΑ͏ʹ ίετΛࢧ෷͏΂͖

  26. ϓϩάϥϚͱͯ͠ͷ৺ڥ • ΋ͪΖΜɺඒ͘͠Ұ؏ͯ͠ந৅Խ͞Εͨ΋ͷ Λ࡞Γ͍ͨ… • ৽ن։ൃͳΒɺ͍ͭ΋ເΛ٧ΊࠐΉΑ͏ʹ͸ ͍ͯ͠Δ • ʮमਖ਼͍ͨ͠ʯͱ͍͏νέοτΛ೔ʑ࡞ͬͯ ͍Δ

  27. PragmaticͰ͋Δ͜ͱ
 DogmaticʹͳΒͳ͍͜ͱ • ϦϦʔεΛ᪳᪯͠ͳ͍ • ෆ׬શͰ΋ಈ͍͍ͯΔํ͕ΑͬΆͲ͍͍ • Be Professional Day

    Ͱ៉ྷʹ͢Δ
  28. mercari-api

  29. ιʔείʔυඇެ։ ͳͷͰɺུ͚֓ͩ

  30. ٕज़తΩʔϫʔυ • ಠ࣮ࣗ૷ͷJSON over HTTPS WebAPI • nginx/OpenResty, Go, PHP,

    MySQL, Q4M, Parallel-Prefork, Memcached, Solr, ... • DietCakeϕʔεͷϑϨʔϜϫʔΫ
  31. None
  32. ࣮ࡍͷߏ੒͸ ൃද΋ଟ͍ͷͰׂѪ

  33. mercari-api ͷࢥ૝

  34. ࢥ૝తΩʔϫʔυ • ബ͍ϑϨʔϜϫʔΫɾ۪௚ͳ࣮૷ • ଎͕͞શͯΛղܾ͢Δ • Ψʔυઅͷଟ༻ • ୯ҰϦϙδτϦͱ͍͏ᐫ

  35. None
  36. DietCake • ඇৗʹബ͘ɺ༨ܭͳ͜ͱ͸Կ΋͠ͳ͍ • શମతʹ۪௚ͳ࣮૷ • ϑϩϯτίϯτϩʔϥʔ͔Βॱ൪ʹಡΈਐ Ί͍͚ͯ͹ඞͣ೺ѲͰ͖Δ • ϑϨʔϜϫʔΫଆ͕͋·Γറͬͯ͜ͳ͍

  37. ଎͕͞શͯΛղܾ͢Δ • APIࣗମͷ଎͞ • ଟগͷແཧ͕Ͱ͖Δঢ়ଶΛอͭ • ։ൃͷ଎͞ • ͙͢ʹফ͢ͳΒΞυϗοΫͳରԠ΋Մೳ

  38. Α͋͘Δޫܠ • 1ि͙ؒΒ͍Ͱ։ൃ+QA -> ϦϦʔε • Ωϟϯϖʔϯ͕ऴΘͬͨͷͰશ࡟আ

  39. Ψʔυઅͷଟ༻ • if (૝ఆͱҧ͏) { throw new Error; } •

    Α͋͘Δྫ • ʮUSͰͷΈʯ • ʮABςετέʔε˓˓൪ͷAύλʔϯʯ • ʮ࠷৽ͷΞϓϦΛ͓࢖͍Լ͍͞ʯ
  40. ୯ҰϦϙδτϦͱ͍͏ᐫ • JP/US/GB͸ઃఆͱDBͰ੾Γସ͑ • αʔόʔߏ੒ɺ։ൃ؀ڥɺϊ΢ϋ΢ڞ௨Խ • ฐ֐΋͋Δ͕ࠓͷͱ͜Ζڐ༰ൣғ

  41. mercari-api ۪௚ͳ࣮૷ ˣ ։ൃͷॠൃྗ ੑೳ Ψʔυઅଟ༻ ˣ গ͠Ͱ΋ෳࡶ౓ΛԼ͛Δ ୯ҰϦϙδτϦ ˣ

    ഁ୼͠ͳ͍ઃܭΛ
 ڧཁ͞ΕΔ
  42. ࠓΛੜ͖࢒ΔͨΊʹ

  43. ϝϧΧϦʹશ͘༨༟͸ͳ͍ • USϓϩμΫτ΋·ͩ·ͩେ੒ޭͰ͸ͳ͍ • ۪௚ͳվળʹΑΓɺ੒௕֯౓Λ͞ΒʹߴΊͳ ͍ͱɺγϦίϯόϨʔͷڝ߹ʹ͋ͬͱ͍͏ؒ ʹෛ͚Δ • ݶΒΕͨϦιʔεΛ࢖ͬͯɺҰยͷແବͳ͘෺ ࣄΛਐΊΔ͜ͱ͕ۃΊͯॏཁɻ

  44. Ͱ͖ͳ͍͜ͱ΋ଟ͍ • খखઌͷςΫχοΫͰ͸ෳࡶ౓͸Լ͕Βͳ͍ • όάΛϦϦʔεͯ͠͠·͏͜ͱ΋͋Δ • ࣦഊͩͬͨ΋ͷ͸਺͑੾Εͣ • ͔͠͠ڝ߹͸଴ͬͯ͸͘Εͳ͍

  45. None
  46. ʮΤϯδχΞϦϯά͚ͩͰ
 ղܾ͠Α͏ͱ͠ͳ͍ʯ

  47. ʮ࡞ΓతʹࣗಈςετͭΒ͍ʯ ˣ ؾ߹͍ͰϨϏϡʔ͠·͢
 QAͰ֬ೝ͠·͢

  48. ʮ඼࣭ʹෆ͕҆࢒Δ…ʯ
 ↓ ΍͹ͦ͏ͳΒ͙͢໭͠· ͠ΐ͏
 ෛՙ஫ࢹ͠·͢

  49. Τοδέʔεͷ࣮૷͕େม
 ↓ ☺CSखΦϖͳΒରॲ͍͚ͦ͏
 ରԠϚχϡΞϧͰ͖ͨΑʔ

  50. None
  51. େࣄʹ͍ͯ͠Δ͜ͱ • ԿΑΓ΋ϓϩμΫτͱͯ͠੒ޭ͢Δ͜ͱ • 80% ͰϦϦʔεͯ͠ɺલʹਐΊΔ • ࢒Γ͸ผͷखஈΛ୳ͯ͠र͏ or མͱ͢

    • ৽ػೳ͸چΫϥΠΞϯτͰಈ͔ͳ͍͚Ͳɺ Ϋϥογϡ͸ͤ͞ͳ͍
  52. ·ͱΊ

  53. Ҏ্͸ࢲֶ͕Μͩ͜ͱ • ࢲͷೖࣾͨ͠ࠒʹ͸طʹ͋ͬͨจԽ • ͓ͦΒ͘ૂͬͨ෦෼ͱɺ݁Ռతʹͦ͏ͳͬͨ෦ ෼͕͋Δ • ྠֲͷᐆດͳྔࢠతͳαʔϏε • ͜Ε͔Β΋ͦ͏Ͱ͋Γଓ͚ΔͩΖ͏͠ɺ


    ࢧ͑ΔͨΊͷίετ΋ࢧ෷͏