Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
グローバル展開を支える量子的なサービス設計 #mercariday / mercariday2...
Search
Hiraku NAKANO
January 20, 2017
Technology
22
13k
グローバル展開を支える量子的なサービス設計 #mercariday / mercariday2017-api
Mercari DAY 2017の登壇資料です。
Hiraku NAKANO
January 20, 2017
Tweet
Share
More Decks by Hiraku NAKANO
See All by Hiraku NAKANO
iD決済を支える技術 / #merpay_techtalk
hirak
33
7k
github.com/mercari の今と昔 /github-mercari
hirak
8
3k
PHPStanで始める継続的静的解析 #phperkaigi /php-static-analysis
hirak
14
51k
極める!メソッドチェーン #phpstudy / fluent-interface
hirak
8
2.7k
evalこそパワー #phpkansai / phpkansai2017
hirak
2
1.4k
PHPのエラーと例外再入門 / php-error-and-exception
hirak
19
19k
メルカリ JP Tech Side / mercari-jp-tech-side
hirak
7
1.8k
Composerプラグインを作ってみよう /phpcon2016
hirak
5
14k
packagist.jpの紹介と新機能 /#phpblt
hirak
4
2.7k
Other Decks in Technology
See All in Technology
急成長中のWINTICKETにおける品質と開発スピードと向き合ったQA戦略と今後の展望 / winticket-autify
cyberagentdevelopers
PRO
1
120
Aurora_BlueGreenDeploymentsやってみた
tsukasa_ishimaru
1
120
クライアントサイドでよく使われる Debounce処理 をサーバサイドで3回実装した話
yoshiori
1
130
KaigiOnRails2024
igaiga
6
3.6k
Sidekiq vs Solid Queue
willnet
11
7k
端末が簡単にリモートから操作されるデモを通じて ソフトウェアサプライチェーン攻撃対策の重要性を理解しよう
kitaji0306
0
150
インシデント対応の 実践と品質文化の醸成
____rina____
2
1.5k
サーバーサイドのデータプレーンプログラミング 〜 NVIDIA Blue Field / DOCA 〜
ebiken
PRO
1
230
都市伝説バスターズ「WebアプリのボトルネックはDBだから言語の性能は関係ない」 - Kaigi on Rails 2024
osyoyu
13
4.8k
WHOLENESS, REPAIRING, AND TO HAVE FUN: 全体性、修復、そして楽しむこと
snoozer05
PRO
3
3.6k
「最高のチューニング」をしないために / hack@delta 24.10
fujiwara3
15
2.7k
WINTICKETアプリで実現した高可用性と高速リリースを支えるエコシステム / winticket-eco-system
cyberagentdevelopers
PRO
1
170
Featured
See All Featured
Side Projects
sachag
452
42k
Practical Orchestrator
shlominoach
186
10k
Testing 201, or: Great Expectations
jmmastey
38
7k
Thoughts on Productivity
jonyablonski
67
4.3k
Teambox: Starting and Learning
jrom
132
8.7k
Documentation Writing (for coders)
carmenintech
65
4.4k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
280
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
How GitHub (no longer) Works
holman
311
140k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.2k
RailsConf 2023
tenderlove
29
870
Transcript
άϩʔόϧల։Λࢧ͑Δ ྔࢠతͳαʔϏεઃܭ 2017/01/20 Mercari DAY Hiraku NAKANO
About Me • த (@Hiraku) • ϝϧΧϦͷJP൛ BizDevνʔϜॴଐ • αʔόʔαΠυ୲ɺPHP͔Γॻ͍ͯΔ
• ೖࣾͯ͠Ұͪΐͬͱ
όοΫΤϯυܥͷ৬छ 43& αʔόʔαΠυ w ৴པੑʹϑΥʔΧε w ύϑΥʔϚϯενϡʔχϯά ͕ओઓ w 0QT݉ͶΔ
w ػೳ։ൃʹϑΥʔΧε w υϝΠϯϩδοΫ͕ओઓ w 1ͱηοτͰಈ͘ ࢲͬͪ͜ʹॴଐ
άϩʔόϧల։Λࢧ͑Δ ྔࢠతͳαʔϏεઃܭ 2017/01/20 Mercari DAY
None
"FacebookͩͱɺԿສͱ͍͏ ABςετ͕ಉ࣌ʹ͍ͬͯΔɻ ϝϧΧϦͰेຊͬͯΔɻ ύλʔϯେʹ͋Δ"
ͬ͘ ͑ΜͲ Web൛
ͬ͘ ͑ΜͲ Web൛ ͦ͏͍͏Πϝʔδ͡Όͳ͍
ͬ͘ ͑ΜͲ Web൛ ͳΜ͔ྠֲ͕ Α͔͘Βͳ͍…
ͬ͘ ͑ΜͲ • ຊ൛ʹΞΫηε • ΫϥΠΞϯτόʔδϣϯ͕XX • ϩάΠϯதͷϢʔβʔID͕YY • ͕ZZ
• ΞΫηεͨ࣌͠ࠁ͕TT • etc ͬͱྠֲ͕ ݟ͑ͯ͘Δ
"ྔࢠత"ͱ͍͏ൺᄻ • ݟΔਓʹΑͬͯҧ͏ಈ͖ʹͳΔ • ؍ଌ͠ͳ͍ͱΑ͔͘Βͳ͍ • શύλʔϯʹରͯ͠ໃ६ͳ͘ಈ࡞͢Δ
ͳͥ"ྔࢠత"ͳͷ͔ • Ծઆ࣮ݧओٛ • ࣮ݧͨ͠΄͏͕͘ਖ਼ղʹͨͲΓண͚Δ • ֎෦ڥͷಈ͖ෆ࣮֬ • ಥવͷোɾ֎෦͔Βͷ߈ܸ •
શͯఆ͢Δͷࠔ
"ྔࢠత"ͳιϑτΣΞ • ෳࡶɾϝϯςϯφϯεେม • ߟྀ࿙Εͱ͔ى͖ͳ͍ͷʁ • ϝϧΧϦͲ͏࣮ݱ͍ͯ͠Δͷ͔ʁ
ࠓ ͢͜ͱ 1. ϞόΠϧΞϓϦͷόοΫΤϯυʹ ٻΊΒΕΔ͜ͱ 2. ॏཁͰͳ͔ͬͨ͜ͱ 3. mercari-apiͷࢥ 4.
ࠓΛੜ͖ΔͨΊʹ
ٻΊΒΕ͍ͯΔ͜ͱ
ͬ͘ ͑ΜͲ • ϦϦʔεͷίετ͕͍ • શʹίϯτϩʔϧԼ • ϦϦʔεޙؚΉ • ඇެ։ʹͰ͖Δ
όοΫΤϯυ͔ͩΒͰ͖Δ͜ͱ • ࢪࡦΛଧͭͨΊͷ • ʮࠓ͙͢ϦϦʔεʯ͕ৗʹՄೳͳଘࡏ • ΞυϗοΫͳোରԠྗ • σʔλͷ࠷ऴน
ͪΖΜલఏͱͯ͠ • ࣭ • ύϑΥʔϚϯε • কདྷతʹഁ͠ͳ͍ݟ௨͠ • Լ͠ͳ͍։ൃ •
ηΩϡϦςΟ߈ܸͷରԠ
None
શͯରॲ͢Δͷେม
࣮ॏཁͰͳ͔ͬͨ͜ͱ
ίʔυతʹඒಙͱ͞ΕΔͷ • ൚༻ੑ • ඒ͠͞ • Ұ؏ੑ ϝϧΧϦͰ Ձ͕Ί
൚༻ੑͳͲͳ͍ • ެࣜΫϥΠΞϯτͷΈߟྀ • ͔͠αϙʔτόʔδϣϯͷΈ • ͦΕҎ֎͔Β͑ͳ͍͠ɺ ͏͜ͱఆ͠ͳ͍
WebAPIͱͯ͠ͷඒ͠͞ • RESTful, HATEOASͱ͍ͬͨ ϕετϓϥΫςΟε…ͱ͞ΕΔͷ • શવकͬͯͳ͍ • ࠷ॳ͋ͬͨͣͳͷ͕ͩ •
ެࣜΫϥΠΞϯτʹ߹Θͤͯվम͠·͘ΕΔ͜ͱ ͷ΄͏͕ॏཁ
Ұ؏ੑͷͳ͞ • ※σʔλҰ؏ੑࢮकͰ͢Α • ίʔυͱͯ͠ேྩվ ͲΜͱདྷ͍ʂ • Ή͠ΖҰ؏ੑͷͳ͍मਖ਼ʹ͑ΒΕΔΑ͏ʹ ίετΛࢧ͏͖
ϓϩάϥϚͱͯ͠ͷ৺ڥ • ͪΖΜɺඒ͘͠Ұ؏ͯ͠நԽ͞Εͨͷ Λ࡞Γ͍ͨ… • ৽ن։ൃͳΒɺ͍ͭເΛ٧ΊࠐΉΑ͏ʹ ͍ͯ͠Δ • ʮमਖ਼͍ͨ͠ʯͱ͍͏νέοτΛʑ࡞ͬͯ ͍Δ
PragmaticͰ͋Δ͜ͱ DogmaticʹͳΒͳ͍͜ͱ • ϦϦʔεΛ᪳͠ͳ͍ • ෆશͰಈ͍͍ͯΔํ͕ΑͬΆͲ͍͍ • Be Professional Day
Ͱ៉ྷʹ͢Δ
mercari-api
ιʔείʔυඇެ։ ͳͷͰɺུ͚֓ͩ
ٕज़తΩʔϫʔυ • ಠ࣮ࣗͷJSON over HTTPS WebAPI • nginx/OpenResty, Go, PHP,
MySQL, Q4M, Parallel-Prefork, Memcached, Solr, ... • DietCakeϕʔεͷϑϨʔϜϫʔΫ
None
࣮ࡍͷߏ ൃදଟ͍ͷͰׂѪ
mercari-api ͷࢥ
ࢥతΩʔϫʔυ • ബ͍ϑϨʔϜϫʔΫɾ۪ͳ࣮ • ͕͞શͯΛղܾ͢Δ • Ψʔυઅͷଟ༻ • ୯ҰϦϙδτϦͱ͍͏ᐫ
None
DietCake • ඇৗʹബ͘ɺ༨ܭͳ͜ͱԿ͠ͳ͍ • શମతʹ۪ͳ࣮ • ϑϩϯτίϯτϩʔϥʔ͔Βॱ൪ʹಡΈਐ Ί͍͚ͯඞͣѲͰ͖Δ • ϑϨʔϜϫʔΫଆ͕͋·Γറͬͯ͜ͳ͍
͕͞શͯΛղܾ͢Δ • APIࣗମͷ͞ • ଟগͷແཧ͕Ͱ͖Δঢ়ଶΛอͭ • ։ൃͷ͞ • ͙͢ʹফ͢ͳΒΞυϗοΫͳରԠՄೳ
Α͋͘Δޫܠ • 1ि͙ؒΒ͍Ͱ։ൃ+QA -> ϦϦʔε • Ωϟϯϖʔϯ͕ऴΘͬͨͷͰશআ
Ψʔυઅͷଟ༻ • if (ఆͱҧ͏) { throw new Error; } •
Α͋͘Δྫ • ʮUSͰͷΈʯ • ʮABςετέʔε˓˓൪ͷAύλʔϯʯ • ʮ࠷৽ͷΞϓϦΛ͓͍Լ͍͞ʯ
୯ҰϦϙδτϦͱ͍͏ᐫ • JP/US/GBઃఆͱDBͰΓସ͑ • αʔόʔߏɺ։ൃڥɺϊϋڞ௨Խ • ฐ͋Δ͕ࠓͷͱ͜Ζڐ༰ൣғ
mercari-api ۪ͳ࣮ ˣ ։ൃͷॠൃྗ ੑೳ Ψʔυઅଟ༻ ˣ গ͠ͰෳࡶΛԼ͛Δ ୯ҰϦϙδτϦ ˣ
ഁ͠ͳ͍ઃܭΛ ڧཁ͞ΕΔ
ࠓΛੜ͖ΔͨΊʹ
ϝϧΧϦʹશ͘༨༟ͳ͍ • USϓϩμΫτ·ͩ·ͩେޭͰͳ͍ • ۪ͳվળʹΑΓɺ֯Λ͞ΒʹߴΊͳ ͍ͱɺγϦίϯόϨʔͷڝ߹ʹ͋ͬͱ͍͏ؒ ʹෛ͚Δ • ݶΒΕͨϦιʔεΛͬͯɺҰยͷແବͳ͘ ࣄΛਐΊΔ͜ͱ͕ۃΊͯॏཁɻ
Ͱ͖ͳ͍͜ͱଟ͍ • খखઌͷςΫχοΫͰෳࡶԼ͕Βͳ͍ • όάΛϦϦʔεͯ͠͠·͏͜ͱ͋Δ • ࣦഊͩͬͨͷ͑Εͣ • ͔͠͠ڝ߹ͬͯ͘Εͳ͍
None
ʮΤϯδχΞϦϯά͚ͩͰ ղܾ͠Α͏ͱ͠ͳ͍ʯ
ʮ࡞ΓతʹࣗಈςετͭΒ͍ʯ ˣ ؾ߹͍ͰϨϏϡʔ͠·͢ QAͰ֬ೝ͠·͢
ʮ࣭ʹෆ͕҆Δ…ʯ ↓ ͦ͏ͳΒ͙͢͠· ͠ΐ͏ ෛՙࢹ͠·͢
Τοδέʔεͷ࣮͕େม ↓ ☺CSखΦϖͳΒରॲ͍͚ͦ͏ ରԠϚχϡΞϧͰ͖ͨΑʔ
None
େࣄʹ͍ͯ͠Δ͜ͱ • ԿΑΓϓϩμΫτͱͯ͠ޭ͢Δ͜ͱ • 80% ͰϦϦʔεͯ͠ɺલʹਐΊΔ • ΓผͷखஈΛ୳ͯ͠र͏ or མͱ͢
• ৽ػೳچΫϥΠΞϯτͰಈ͔ͳ͍͚Ͳɺ Ϋϥογϡͤ͞ͳ͍
·ͱΊ
Ҏ্ࢲֶ͕Μͩ͜ͱ • ࢲͷೖࣾͨ͠ࠒʹطʹ͋ͬͨจԽ • ͓ͦΒ͘ૂͬͨ෦ͱɺ݁Ռతʹͦ͏ͳͬͨ෦ ͕͋Δ • ྠֲͷᐆດͳྔࢠతͳαʔϏε • ͜Ε͔Βͦ͏Ͱ͋Γଓ͚ΔͩΖ͏͠ɺ
ࢧ͑ΔͨΊͷίετࢧ͏