オイラ大地のECサイトのマイクロサービス化をVA Linuxが性能分析してみた

オイラ大地のECサイトのマイクロサービス化をVA Linuxが性能分析してみた

A batch job running on Oisixradaichi, an E-commerce site, has been troubled by performance issues. To solve the issue, it is now being re-made as microservices.
Then, a few key perfomance metrics are analyzed to find out possible improvements in job execution strategies.

This presentation is a collaborative work with Kobayashi-san.

90d69419798a1f0c0712ead541fd6313?s=128

IWAMOTO Toshihiro

July 22, 2019
Tweet

Transcript

  1. 2.

    これまでのあらすじ • Jaeger とかの tracing かっこいい • システムの負荷とあわせて分析すると何かみえるはず ◦ CNDT2018冬発表

    ◦ 人工的に作成した負荷 • オイシックス・ラ・大地さんから話をいただいた • 今日は運用中のサービスでやります
  2. 4.

    1. 自己紹介・Oisixの紹介
 
 2. これまでのマイクロサービスの取り組み
 
 3. 今回分析したサービスについて
 
 4.

    マイクロサービス化への試行錯誤1
 
 5. マイクロサービス化への試行錯誤2

  3. 6.
  4. 13.
  5. 15.

    1. 自己紹介・Oisixの紹介
 
 2. これまでのマイクロサービスの取り組み
 
 3. 今回分析したサービスについて
 
 4.

    マイクロサービス化への試行錯誤1
 
 5. マイクロサービス化への試行錯誤2

  6. 17.

    2018年
 モノリシック構成の問題を
 解消するため
 マイクロサービス化に着手
 昨年の状態は詳しくはこちらで 
 
 オイラ大地の18年拡張し続けているECサイトを 
 Spring

    Bootとk8s on Azureでマイクロサービス化する事例(JJUG 2018 秋) 
 https://www.slideshare.net/hiroakikobayashi1806/18ecspring-bootk8s-on-azure 
 
 ストラングラーパターンによる(JJUG 2019 春) 
 マイクロサービスマイグレーションの勘所 
 https://speakerdeck.com/kawakamitor/jjug-ccc-2019-spring 
 
 これまでのマイクロサービスの取り組み

  7. 19.

    Kubernetes OisixのCICD GitOps
 Docker Hub Java repo kustomization.yaml manifest repo

    GitHub CircleCI は 3. PR 4. CI 5. pull 6. push 7. PR CI CD 1. pull 2. push 8. CD GitOps で構成
  8. 20.

    監視系 Oisixのクラウド構成
 AKS(k8s) Azure Storage Queue Azure MySQL Azure Redis

    Cache ブラウザ iPhone App Android App Log Analytics Monitor WWW VM オンプレミス API Management IDCF Cloud
  9. 22.

    1. 自己紹介・Oisixの紹介
 
 2. これまでのマイクロサービスの取り組み
 
 3. 今回分析したサービスについて
 
 4.

    マイクロサービス化への試行錯誤1
 
 5. マイクロサービス化への試行錯誤2

  10. 26.

    前週カートの確定情報を
 配送センターへ送信
 受注確定バッチ
 配送センターのシステムも巨大でい ろいろ面白いですが、コンテナ化は これからなので今日は割愛。 
 海老名配送センター 
 (全国へ出荷)


    木曜日は「定期ボックス作成バッチ」
 の前後でも、バッチとオペレーションでタイ ムテーブルがぎっしり。
 今回のお題「定期ボックス作成バッチ」
 Webサイト
 開始の準備
 定期ボックス作成バッチ 
 第n-1週
 木曜日
 第n週
 木曜日
 開始のお知らせ
 バッチ
 etc

  11. 27.

    前週カートの確定情報を
 配送センターへ送信
 受注確定バッチ
 配送センターのシステムも巨大でい ろいろ面白いですが、コンテナ化は これからなので今日は割愛。 
 海老名配送センター 
 (全国へ出荷)


    今回のお題「定期ボックス作成バッチ」
 Webサイト
 開始の準備
 定期ボックス作成バッチ 
 第n-1週
 木曜日
 第n週
 木曜日
 開始のお知らせ
 バッチ
 etc
 昨年の夏頃、お客様数の増加によ り、
 「定期ボックス作成バッチ」が不安 定化。
 モノリス・1インスタンス構成により
 バッチ中はシステム全体が遅くなり、
 社内業務にも支障をきたす状態に。

  12. 28.

    1. 自己紹介・Oisixの紹介
 
 2. これまでのマイクロサービスの取り組み
 
 3. 今回分析したサービスについて
 
 4.

    マイクロサービス化への試行錯誤1
 
 5. マイクロサービス化への試行錯誤2

  13. 29.

    受注確定バッチ
 マイクロサービス化への試行錯誤1
 定期ボックス作成バッチ 
 それ以外の
 ECサイトの販売にかかわる 
 社内システムの大部分 
 ESサイトの社内システムは


    モノリシックな状態。
 実行時も1サーバー1インスタン
 で処理。
 Webサイト
 開始の準備
 開始のお知らせ
 バッチ
 etc

  14. 34.

    VM
 定期ボックス
 作成バッチ
 それ以外
 VM
 定期ボックス
 作成バッチ
 それ以外
 可及的速やかな解決策(コンテナ成分ゼロ)
 モノリスをOSごと丸々複製。


    
 モノリス2号機が誕生。
 
 2号機は定期ボックス作成専用にし VMのスペックをあげまくる。
 
 問題にお金で対応して、急場をとり あえずしのげる状態にシステムを 回復させる。
 丸々 COPY モノリス1号
 モノリス2号
 2号機は高いので バッチの時間だけVMを起こす。
  15. 35.

    1. 自己紹介・Oisixの紹介
 
 2. これまでのマイクロサービスの取り組み
 
 3. 今回分析したサービスについて
 
 4.

    マイクロサービス化への試行錯誤1
 
 5. マイクロサービス化への試行錯誤2

  16. 43.

    [POD名] [タイムスタンプ] [ログレベル] [スレッドID] [Javaのクラス] [メッセージ] ログのイメージ(実際のログを色々加工しています ) oisix[oisix-club-order-create-service-648cc97c6f-hxx8b] 2019-06-06

    12:56:07.306 INFO 1 [io-exec-74 j.c.o.o.s.[Boot的な ServiceA] 定期受注作成開始:[fooId=XXXX,xxxInd=1] oisix[oisix-club-order-create-service-648cc97c6f-q6mvb] 2019-06-06 12:56:07.114 INFO 1 [io-exec-79] o.o.s.i.[Boot的な ServiceB] fooId:aaa,xxxInd:1,Week:mmm,startDate:2019-06-06T10:00:00.0,bazId[00000004,]
  17. 44.

    バッチ処理なので… 最終的に興味があるのは全体の処理時間 • 時間あたりの処理件数 (r) • 1件あたりの処理にかかる時間 (t) • 並列処理数

    (p) ◦ r = p / t • これらの性能指標に影響を与えているパラメータがあるか? といった風に細かく見ていきます
  18. 46.

    モノリス側の振り分け処理 ブロック1 今まで(2009年バージョン) ・・・ 1 2 n ・・・ 1 2

    n ・・・ 1 2 n ・・・ 2) 一定数の スレッドに あらかじめ 定期ボックス を均等に 割り振る 1) 数十万件の定期ボックスを 300件ずつにグループ化 改定後(2019年バージョン) ブロック2 ・・・ スレッド1 スレッド2 スレッドn モノリス側の振り分け処理 ブロック1 2) 一定数のス レッドにあらか じめ定期ボッ クスを割り振 る 1) 数十万件の定期ボックスを 300件ずつにグループ化 ブロック2 ・・・ スレッド1 スレッド2 スレッドn ・・・ 1 2 3 ・・・
  19. 64.

    まとめ 分析したらわかったこと • 処理レートグラフ -> スレッドへのジョブの振り分けを改善 • 応答時間 -> 遅い時間帯がみつかったけどよくわからない

    • 応答時間が同時処理件数の影響を受けている感じではない⇒k8s ノードの性能は まだ余裕あるはず • 同時処理件数は改善の余地がありそう 運用する側からの感想 • モノリスのどこをマイクロサービス化するのかの見極めが重要 • せっかく問題箇所を教えてもらったのに、モノリス側の改修に時間がかかってすみ ません • 今後はお客様に使っていただいているフロント側のシステムもマイクロサービス化 していくので、そこも分析をお願いします
  20. 65.

    OSS開発エンジニア募集中!
 世界各国の OSS エンジニアとコミュニティを通じて 
 OSS 開発をしたいという方、是非ご応募ください。 
 お待ちしています! https://www.valinux.co.jp/recruit/

    • KubeConやOpenStack Summit をはじめ様々な 
 テクノロジーイベントに参加しています。 
 エンジニアリングで
 食卓と畑を変える仲間を募集中!
 https://recruit.oisixradaichi.co.jp/engineer/