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
FIXエンジン作ってみた
Search
Yuji Tanioka
July 01, 2020
Technology
1
1.6k
FIXエンジン作ってみた
Smartplusで運用開発するBaaSの1機能であるGo製のFIXエンジンについて。
FIXプロトコル、FIXエンジンの概要。BaaSにおけるFIXエンジンの運用。FIXエンジンの利用について。
Yuji Tanioka
July 01, 2020
Tweet
Share
Other Decks in Technology
See All in Technology
自然言語処理を役立てるのはなぜ難しいのか
pfn
PRO
15
4.3k
AWS Lambda と Amazon SQS で「わかった気になれる」FreeRTOS 入門
soracom
PRO
2
140
안드로이드 기술 이력서의 최소 조건
pluu
0
830
AWS DDKを利用したDataOps事始め
beex
1
170
マルチテナントのサービスインフラに大きなテナントを受け入れるまで
7474
0
680
ゼロからはじめる生成AI〜AWS認定とハンズオンで学ぶ初心者の道〜
kenichinakamura
0
130
0x5F3759DF
ykozw
0
320
SOLID - Architecture and Architectural Decisions - Devfest Goa 2024
rivuchk
0
150
MobileActOsaka_241018.pdf
akaitadaaki
0
100
VueとViteで作るUIコンポーネントライブラリ ~デザインシステムとプロダクトの理想的な分離を目指して~ / 20241019_cloudsign_VueFesJapan2024_1
bengo4com
8
3.5k
Cosmos DB で持続可能な RAG を実現しよう!~ AOAI Dev Day ふりかえりを添えて / Sustainable RAG with Cosmos DB with recap AOAI Dev Day
miyake
0
180
複数の外部サービスデータの統合と変換を実現する Railsのインポートアーキテクチャ / Rails import architecture for integration and transformation of multiple external service data
aiandrox
0
260
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
5
130
Fashionably flexible responsive web design (full day workshop)
malarkey
404
65k
A designer walks into a library…
pauljervisheath
202
24k
Speed Design
sergeychernyshev
23
540
Raft: Consensus for Rubyists
vanstee
136
6.6k
Making the Leap to Tech Lead
cromwellryan
131
8.9k
Being A Developer After 40
akosma
85
590k
Fontdeck: Realign not Redesign
paulrobertlloyd
81
5.2k
Into the Great Unknown - MozCon
thekraken
31
1.4k
Testing 201, or: Great Expectations
jmmastey
38
7k
Code Reviewing Like a Champion
maltzj
519
39k
Transcript
FIXΤϯδϯ࡞ͬͯΈͨɻ Finatext × ΤϒϦʔ ʙελʔτΞοϓ࠷લઢͷGo ͷࣄྫʙ 2020/6/26 Smartplus ୩Ԭ
ࣗݾհ • ୩Ԭɹ༞ࢤʢͨʹ͓͔ɹΏ͏͡ʣ • 11ؒɺۜߦγεςϜ։ൃʹؔΘ͍͕ͬͯͨɺGoΛΓͨͯ͘Finatextά ϧʔϓͷSmartplusʹɻ • ݱࡏɺ ূ݊ϓϥοτϑΥʔϜ BaaSͷ։ൃӡ༻ʹܞΘ͍ͬͯΔ
• GoͰɺओʹޱ࠲։ઃؔ࿈ͷΤϯϋϯεͱ͔࣮ࢪதɻͬͱgo modΛཧղ ͖ͯͨ͠ͱ͜Ζɻ • झຯɺຊΛങ͏͜ͱɻʢੵΈຊɻʣ
͡Ίʹ • Fixnatextάϧʔϓͷূ݊ձࣾͰ͋ΔSmartplusͰɺূ݊ϓϥοτ ϑΥʔϜͰ͋ΔBaaSʢBroker as a Serviceʣͷӡ༻։ൃΛߦͳ͍ͬͯ Δɻ • BaaS΄΅ͯ͢Go
Ͱ։ൃɻ • Go Ͱ։ൃͨ͠BaaSͷػೳʹFIXΤϯδϯ͕͋Δɻ
FIXΤϯδϯͱ • FIXɺFinancial Information eXchangeͷུɻ • FIXϓϩτίϧʹ४ڌͨ͠ϝοηʔδసૹΛߦ͏ιϑτΣΞɻ
FIXϓϩτίϧͱ • ۚ༥ใͷΓͱΓΛిࢠԽ͢Δ͜ͱΛతʹ։ൃ͞Εͨϓϩτί ϧɻ • FIXϓϩτίϧͷ༷ɺෳͷۚ༥ػؔͷؔऀͰߏ͞Εͨஂ ମɺFIX Protocol LimitedʢFPLʣ͕ॴ༗ɾཧ͍ͯ͠Δɻ •
1992ɺถࠃגࣜചങΛରͱͨ͠ిࢠऔҾͷඪ४ԽΛతʹɺι ϩϞϯϒϥβʔζࣾɺϑΟσϦςΟࣾʹΑͬͯఆٛ͞Εͨɻ
• ࢿՈ͔ΒͷגࣜͷจΛBaaSͰड͚ɺFIXΤϯδϯʹͯ౦ژূ݊औ ҾॴͱిࢠऔҾʢגࣜͷൃɺఆͷड৴ʣ͍ͯ͠Δɻ BaaSͰͷFIXΤϯδϯͷར༻ גࣜൃ #BB4 '*9 Τ ϯ δ
ϯ औ࣍ઌ '*9 Τ ϯ δ ϯ ౦ژऔҾূ݊ॴ גࣜൃ גࣜൃ ఆͨ͠ ఆͨ͠ ఆͨ͠ FIXϓϩτίϧ
FIXϓϩτίϧɹ • BaaSͰɺFIXΤϯδϯؒΛTCPͰ௨৴͢Δɻ • BaaSͰɺFIXϓϩτίϧͷόʔδϣϯ4.2Λར༻͍ͯ͠Δ • LogonΛ࠷ॳʹૹ৴͢ΔଆͷFIXΤϯδϯΛΠχγΤʔλɺड৴͢Δ ଆΛΞΫηϓλͱΑͿɻ • ϝοηʔδຖʹ௨൪͕͋Γɺϝοηʔδͷ࠶ૹ͕Մೳ
• FIXΤϯδϯಉ࢜ͷࢮ׆ࢹ͕Մೳ
FIXϓϩτίϧɹʙిจϑΥʔϚοτʙ • tagܗࣜͷిจϑΥʔϚοτ • tagʹͦΕͧΕҙຯ͕͋Δɻtag8:Fixόʔδϣϯ etc • ”tag൪߸”=”value” ͷܗࣜ •
۠Γɺ0x01 • ʢαϯϓϧʣLogonϝοηʔδɻ۠Γ”|”Ͱදࣔɻ 8=FIX.4.2|9=69|35=A|34=1|49=SENDER|52=20200608-22:36:08.683|56=RECVER|98=1|108=30|10=040|
FIXϓϩτίϧɹʙཧܥిจϑϩʔʙ ΞΫηϓλ ΠχγΤʔλ Logon Logout Logout Logon ۀܥిจ ۀܥిจ ۀܥిจ
HeartBeat TestRequest HeartBeat ೝূ0,ͷ߹ -PHPOΛૹ৴ 5FTU3FRVFTUΛड৴͢ Δͱ)FBSU#FBUΛૹ৴ ҰఆִؒͰ)FBSU#FBU Λૹ৴ ૬खଆ͔ΒҰఆ࣌ؒ ʹ)FBSU#FBU͕དྷͳ͍ ߹ʹ5FTU3FRVFTU Λૹ৴
FIXϓϩτίϧɹʙۀܥిจϑϩʔʙ ΞΫηϓλ ΠχγΤʔλ ड గਖ਼ड గਖ਼จ ఆ ৽نจ ฑ גΛ
ԁͰCVZจ ࢢʹͯฑ͕ ԁͰגఆ ฑ גΛ ԁͰCVZจʹగਖ਼ గਖ਼ྃ
FIXϓϩτίϧɹʙ࠶ૹͷΈʙ ΞΫηϓλ ΠχγΤʔλ Logon(seqno=1) Logon(seqno=1) ۀܥిจ(seqno=2) ۀܥిจ(seqno=3) ۀܥిจ(seqno=4) ۀܥిจ(seqno=5) Resend
Request(seqno=2, BeginSeqno=4) ۀܥిจ(seqno=4, 43=Y) ۀܥిจ(seqno=5, 43=Y) TFROP͕དྷͣɺ TFROP͕͖ͨͰ࠶ ૹґཔ TFROPͱͲ͔ͣ ࠶ૹґཔ͕͖ͨͷͰॏ ෳϑϥά Ληοτ ͯ͠࠶ૹ ·ͱΊͯ࠶ૹґཔɺ࠶ૹεΩοϓɺ௨൪ϦηοτཁٻͳͲ͋Γɻ
BaaSͰͷγεςϜߏ %# จड '*9XSJUFS 0SEFSOPUJpFS '*9QSPYZ %# .2 BaaS ᶃड
ᶄDBཧ ᶅFIXۀܥిจ࡞ ᶆFIXΤϯδϯ ᶇૹड৴ిจཧ ᶈड৴ۀܥిจॲཧ ᶉরձ ᶊཤྺࢀর ࢢ FIXϓϩτίϧ
BaaSͰͷFIXΤϯδϯͷӡߦ • ฏ 7:30ࠒɹ FIXΤϯδϯΛىಈ͠ɺΞΫηϓλʹLogonΛૹ৴ • ฏ 8:00ࠒɹ ࢢൃ։࢝ •
ฏ 9:00ɹɹ ࢢऔҾ։࢝ʢఆΛड৴࢝͠ΊΔʣ • ฏ11:30ɹɹલऴྃʢఆड৴͠ͳ͘ͳΔʣ • ฏ12:30ɹɹޙ։࢝ʢఆͷड৴࠶։ʣ • ฏ15:00ɹɹࢢͰͷऔҾऴྃ • ฏ15:15ࠒɹdone for day ిจΛड৴ • ฏ16:00ࠒɹLogout͠FIXΤϯδϯΛఀࢭ
ͦͷଞ • GoͰTCPૹड৴Λهड़͍ͯ͠Δɻ • ૹड৴ΛgoroutineͱchannelͰฒߦॲཧɻ • ిจ࠶ૹͷͨΊͷిจอ࣋ʹDatabaseΛར༻͍ͯ͠Δɻ • ϐʔΫ࣌ؒɺฏ8:00ʙ8:05Ͱઍ݅΄Ͳͷ৽نจΛૹ৴͍ͯ͠ Δɻ
ͬͯΈͯ • ҎલFIXϓϩτίϧͱࣅͨϓϩτίϧΛར༻͍ͯͨ͠ͷͰɺۙײ ͕͋ͬͨ • ϚΠΫϩαʔϏεͰͷτϥϯβΫγϣϯཧͷ͠͞ • Մ༻ੑɺࠓޙΑΓΑ͍͖͍ͯͨ͘͠ͱ͜Ζɻ • TCP௨৴ΛϓϩάϥϜͰॻ͘͜ͱʹͪΐͬͱͨ͠ίπ͕͍Δɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ