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
KubeCon NA 2024 Recap: How to Move from Ingress to Gateway API with Minimal Hassle
ysakotch
0
200
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
150
【re:Invent 2024 アプデ】 Prompt Routing の紹介
champ
0
140
フロントエンド設計にモブ設計を導入してみた / 20241212_cloudsign_TechFrontMeetup
bengo4com
0
1.9k
終了の危機にあった15年続くWebサービスを全力で存続させる - phpcon2024
yositosi
10
7.9k
Wantedly での Datadog 活用事例
bgpat
1
440
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
540
Jetpack Composeで始めるServer Cache State
ogaclejapan
2
170
KnowledgeBaseDocuments APIでベクトルインデックス管理を自動化する
iidaxs
1
260
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
150
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
260
LINEスキマニにおけるフロントエンド開発
lycorptech_jp
PRO
0
330
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
0
98
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Git: the NoSQL Database
bkeepers
PRO
427
64k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Writing Fast Ruby
sferik
628
61k
Rails Girls Zürich Keynote
gr2m
94
13k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Making Projects Easy
brettharned
116
5.9k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
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௨৴ΛϓϩάϥϜͰॻ͘͜ͱʹͪΐͬͱͨ͠ίπ͕͍Δɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ