Upload
yosuke-tomita
View
2.565
Download
0
Embed Size (px)
Citation preview
オフライン行動を支える メール配送管理 at サイタ
2015/9/1 富田 陽介
コーチ・ユナイテッド株式会社
• 富田 陽介 (ウカンムリ)
• @tmtysk
• 通信会社→開発会社→フリー..
• サイタCTO(2014/1~)
• 中央線~渋谷などに出没
• 役者 → 演劇好き
自己紹介
PHPで習い事サービスつくってます
http://cyta.jp/
• PHP .. 独自フレームワーク&Laravel 5.1
• JavaScript .. jQuery & jQuery Mobile
• MySQL
• Memcached, Redis
• もっと見る → http://stackshare.io/coach-united/cyta
Application StackSince 2009
Service Infrastructure
Amazon EC2
Elastic Load Balancing
Amazon S3
CloudFront
Amazon RDS
ElastiCache
CloudWatch
Elastic Beanstalk
Amazon CloudSearch
Amazon SQS
Amazon Route 53
エンジニアブログ やってますhttp://tech.cunited.jp
けっこう読まれているエントリ
http://tech.cunited.jp/post/96318734265/
メール配送管理への こだわり
えっ レッスン今日だっけ?
なんか眠いし いくのやめよう..
次のレッスン予定 調整面倒だな..
行くかどうかは、 明日考えよう..
レッスン実施に至るまでには 様々な誘惑がある..
レッスンが実際に おこなわれることが重要
レッスン実施までを支える リマインドメール&カスタマサポート体制
1. メール単位での配送成功/失敗管理
• NOT 宛先単位 .. メールによっては、急を要するものもある
• 実際に送られた(送ろうとした)内容を個別に確認できるように
2. 必要なときに、できるだけ早く送る
• 1分毎ポーリング、よりも、即時
3. メール配送の処理(SMTP喋るところ)は独立させる
• 配送処理のサービス化
• ビジネスロジックからの同期送信はしない
サイタでのメール配送管理方針
DBとSQSを組み合わせて配送管理
配送前処理 ~ 配送予約
ここで万一コケても ロールバックはせず、抜ける
配送Worker処理
常時起動dequeue結果
受け取るまでループ
配送漏れの補償処理定期起動
ここで再enqueueが多く 発生するようなら、配送が遅延している
配送失敗の記録&通知処理
Return-Path 個別メールを特定
~2015/5
レッスン増 → 配送量増大
一部ドメインからの Deferredに悩まされる
サポート業務も増大
SendGridに 切り替えました
MTA切り替えるだけ?ここをSendGridに..
Return-PathでのBounce指定ができない
Bounceメール送ってきてくれないSendGrid
SMTPAPIを使う
SMTPAPIで、個別IDを仕込む ↓
Event Notificationで 配送状況を受け取って処理
SMTPAPIで個別メールIDを仕込む
ここでメール個別の IDをX-SMTPAPIに指定
SMTPAPIで個別メールIDを仕込む
Event Notificationを受け取り 配送失敗を記録&通知HTTP POST
一部処理は既存のものが そのまま使えた
Event Notificationを受け取り 配送失敗を記録&通知
移行完了!
実際はいろいろ ありましたが..
続きはブログで!
Service Infrastructure
Amazon EC2
Elastic Load Balancing
Amazon S3
CloudFront
Amazon RDS
ElastiCache
CloudWatch
Elastic Beanstalk
Amazon CloudSearch
Amazon SQS
Amazon Route 53
NEW!
ありがとうございました