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

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

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

Avatar for Tatsuro Shibamura

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 も専用に用意 • 未送信メールは簡単にリカバリ可能に