2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
プロダクト間のデータ連携をイベント駆動で作り直した話(全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.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
職場であえて「不機嫌」を出したほうがいいタイプ NOと言えない人のための人間関係をラクにするヒント
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.06
嫌いな相手の行動が気になって仕方ない… 臨床心理士が教える、人間関係のストレスを軽くする知恵
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
2024.12.11
大企業への転職前に感じた、「なんか違うかも」の違和感の正体 「親が喜ぶ」「モテそう」ではない、自分の判断基準を持つカギ
PR | 2024.11.22
「闇雲なAI導入」から脱却せよ Zoom・パーソル・THE GUILD幹部が語る、従業員と顧客体験を高めるAI戦略の要諦