Slide 1

Slide 1 text

Confidential ⽉間17億レコードを処理する 動態管理システムのアーキテクチャ アーキテクチャを突き詰める Online Conference 2024年05⽉22⽇ テクノロジー本部CTO室 三⽊拓史

Slide 2

Slide 2 text

会社紹介

Slide 3

Slide 3 text

Copyright Hacobu, Inc. 3 Hacobu概要 ミッション︓運ぶを最適化する 2015年6⽉ 約130名 約46億円 創業 従業員数 累計資⾦調達額

Slide 4

Slide 4 text

Copyright Hacobu, Inc. 4 持続可能な物流インフラを創る Hacobuのビジョンと事業

Slide 5

Slide 5 text

Copyright Hacobu, Inc. 5 物流DXツール MOVO(ムーボ) トラック予約受付サービス MOVO Berth (ムーボ・バース) 動態管理サービス MOVO Fleet (ムーボ・フリート) 配送案件管理サービス MOVO Vista (ムーボ・ヴィスタ) ⾞両管理の効率化で、 荷主と運送会社双⽅のコスト削減を実現︕ • ⾛⾏データを蓄積し活⽤ • ⾃社・傭⾞を⼀括で管理 • 遅延⾒込みを⾃動で通知 • 配送効率の向上 • ⾛⾏データを蓄積し活⽤ • ⾃社・傭⾞を⼀括で管理 • 遅延⾒込みを⾃動で通知 • 配送効率の向上 物流センター運営にかかるコストを削減し、 ⽣産性の向上を⽀援︕ • ⾞両待機問題の解消 • 計画的な庫内作業の実現 • ⾞両やバースの状況を即座に共有 • 接⾞誘導や伝票突合せの⼯数削減 シェア No.1※ ※トラック予約受付サービス「MOVO Berth」のシェア。 出典︓デロイト トーマツ ミック経済研究所, 『スマートロジスティクス・ソリューション市場の実態と展望【2023年度版】』https://mic-r.co.jp/mr/02960/ 配送業務をデジタル化し、⽣産性向上を⽀援︕ • FAX、電話、メールのコミュニケーションをデジタル化 • オンライン上での受発注・請求管理 • リアルタイムな納品確認 MOVOは物流現場の課題を解決するとともに、本社が物流をデータで可視化するための物流DXツールです

Slide 6

Slide 6 text

Copyright Hacobu, Inc. 6 ビッグバンフルリプレイス 認証基盤 認証 サービス 新システムへ無停⽌移⾏ 通知 サービス 共通データ サービス クラウド機能 サービス 共通基盤をマイクロサービス化 デザインからAWS構成まで含めて再設計

Slide 7

Slide 7 text

Copyright Hacobu, Inc. 7 ビッグバンフルリプレイス https://speakerdeck.com/yukitoida/fu-zhai-jie-xiao- shou-duan-tositenobitugubanhururipureisu-woshi- xian-surutameno3tunotiao-jian-toha https://logmi.jp/tech/articles/328433

Slide 8

Slide 8 text

⽉間17億レコードを処理する動態管理システムのアーキテクチャ

Slide 9

Slide 9 text

Copyright Hacobu, Inc. 9 動態管理サービス 「MOVO Fleet」 通信型GPSトラッカーで⾞両の位置情報や予実を管理

Slide 10

Slide 10 text

Copyright Hacobu, Inc. 10 導⼊事例︓三菱⾷品様 全国3,500台にMOVO Fleetを導⼊し、最適な配送網の構築に取り組まれている https://hacobu.jp/news/5903/

Slide 11

Slide 11 text

Copyright Hacobu, Inc. 11 プレスリリース︓三菱ふそうの「Truckonnect®」と動態管理サービス「MOVO Fleet」、⾞両データの連携を開始 https://hacobu.jp/news/10145/

Slide 12

Slide 12 text

Copyright Hacobu, Inc. 12 位置情報に関わるアーキテクチャの図 外部連携先 ... ... ... ... ...

Slide 13

Slide 13 text

概要と位置情報の保存

Slide 14

Slide 14 text

Copyright Hacobu, Inc. 14 lambdaでやっていることの概要 • ⼤きく4つの処理を⾏なってる • 位置情報の保存(dynamoDBへのinsert) • ジオフェンスの判定と継続時間の計算 • 他2つ • それぞれの処理に対してlambda が1種類 • 1つのシャードに対して拡張ファンアウトにより4種類 のlambdaがそれぞれデータ処理 • 現状12本のシャードで運⽤ ... ... ... ... 4種類のlambda Kinesisシャードを 12本⽤意 ...

Slide 15

Slide 15 text

Copyright Hacobu, Inc. 15 位置情報の保存 • デバイスが5sに⼀度、位置情報をuploadする • 三菱⾷品様を例にすると • 3500台が5sにリクエストを⾶ばしてくる • 1⽇8時間稼働で2000万リクエスト • 外部システムとのデータ連携も • Kinesisでバッファ • Lambda側で障害があってもkinesisに貯めておけるのでデータロス トだけは避けることができる • 何度か助けられた • DynamoDBに保存

Slide 16

Slide 16 text

Copyright Hacobu, Inc. 16 軌跡の活⽤ • 位置情報はDynamoDBに保存している • ある⾞両を指定し、時間幅を指定した位置情報のまとまり(=軌跡)を取得してブラウザに表 ⽰したりする • 1⾞両90⽇間50万レコードがいつでも参照される可能性がある • ⾞両IDがパーティションキー • 時刻がソートキー

Slide 17

Slide 17 text

ジオフェンス処理

Slide 18

Slide 18 text

Copyright Hacobu, Inc. 18 Wikipedia での解説 ジオフェンシング(英︓ Geofencing)とは実世界の地理に対応した仮想的な境界線で囲 まれたエリアへの出⼊りや⼀定時間以上の滞在をトリガーにアクションを⾏う技術である。 主に セキュリティや広告、通知を⽤いたサービスに⽤いられている。 https://ja.wikipedia.org/wiki/ジオフェンシング

Slide 19

Slide 19 text

Copyright Hacobu, Inc. 19 ジオフェンス • ある地点を中⼼にして、半径R[m]の範囲に、基準時間以上滞在している場合にそれを記 録する • 地点 x 進⼊時間 x 退出時間が実績になる • ⾞両ごとに時系列順で処理を⾏う必要がある 進⼊時間 退出時間 滞在時間

Slide 20

Slide 20 text

Copyright Hacobu, Inc. 20 ジオフェンス処理のシステム構成 • 「⾞両ごとに」 • -> ⾞両IDをキーにしてkinesisシャードへ分配 • -> シャードごとにジオフェンス処理を⾏うlambda は1つ • 同⼀の⾞両に関するレコードは常に同⼀のlambdaが処理する ... ... ... ... ... ある⾞両Aに関 するデータは常 にここを通る

Slide 21

Slide 21 text

Copyright Hacobu, Inc. 21 ジオフェンス処理のフロー 進⼊時間 退出時間 滞在時間 地点外 地点内 基準時間 未満 実績⽣成 退出 1.進⼊ 5.退出 3.基準時間経過後 進⼊判定を記録 4.退出時間 を記録 2.進⼊時間を記録 基準未満で退出

Slide 22

Slide 22 text

Copyright Hacobu, Inc. 22 ジオフェンス処理 - job編 - • 3の処理は進⼊時間からの経過時間で記録したい • トラックのエンジンが切られるなどして、位置情報のuploadが⽌まることがある • 位置情報のuploadが⽌まっても、⼀定以上の滞在時間が経過したら実績を作りたい 地点外 地点内 基準時間 未満 実績⽣成 退出 1.進⼊ 5.退出 3.基準時間経過後 進⼊判定を記録 4.退出時間 を記録 2.進⼊時間を記録 基準未満で退出 ここの処理を、位置情報uploadという イベントがなくても実⾏したい

Slide 23

Slide 23 text

Copyright Hacobu, Inc. 23 ジオフェンス処理 - job編 - ... ... ... ... ... データが流れない マイクロバッチで データ監視&補正

Slide 24

Slide 24 text

性能改善

Slide 25

Slide 25 text

Copyright Hacobu, Inc. 25 lambdaの性能改善 • Lambdaの処理に時間がかかるようになり、kinesisにデータがたまるようになってきてしまった • 画⾯への反映が遅れたり、遅延判定ができなかったり • とはいえ地点情報がロストしないのはkinesisを使って良かったところ • 役割の分離 && シャード分割 • 地点情報の保存、ジオフェンス処理、その他2つを分離した • Kinesisからファンアウトしてそれぞれlambdaを実⾏ • シャードを分割し並列に実⾏することで性能改善を図った ... ... ... ... ...

Slide 26

Slide 26 text

Copyright Hacobu, Inc. 26 lambdaの性能改善 結局のところ、当時はDBでインデックスを追加するのが⼀番効いた

Slide 27

Slide 27 text

Copyright Hacobu, Inc. 27 まとめ • トラック毎にデータが流れる経路を固定することで正しくデータ処理 • lambdaの役割分割とkinesisシャード分割で並列処理 • オンライン処理では実現できない要件にマイクロバッチで対応 外部連携先 ... ... ... ... ...

Slide 28

Slide 28 text

Copyright Hacobu, Inc. 28 採⽤情報 SRE / Backend / Frontend / EM / QA を積極採⽤中です︕ https://career.hacobu.jp/

Slide 29

Slide 29 text

No content