この記事はHacobu Advent Calendar 2024の7日目の記事です。
はじめに
株式会社Hacobu テクノロジー本部CTO室 室長の三木です。本記事は5/22 に行われた アーキテクチャを突き詰める Online Conference で発表した「⽉間17億レコードを処理する動態管理システムのアーキテクチャ」のダイジェスト版になります。
Hacobuは 「持続可能な物流インフラを創る」のビジョンのもと、企業や業界の枠を越えた物流ビッグデータの蓄積・活用基盤となる「物流情報プラットフォーム」の構築を目指しています。人手不足や長時間残業といった物流の本質的な社会課題を解決するためには、様々なステークホルダーと連携しながら、データ駆動型のロジスティクスを社会に浸透させることが必要と考え、そのための手段として、物流DXを推進するSaaS型アプリケーションを提供しています。トラック予約受付サービス「MOVO Berth」、動態管理サービス「MOVO Fleet」、配車受発注・管理サービス「MOVO Vista」、生産・販売・在庫管理サービス「MOVO PSI」などのクラウドサービスと、コンサルティングサービス「Hacobu Strategy」を展開し、企業間物流の最適化を支援しています。本記事では、動態管理サービス「MOVO Fleet」のアーキテクチャや技術的挑戦について解説します。
MOVO Fleetは、通信型GPSトラッカーを利用して車両の位置情報や運行履歴を管理するサービスです。例えば、三菱食品様では全国3,500台の車両に導入し、効率的な配送ネットワーク構築に活用されています。この規模では、1日あたり約2,000万リクエストが発生します。
アーキテクチャ全体像
MOVO Fleet における位置情報処理のシステムは、AWSのサーバーレスアーキテクチャを活用して構築されています。特にAWS LambdaとAmazon Kinesisを中心とした構成が特徴です。Kinesis を利用することでデータをバッファすることができ、大量のデータを処理していくことができます。またLambda 側で障害が発生した場合でもデータロストを防ぐことができます。Lambda は内容別に4種類用意していて、Kinesisの拡張ファンアウト機能を利用して並列処理しています。それぞれのLambdaが位置情報の保存やジオフェンス処理などを担当し、現在は12本のシャードで運用しています。
ジオフェンス処理の仕組み
wikipedia では次のように解説されています。
ジオフェンシング(英:geofencing)とは実世界の地理に対応した仮想的な境界線で囲まれたエリアへの出入りや一定時間以上の滞在をトリガーにアクションを行う技術である。主にセキュリティや広告、通知を用いたサービスに用いられている。
Fleet におけるジオフェンス処理では、特定の地点(円形エリア)に一定時間以上滞在したことを検知し、記録を残します。この処理は次のようなステップで進行します。
このようなステップをトラックごとに時系列に実行していくことで、ジオフェンス処理を行うことができます。先ほど紹介したようにKinesisのシャードは複数用意していて並列処理を行っています。「トラックごとに」処理を実行していくには並列処理は相性が悪く、位置情報のレコードごとに別々のLambda で処理が行われると特定のトラックに関するレコードに注目した時に時系列で処理できない可能性が出てきます。そのため、車両IDをキーとしてKinesisのシャードにデータを分配するようにしました。こうすることで特定のトラックに注目すると、常に一つのシャードにデータが流れ続けることになり、意図通りにデータを処理することができます。
次にIoTデバイスからのデータ送信が何らかの理由で停止した場合を考えてみます。この場合、そもそもLambda 起動の契機となるデータがないことからデータ処理を行うことができません。しかしステップ3の基準時間経過の判定はデータのある・なしに関係なく実行したいです。この問題に対してはKinesis - Lambda のイベント駆動型の処理とは別にマイクロバッチを用意し、定期的にデータを監視・補正する仕組みを採用することで対応しました。
おわりに
⽉間17億レコードを処理する動態管理システムのアーキテクチャについてダイジェスト版を紹介させていただきました。資料はこちらに格納しているので、より詳しく知りたい方はご覧いただければと思います。