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

一休.com がどのように SendGrid と仲良く付き合っているか

一休.com がどのように SendGrid と仲良く付き合っているか

Tatsuro Shibamura

June 06, 2018
Tweet

More Decks by Tatsuro Shibamura

Other Decks in Technology

Transcript

  1. SendGrid の利用前後 • オンプレの SMTP サーバーを自前で管理 • とても高かったらしい • 一休.com

    の AWS 移行のタイミングで SendGrid に全て移行 • メール配信だけオンプレに残すとかありえない • SMTP から REST API へ移行 • 憎き .NET と ISO-2022-JP の組み合わせ問題も解消
  2. 設計時に考慮した点 • SendGrid の API がエラーを返した場合のリトライ • Elastic Beanstalk +

    SQS を使うことで自動的に実行させるように • メール配信結果の保存 • DynamoDB と Event Webhook を使い 1 通単位でトラッキング • スケーラビリティと信頼性 • 基本的には Elastic Beanstalk と SQS の信頼性に乗っかる形
  3. 学びの多い 2017 年の SendGrid 障害 • メール送信 API のエラーレートが上がる •

    送信完了までに遅延が発生する(まだマシな例) • デッドレターキュー入りする(完全に届かない) • 運用を行い半年、ノートラブルで稼働していたので油断 • 原因の特定にかなりの時間を要してしまった • 大規模障害時のリカバリーは手動で行うしかなかった • 送信ログは全て DynamoDB に保存されているのが救いだった
  4. 教訓 : 失敗を前提に設計する • Elastic Beanstalk or SendGrid の問題切り分けが行えなかった •

    → SendGrid API エラー時のレスポンスを詳細にログへ • デッドレターキューからのリカバリ方法が手動 • → 管理画面から一括で未送信メールのリカバリを行えるように改善 • SendGrid 障害時のみに発生するバグもあった • → ワーカーの修正後、リカバリを行えるように管理画面も改善
  5. 教訓 : モニタリングを強化する • 障害時にメールの遅延具合や影響範囲を確認出来なかった • → Datadog で Beanstalk

    Worker のモニタリング強化 • → Datadog に SQS のメトリクスを流し込んでアラート設定
  6. 障害を受けて改善 • 10 分以上の配信遅延が発生した場合は Slack にアラート • 遅延が発生した時点で、何かしらの問題が発生していることが分かる • 各事業部・CS

    チームと連携して対応 • 管理画面から送信できなかったメールを確認できるように • DynamoDB にクエリを投げるだけ、GSI も専用に用意 • 未送信メールは簡単にリカバリ可能に