2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
AWSとGo言語とコンテナによる、証券プラットフォーム(全1記事)
提供:株式会社Finatext
リンクをコピー
記事をブックマーク
石橋淳志氏(以下、石橋):こんばんは。今日は『AWSとGo言語とコンテナによる証券プラットフォーム』というテーマでお話しします。まずは自己紹介させていただきます。私は石橋といいます。大学在学中にフィナテキストの創業に関わって、かれこれ5年くらいになります。
日頃Go言語を使っていて、terraformをAWSのインフラのプロビジョニングに使っていることもあって、terraform-provider-awsにはいろいろコミットしています。
次に会社紹介をさせていただきます。
フィナテキストはReinvent Finance as a service、金融をサービスとして再発明するをビジョンとしてやっているFinTech企業です。
金融サービスをtoCやBtoBtoCで出すサービス開発をメインとするフィナテキスト。去年パブリックにローンチした、証券システムのBaaSを提供しているスマートプラス。そしてビッグデータの解析をメインとしているナウキャストという会社があり、三位一体やっています。
従来の金融の証券サービスは発注部分からアプリケーションまで完全にバンドルされて、1つの証券会社が一気通貫で出すようなものが多かったです。
最近ではSNSやニュースサイトを見ている人もいれば、企業分析をして投資する人、または株式優待をメインにする人、テクニカルをメインにする人もいます。
入口はいろんなかたちで入ることができ、その中で自分にあったサービス、取引の仕方でできるようになっていければいいなということで、執行部分やバックオフィス部分をバンドリングして、その上のアプリケーションを自由に作れるようにしようというのがBaaS構想です。今日はこちらをメインでお話させていただきます。
今日はこのBaaSの中で特徴となる部分をいくつか紹介します。
1つは今日のタイトルのとおり、ほぼすべてのサービスをコンテナで稼働させている点。そして2つ目は認証サービスを切り出している点です。
最後に、これは聞きなれない名前かもしれませんが、AWSが専用線だったり、オンプレからネットワークの繋ぎ込み用として出してるDirect Connectというサービスがあります。これによって外接環境の繋ぎ込みを行なっています。
それぞれ1つずつ見ていきます。まずコンテナの部分に関してです。
大枠としてはRoute53、DNSでサブドメインレベルでサービスのネームスペースを切ってまして、ALBに向けています。リクエストはそのALBに集約しており、これがゲートウェイのようになっていて、Host Headerをもとに後ろのターゲットグループ、ECSに振り分けています。そしてそれぞれの中でDockerコンテナが動いています。
こういうサービスがマイクロサービス化した際の問題として、ログの集約があります。そこはawslogsというログドライバを使ってCloudWatchに流しています。また、ECS上でcronの実行も当然ありますので、そこはCloudWatch Eventsによってマネージドで運用しています。
Go言語によるコンテナ運用のいいところとして、ECSによるオートヒーリングとクラスタのAuto Scaling groupによる構成によって簡単に潰せる環境になっているのが嬉しい点です。
例えば2月にDockerコンテナの脆弱性がありました。サーバー台数としてはだいたい100台くらい動いています。その際には、脆弱性を解消したイメージに更新するのに1日あれば十分でした。
また侵入などがあったとしても、インシデントレスポンスとしてすぐにサービスを隔離してもメインのサービスのアベイラビリティを維持できるのが嬉しいところです。
先ほどのCloudWatch Logsにログを集約するところなんですが、そこはメトリクスフィスターやKinesisを介して、アプリケーションのログを解析して、オンラインにレスポンスできるのが嬉しいポイントです。AWSでいうとexport taskというものがあり、CloudWatch LogsからS3にパーティションを分けて吐き出せるので、あとでAthenaなどで分析できるのもいいところです。
あとcron処理をCloudWatch Eventsでやってると副次的に出てきたのも嬉しい点として、AWSのAPIで今サービス全体として動いているcron jobが何時に何が実行されてみたいなことの一覧化が簡単です。
またGoを使うことでDockerのマルチステージビルドという機能をうまく活用できます。ビルドステージにのみGoの環境があって、そこで作成されたバイナリをランタイムステージの薄いalpineで実行する、といったような感じです。
Goだとこれがほぼテンプレートして書けて、イメージサイズも10MBくらい。ECRだったりプッシュされた状態では、5MBくらいのかなり小さいサイズでキープできているのが嬉しいところです。その、結果プロセスを走らせたり、フェイルオーバーするときのオーバーヘッドもすごく小さくなるので、そのあたりもいいところだと思います。
次に認証サービスの切り出しについてです。マイクロサービスとしてサービスがいくつかあります。認証をどう解決しているのかというと、今はCognitoを使ってクライアントにjwtを吐き出して、それを各サービスがデコード、バリデーションして使っています。
認証はCognitoのOpenID Connectで委譲しています。認可のほうは現状内部的に認可サービスをプロトコルとしてはgRPCを使って各サービスから問い合わせてやっています。
なぜgRPCを使っているかと言うと、スキーマドリブンでやりたかったのが一番大きなところです。というのも認可サービスは1つあって、ほとんど今後作っていくサービスやアプリケーションは認可サービスを使うクライアントになります。
その結果、gRPCのスキーマからクライアントコードをジェネレートできるのはすごく嬉しい点なので、gRPCを選定しました。あとは単純に認可のところでパフォーマンスも早いです。
これは現時点ではやってないのですが、Cognitoを使うとCognitoとLambdaだったりで、サーバーレスでパスワードレスでの認証も簡単にできるので、いろいろ遊んでみるとおもしろいかと思います。
ただ、あらゆるサービスでOpenID Connectなどの認証の委譲が適しているかと言うとけっこう微妙です。そこは各自のサービスに要件が合うかどうかを選びながら選択するといいかなと思います。
最後にDirect Connectによる外接環境です。金融だと発注や市場のデータを取ってくるところが、TCP上でHTTPではなく独自の仕様でバイナリストリームを解析してやるみたいなことがけっこうあるんですね。
発注だと一応FIXと呼ばれる、Financial Information eXchangeと言われる発注のプロトコルがあって、注文のやり取りはFIXを用います。その結果専用線での接続を余儀なくされる場合があります。ただなんとかそこをAWS上でやりたかったので、今回はDirect Connectを使ってやっています。
ほかにも金融系だとSFTPを使うことがありますが、ここは最近出たAWS Transferが助かるという印象があるんですが、現状ちょっと高いので、なかなか導入しきれていません。
最近なのですが、金融機関相手でもS3でのファイル連携をやってもいいところも出てきていて、そこは嬉しいです。AWSでPrivate LinkというほかのAWSアカウントと実際にVPC内部にネットワークインターフェイスがあるように接続できるサービスがあります。それが将来的にできるとDirect Connectを外すことができます。
嬉しい部分がある一方で、AWSやGCPがインターネットっぽくなっていくので果たしてそれ自体はどうなのか? というのはさておき。
最後にまとめです。コンテナオーケストレーションはとにかくいいです。ここに関しては正直個人的にはとにかく脳死的にコンテナオーケストレーションでどう運用するかを考えたほうがいいかなと思います。
というのも、コンテナ化することによってある程度ステートレスにアプリケーションを作る必要が出てきます。そこでアプリケーションをどう作っていくかというロジックで制約をかけて、全体としては技術負債をあまり生まないかたちになるのかなと思います。
あとは、認証・認可のところはCognitoなどを使うとサーバーレスでいろいろできておもしろいんですが、ここはサービスの実際に作る要件に合わせて選択したほうがいいと思います。
また、ここは大局的には微妙なのかもしれませんが、個人的には局所的にAWSやGCPの導入がいろいろな金融機関で進んで、クラウド上での接続が盛んにできるようになるといいなと思います。
最後に、フィナテキストは金融に興味のあるエンジニアの方を常に募集しています。このあとの懇親会でも興味ある方はぜひ声をかけてください。以上です。ありがとうございました。
(会場拍手)
司会者:ありがとうございました。続いて質疑応答に移りたいと思います。どなたか質問のある方はいらっしゃいますか?
(会場挙手)
質問者1:お話ありがとうございました。最初にS3でログを溜めておけばAthenaでも集計できて便利、みたいな話をされていたと思うんですが、実際にAthenaでなにか分析や集計をされているかというのと、S3のフォーマットに何を選んでいらっしゃるか教えていただけたらと思います。
石橋:現状、基本的にJSONでとりあえず出しとけという感じです。現状Athenaで分析とまではなかなかいっていなくて、どちらかというと障害やデータ不整合、エラーがあったときに過去分を遡れるような感じで使っています。
最近だとCloudWatch Logsのほうにメトリクスもついたので、直近分に関してはそちらで引くとすごく楽です。あとは統計データの可視化もできるのもすごく便利ですね。
質問者1:ありがとうございます。
司会者:ほかに質問ある方いらっしゃいますでしょうか?
(会場挙手)
質問者2:お話ありがとうございます。途中から来たので最初に話していたかもしれませんが、バックエンドってどんな感じになっているんでしょうか?
石橋:バックエンドというのはどのへんをイメージされていますか?
質問者2:あ、ごめんなさい。データストアという意味合いです。
石橋:基本AuroraかDynamoですね。
質問者2:Dynamoはトランザクションが付く前はどうやって使い分けていたのでしょうか?
石橋:そういう意味で言うとトランザクションがほしいところはAuroraを使っています。ほぼ1サービス1テーブルでいいところでは、気軽に作れるのでDynamoを使ってます。
あとは市場からのプライスデータなどはすごい量が来ます。朝9時頭には秒間数万件みたいなやつはDynamoの、とりあえずお金を払えばスケールを上げられることをうまく使いつつ、アプリケーションまである程度シャーディングはコントロールしてやっている感じです。
質問者2:ありがとうございます。
司会者:ありがとうございます。他にいかがでしょうか?
(会場挙手)
質問者3:Cognitoを使っていることでしたが、Cognitoを使っているサービスってあまり見ないので、ちょっとめずらしいなと思ったんですけれども。
この中でも、認証でCognitoを使いつつ、認可のサービスでは独自のサービスを用意しているということで、Cognitoを使うときの、これはマネージドで嬉しいけれども、なにかつらみがありましたら教えてください。
石橋:Cognitoでは、作った後に変更できないパラメータがけっこうあります。例えばユーザーネームやEmailといった属性があるんですが、1回作ったのちにユーザーネームないしEmailでのログインも可能にするみたいな変更ができなかったりします。
将来的にはできるようになるのかもしれませんが、そこを将来別のかたちでのログインをやりたいときには困る可能性はあるかもしれません。
質問者3:なるほど。参考になりました。ありがとうございます。
司会者:石橋さんありがとうございました。拍手をお願いします。
(会場拍手)
株式会社Finatext
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05