2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
プロダクト間のデータ連携をイベント駆動で作り直した話(全1記事)
リンクをコピー
記事をブックマーク
藤中雄太氏(以下、藤中):「プロダクト間のデータ連携をイベント駆動で作り直した話」をお話しします。ディップ株式会社の藤中と申します。よろしくお願いいたします。
本日は、(スライドを示して)このアジェンダに沿ってお話をします。
まず、簡単に自己紹介をしたいと思います。私は、2022年3月にディップ株式会社へ入社しました。JavaやGoを主力に、バックエンドエンジニアをやっています。
藤中:今回の、「イベント駆動でシステムを作り直した話」をお話しするにあたり、まず、従来のシステムについて説明をいたします。
従来のシステムの説明をさせていただくにあたり、システムに関連する弊社の2つのサービスについて軽く説明をいたします。
弊社では、「コボット」と「バイトル」というサービスを提供しています。コボットは、履歴書の送付や面接の日程調整などを行うことができ、業務の効率化を支援しているサービスです。バイトルは、企業の採用広告を出して、採用業務の支援をしているサービスです。
今回お話をするシステムの要件は、「コボットがバイトルのデータを見たい」ということから発生しました。実はすでに、バイトルのデータにアクセスできる既存のシステムがあったため、そちらをコボットで使用することになりました。
既存のシステムが(スライドを示して)こちらです。こちらを従来のシステムとします。バイトルのデータで共有できるものだけをデータ同期バッチで5分置きに取得し、データベースに登録しています。
コボットはAPIにリクエストし、API経由でデータベースに登録されているデータを取得することでデータ連携を実現していました。
藤中:弊社としてはありがたいことに、コボットの利用者が急激に増加しました。ここで影響を受けたのが、従来のシステムのAPIです。
コボットの利用者増加に伴い、従来のシステムのAPIへのアクセスも急増しました。APIサーバー自体の負荷は大して問題ではなかったのですが、影響を特に受けたのがデータベースでした。データベースに高負荷がかかり、サーバー処理が不安定になるという事態が発生しました。
そこで、緊急時の対応として、データベースのレプリカを増設することで安定化させました。以上が従来のシステムについてです。
藤中:次に、従来のシステムの課題についてお話しします。
(スライドを示して)こちらのとおり、2点ですね。1つ目はコストの増加です。DBサーバー増設のため、インフラのコストが従来の5倍以上に膨れ上がってしまいました。次に、以前から課題だったのですが、5分に1回データを同期しているため、連携にタイムラグがありました。
藤中:そのため、利用者に限らず即時データが連携できる仕組みを新しく用意することになりました。これから、作成した新システムについて説明をいたします。
従来のシステムでは、コボットからリクエストをすることでバイトルのデータを取得する形式でした。新システムでは、バイトルからデータを送信する形式にしました。
それが(スライドを示して)こちらです。バイトルからデータを登録する時に通知し、それをトリガーにコボットにデータを送信する仕組みにしました。
大まかな流れを説明いたします。まず、コボットとバイトルが連携しているかを、コボットを主体としてデータとして管理し、コボットからAPIにリクエストすることで、連携の開始と解除を制御しています。連携のデータはDBで格納しているかたちですね。
バイトルの登録時にSNSに通知されたデータは、「SQS」に送信されます。SQSにデータが格納されたことをトリガーに、データ送信Lambdaが実行されます。「Lambda」は、通知されたデータがDBに登録されている連携中のデータであることを確認でき次第、コボットに送信をします。このように、イベント駆動のシステムを実現しました。
藤中:では、これによって従来のシステムの課題がどうなったかをお話しします。
まず、従来のシステムはインフラコストの増加が課題になっていましたが、多数の利用者に影響されず、必要なデータのみを連携できるようになったため、システムの規模を大幅に縮小ができました。そのおかげでインフラのコストは、従来のシステムから10分の1にまで削減できました。
また、従来は5分に1回データを同期するシステムだったことから、連携にタイムラグが発生していましたが、データの登録とほぼ同時に連携ができる仕組みとなったため、タイムラグがなくなりました。これで、以前抱えていた課題をすべて解決することができた次第です。
藤中:では、イベント駆動に作り直した振り返りとして、良かったことと大変だったことをお話しします。
良かったことは、今回追加したSNSによる通知トリガーを、ほかのプロダクトでも使用できるようになったことです。これによって、バイトルへの改修なしにほかのプロダクトでもデータの登録とほぼ同時に連携などの処理を実行することが可能になりました。
次に大変だったことですね。1つ目に、従来のシステムでは、コボットからバイトルにデータを取得する形式だったため、バイトルの改修はほぼ不要だったのですが、バイトルにデータ登録がされた時にSNSに通知する必要があったため、バイトルにも改修が必要になり、改修範囲が広範囲になってしまったことです。
一般的ですが、対応としてプロジェクト管理ツールでチーム間のタスク管理を行い、リリースまでどうにかたどり着くことができました。
2つ目は、今回の話から少しそれるのですが、CI/CDの設計に手間取ってしまったことです。今回はLambdaがシステムのメイン部分ということで、LambdaのCI/CDも充実させたいとなったのですが、LambdaのCI/CDについての知見が少なく、設計に手間取ってしまいました。こちらについては話がそれてしまうため、今回は割愛します。
藤中:システムをイベント駆動にした話は以上です。最後に2つ宣伝をさせてください。弊社のエンジニアが有志でテックブログをやっています。「dip テックブログ」で検索をしてもらうか、QRコードを読み込んでもらえば参照いただけると思います。今回お話しした内容も載っているので、よろしければぜひご覧ください。
また、弊社は絶賛エンジニアを募集中です。(スライドの)右のQRコードから求人ページにアクセスできます。カジュアル面談などもやっているので、興味のある方はお気軽に申し込んでいただけると幸いです。以上で発表を終わります。ご清聴ありがとうございました。
司会者:ありがとうございました。「Slido」に質問が来ているので、ちょっと読み上げてみたいと思います。
1つ目です。「バイトル側、登録側のほうで大量のデータが登録された場合、同じ時間にその登録が行われると、Lambdaのスロットル制限にかかりそうですが、そのあたりの懸念はなかったのでしょうか?」と来ています。
藤中:ありがとうございます。そうですね、イベント駆動でスロットル制限、高負荷がかかってしまうのではないかということですが、その懸念はもちろんしています。
事前に、バイトルで1日に登録されるデータの総量を計算して、その約2倍の負荷がかかった場合、きちんと流しきれるかなどを計算をして、問題がなかったためリリースまで進めたというかたちですね。
司会者:ありがとうございます。
司会者:もう1つです。「DB負荷が高かったとのことでしたが、アーキテクチャ変更後にコボットにしわ寄せがいくことはなかったのでしょうか?」と来ています。
藤中:ありがとうございます。そうですね、アーキテクチャ変更後にコボットにしわ寄せがいくことは、特にはありませんでした。コボットからもバイトルにデータを取得するために空振りでもAPIを叩いていたため、今回、必要なデータだけが送信される仕組みになりました。そのためコボットでも負荷軽減が見られているのが現状です。
司会者:ありがとうございます。
司会者:続いて、「LambdaとDB間にはプロキシを噛ませているのでしょうか?」あと、「Lambdaを使うことによる悩みはありましたか?」という質問です。
藤中:まず、LambdaとDBの間にはプロキシを噛ませていません。
現状、Lambdaの実行時間で課題は見られていない状況なので、プロキシは噛ませず、そのまま処理をさせています。
Lambdaを使用することによる悩みですが、現状はあまりありません。なにかあったらその機会に課題として発表ができればなと思います。
司会者:ありがとうございました。
司会者:「YouTube」にコメントがあったみたいなので、読み上げたいと思います。「LambdaのCI/CDをどのようにしたのか気になります」というコメントが来ています。
藤中:LambdaのCI/CDについてですが、一般的には「CloudFormation」を使用したデプロイがメインかとは思いますが、弊社では「CodeBuild」によるデプロイを行っています。
「CodePipeline」でデプロイ全体を管理していて、その中で、CodeBuildでLambdaに資産のデプロイをしています。そしてLambdaにデプロイした資産は、そのまますぐに切り替えるかたちにはせず、「CodeDeploy」によってLambdaのバージョンもエイリアスに対して切り替えるというかたちにしていて、エイリアスを本番のものとして動かしている形式にしています。
司会者:藤中さん、どうもありがとうございました。
藤中:ありがとうございました。
関連タグ:
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
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略
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
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略