2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
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.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略