オフライン行動を支える
メール配送管理 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 Stack Since 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!
ありがとうございました

オフライン行動を支えるメール配送管理 at サイタ