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
pixivとThrift
Search
Atsushi Takayama
December 09, 2015
Technology
1
200
pixivとThrift
Atsushi Takayama
December 09, 2015
Tweet
Share
More Decks by Atsushi Takayama
See All by Atsushi Takayama
最高の開発者体験の追求が開発生産性を改善し続ける文化を生み出した話
edvakf
3
1k
NeurIPS 2021 論文読み会: How Modular should Neural Module Networks Be for Systematic Generalization?
edvakf
0
120
8年物のJavaのシステムをKotlinに変えていく選択に至るまで
edvakf
2
1k
ピクシブ社内のImageFlux利用事例紹介
edvakf
1
2.7k
学びの文化を育む社内読書会のススメ
edvakf
0
210
フルCDNアーキテクチャでサービス設計した話
edvakf
5
3.7k
Goでバイナリを読む+α
edvakf
1
880
お前はこれまでに作ったAPIの数を覚えているのか?
edvakf
0
2.4k
「ふつうのRailsアプリケーション」についての考え方
edvakf
2
750
Other Decks in Technology
See All in Technology
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
330
The Role of Developer Relations in AI Product Success.
giftojabu1
0
140
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
880
【Startup CTO of the Year 2024 / Audience Award】アセンド取締役CTO 丹羽健
niwatakeru
0
1.3k
SREが投資するAIOps ~ペアーズにおけるLLM for Developerへの取り組み~
takumiogawa
1
450
Security-JAWS【第35回】勉強会クラウドにおけるマルウェアやコンテンツ改ざんへの対策
4su_para
0
180
SSMRunbook作成の勘所_20241120
koichiotomo
3
160
OS 標準のデザインシステムを超えて - より柔軟な Flutter テーマ管理 | FlutterKaigi 2024
ronnnnn
1
280
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
2
1.7k
AWS Lambda のトラブルシュートをしていて思うこと
kazzpapa3
2
180
TypeScript、上達の瞬間
sadnessojisan
46
13k
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
700
Featured
See All Featured
Embracing the Ebb and Flow
colly
84
4.5k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
4 Signs Your Business is Dying
shpigford
180
21k
Why Our Code Smells
bkeepers
PRO
334
57k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
The Pragmatic Product Professional
lauravandoore
31
6.3k
Optimizing for Happiness
mojombo
376
70k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
The Invisible Side of Design
smashingmag
298
50k
Transcript
pixivͱThrift
ࣗݾհ • ߴࢁ Թ @edvakf • pixivͷອըࣄۀͷ։ൃऀ • ීஈॻ͍ͯΔͷScalaPHPɺͨ·ʹJSRubyGo •
ϦʔυΤϯδχΞ • ձࣾͷٕज़બʹΛ࣋ͭ • ʮࣾͷΤϯδχΞ͕ͤʹಇͨ͘ΊʹʯΛߟ࣮͑ݱ͢Δۀ
Thrift
Thriftͱ • RPCͷͨΊͷϑϨʔϜϫʔΫ • ಠࣗͷΠϯλʔϑΣΠεఆٛݴޠͰσʔλߏͱαʔϏεΠϯλʔϑΣ ΠεΛهड़ • ͦΕΛίϯύΠϧ֤ͯ͠ݴޠͷϥΠϒϥϦΛग़ྗ • ௨৴ϨΠϠʔಠࣗͷιέοτϓϩτίϧͷଞʹɺHTTPͳͲબΔ
• ΕΔ͜ͱࠓGoogle͕ग़ͨ͠gRPCͱಉ͡ • pixivͰPHP͔Βѻ͍͍͢ThriftΛબ
pixiv.git • pixiv.gitPHP͚ͩͰ200ສߦҎ্ • ίʔσΟϯάن݁ߏ͔ͬ͠Γ͍ͯ͠ΔํͰɺ͍ͩͨ ͍Ͳ͜ಉ͡࡞๏Ͱॻ͔Ε͍ͯΔ • 1ՕॴΛ֮͑ΕଞͷՕॴ͙͢ϝϯςͰ͖ΔΑ͏ʹ • ίʔσΟϯάنʹ߹͍ͬͯͳ͍ݹ͍ίʔυΛॻ͖͑
ͨΓ͢ΔͷʹͦΕͳΓͷखؒΛ͔͚͍ͯΔ
pixiv.git • தʹͪΖΜɺͦ͏͍͏࣌Ҏ֎ʹ৮ΒΕͳ͍Օॴ͋Δ • ͦ͏͍͏෦࣮ࡍpixivͷࠜװͱૄ݁߹ʹͳ͍ͬͯΔ͜ͱ͕ ଟ͍ • ྫ͑ϢʔβʔใͱΠϥετใ͙Β͍͔͍ͬͯ͠ͳ͍ͱ͔ • ϢʔβʔใͱΠϥετใ͙Β͍Λฦ͢APIͰपล෦ͱܨ͕
Δ͜ͱʹΑͬͯɺपล෦ΛผϦϙδτϦʹͯ͠ૣ͘ރΒ͍ͯ͠ ͚ͳ͍͔ • →ThriftΛ࠾༻
ThriftʹܾΊͨܦҢ • pixivʹPHPҎ֎ʹRailsͰॻ͔ΕͨαʔϏε͕͋ ΓɺݴޠΛ͑ͯ͏Մೳੑ͕͋ͬͨ • ࠓGoScala͋Δ • PHPͰAPIαʔόʔΛ࡞Δ͜ͱʹͳΔͷͰɺHTTPʹͬ ͔ΕΔͷ͕ྑ͔ͬͨ
vs JSON • طʹ͋ͬͨɺJSONΛฦ͢εϚϗΞϓϦ༻APIͷΛ ղܾ͔ͨͬͨ͠ • APIυΩϡϝϯτͷඋ͕์ஔ͞Ε͕ͪ • LLʹ͋Γ͕ͪͳɺܕʹ͍෦ΛؤுͬͯίʔυΛॻ ͍ͯରॲ͍ͯͨ͠
• →ThriftͰ͋ΕɺAPIυΩϡϝϯτࣗಈͰ࡞ΒΕΔ ͠ɺPHPͰಛʹҙࣝ͠ͳͯ͘APIͷܕ͕͔ͬ͠Γ͢Δ
ThriftͷΘΕํͱར • ݱࡏɺ2ͭͷपลαʔϏε͔Βར༻ • ScalaͱRails • ThriftͷఆٛΛ࣋ͬͨϦϙδτϦɺcomposer.jsonͱbuild.sbtͱ gemspec͕ஔ͔Ε͍ͯΔ • HTTPͷརΛ׆͔ͯ͠ɺnginxͰϦόʔεϓϩΩγ
• nginxΑΓઌpixivͷී௨ͷϦΫΤετͷࡋ͔Εํͱಉ͡ • APIΛఆٛ͢Δͱ͖ʹσʔλߏܕؚΊ͔ͯͬ͠Γߟ͑ͯ࡞ΔͷͰɺม ͑ͨ͘ͳͬͨ͜ͱࠓͷͱ͜Ζແ͍
རʁ • ॳͷݟ௨ΓɺϢʔβʔใͱΠϥετใ͙Β͍ ͰࣄΓ͍ͯΔ • →ͱ͍͏ͷਖ਼͘͠ͳͯ͘ɺͦΕͧΕͷपลαʔ Ϗεઐ༻ͷAPIগ࡞Δ͜ͱʹͳͬͨ • ઐ༻෦͕ଟ͘ͳΕͳΔ΄Ͳɺʮ࣮पลαʔϏ εີ݁߹ͩͬͨʯͱ͍͏͜ͱʹͳΓɺRPCͰܨ
͕ͬͨͷؒҧ͍ͩͬͨͱ͍͏͜ͱʹͳΔ
ଞʹࠔͬͨ • HTTP௨৴ΛThriftͷϥΠϒϥϦ͕Ӆṭ͢ΔͷͰɺੜͷϨεϙϯεΛ ֬ೝ͢Δͷ͕໘ • ͦͦόΠφϦͳͷͰ༰ΛݟͯΘ͔Βͳ͍ • ʢવ͚ͩͲʣ։ൃ͢Δͱ͖ʹɺAPIఆٛΛॻ͍ͯϒϥϯνʹϓο γϡͯ͠αʔόʔɾΫϥΠΞϯτͰ͏Α͏ʹͯ͠…ͱ͍͏ϑϩʔ ໘
• εϚϗΞϓϦ༻ͷAPIʹ͓͔ͱࢥ͕ͬͨɺॾʑͷཧ༝Ͱ٫Լͨ͠ • ී௨ʹJSONͷREST APIʹམͪண͍ͨ
·ͱΊ • pixivͰࠓ͔ΒݴޠؒɾαʔόʔؒRPCͰThriftΛ ͍࢝Ί·ͨ͠ • ܕ͕͔ͬ͠Γ͍ͯ͠Δͱ͜ΖͱɺυΩϡϝϯτͷੜ͕ ΩϥʔͰͨ͠