2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
プロダクト間のデータ連携をイベント駆動で作り直した話(全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.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