Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetesでメールの大量配信をしている話/k8sjp-20250205

h-fukamachi
February 05, 2025

 Kubernetesでメールの大量配信をしている話/k8sjp-20250205

Kubernetes Meetup Tokyo #69 での発表資料です。
https://k8sjp.connpass.com/event/341934/

「k8sを業務システムで使ってみたい人」向けの内容です。

k8sを業務利用する例として、私の職場で長く使われてたメール配信システムをk8sで置き換えた事例をご紹介します。

実際にやって見た中で感じた、k8sと時間のかかる処理の効率化、高速化との親和性などをお伝えしたいと思います。

h-fukamachi

February 05, 2025
Tweet

Other Decks in Technology

Transcript

  1. 使っているk8s環境 6 HAProxy x3 VIP(app) control-plane x3 node x5 Webアプリへのアクセス

    NodePort(80, 443) 社内のユーザ 96 vcore 92.4 Gi 180 vcore 296.51Gi
  2. 古き良きメール配信システム • WebAPI + Cron + メール送信スクリプト ・・・プロセスを並列実行 8 SMTPサーバ

    APIサーバ DB 送信サーバ 社内のユーザ ① 配信リストを取得する ② 電文用データを作る ③ メールを配信する 1回計1秒くらいかかる 古いメール配信システム
  3. 古き良きメール配信システム 9 SMTPサーバ APIサーバ DB 送信サーバ 社内のユーザ ① 配信リストを取得する ②

    電文用データを作る ③ メールを配信する 定刻を過ぎたリストを取得 個別のパラメータを取得 SMTP テンプレートを取得 メール件数分繰り返し cron起動 配信予約 200OK 配信ステータスを更新
  4. 新しいシステムの性能目標 • 目標 100万件を3時間(10倍速くらい) • コードの改善だけで配信時間を縮めるのは困難 • 100万件を3時間で 92.59件/s ・・・一括配信を1つ処理するために

    だいたい50コア100スレッド 必要 もろもろで2倍の 100コア200スレッド • Nodeを追加すればリソースは増やせる 12 → 並列数を増やす → k8sを使う
  5. KafkaでPodをつなぐ 17 メール配信処理 配信リストを取得する 電文用データを作る メールを配信する 分割リスト メールデー タ リトライメー

    ルデータ メールをリトライ DB 配信リスト 1から1000 1001から2000 ~ 1件ごとに分ける 一定の配信件数に分ける
  6. KafkaでPodをつなぐ 18 メール配信処理 配信リストを取得する 電文用データを作る メールを配信する メールをリトライ DB 配信リスト 1件ごとに分ける

    分割リスト メールデータ リトライメールデータ 1から1000 1001から2000 ~ 一定の配信件数に分ける
  7. リプレース後のシステムの性能 • 118 pods、 cpu上限: 92.1 vcore、memory上限: 187.24 Gi 19

    配信リストを取得する 電文用データを作る メールを配信する メールをリトライ DB 配信リスト SMTPサーバ HAProxy 12 pods 48 pods 1 pod 1 pod