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

Post on 11-Jan-2017

2.565 views 0 download

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

オフライン行動を支える メール配送管理 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!

ありがとうございました