Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
FIXエンジン作ってみた
Yuji Tanioka
July 01, 2020
Technology
1
1.2k
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
The Fractal Geometry of Software Design
vladikk
1
1.3k
eBPF for Security Observability
lizrice
0
220
Custom AppをIP制限ありのままで審査に通す方法
yusuga
0
700
データエンジニアと作るデータ文化
yuki_saito
4
1.7k
【SAP知らない人向け】SAP on AWS 個人学習メモ/sap-on-aws-study
emiki
3
2.4k
Rethinking how distributed applications are built
tillrohrmann
0
110
Lessons Learned from Scaling Infrastructure as Code
joatmon08
0
800
Apple M1 CPUの脆弱性「PACMAN」について解説する
kuzushiki
0
110
Design for Humans: How to make better modernization decisions
indualagarsamy
2
130
【Pythonデータ分析勉強会#33】「DearPyGuiに入門しました」の続き~Image-Processing-Node-Editor~
kazuhitotakahashi
0
190
スタートアップと技術選定と AWS
track3jyo
PRO
2
360
DeepL の用語集が(いつのまにか)日本語に対応してたので試してみた
irokawah0
0
180
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
237
19k
BBQ
matthewcrist
74
7.9k
The Invisible Side of Design
smashingmag
290
48k
Fashionably flexible responsive web design (full day workshop)
malarkey
396
62k
How GitHub (no longer) Works
holman
296
140k
Music & Morning Musume
bryan
35
4.2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
56
2.3k
A better future with KSS
kneath
225
15k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
498
130k
VelocityConf: Rendering Performance Case Studies
addyosmani
316
22k
A Tale of Four Properties
chriscoyier
149
21k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
12
930
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௨৴ΛϓϩάϥϜͰॻ͘͜ͱʹͪΐͬͱͨ͠ίπ͕͍Δɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ