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

34
オフライン行動を支える メール配送管理 at サイタ 2015/9/1 富田 陽介 コーチ・ユナイテッド株式会社

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

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

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

2015/9/1 富田 陽介

コーチ・ユナイテッド株式会社

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

• 富田 陽介 (ウカンムリ)

• @tmtysk

• 通信会社→開発会社→フリー..

• サイタCTO(2014/1~)

• 中央線~渋谷などに出没

• 役者 → 演劇好き

自己紹介

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

PHPで習い事サービスつくってます

http://cyta.jp/

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

• PHP .. 独自フレームワーク&Laravel 5.1

• JavaScript .. jQuery & jQuery Mobile

• MySQL

• Memcached, Redis

• もっと見る → http://stackshare.io/coach-united/cyta

Application StackSince 2009

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

Service Infrastructure

Amazon EC2

Elastic Load Balancing

Amazon S3

CloudFront

Amazon RDS

ElastiCache

CloudWatch

Elastic Beanstalk

Amazon CloudSearch

Amazon SQS

Amazon Route 53

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

エンジニアブログ やってますhttp://tech.cunited.jp

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

けっこう読まれているエントリ

http://tech.cunited.jp/post/96318734265/

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

メール配送管理への こだわり

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

えっ レッスン今日だっけ?

なんか眠いし いくのやめよう..

次のレッスン予定 調整面倒だな..

行くかどうかは、 明日考えよう..

レッスン実施に至るまでには 様々な誘惑がある..

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

レッスンが実際に おこなわれることが重要

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

レッスン実施までを支える リマインドメール&カスタマサポート体制

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

1. メール単位での配送成功/失敗管理

• NOT 宛先単位 .. メールによっては、急を要するものもある

• 実際に送られた(送ろうとした)内容を個別に確認できるように

2. 必要なときに、できるだけ早く送る

• 1分毎ポーリング、よりも、即時

3. メール配送の処理(SMTP喋るところ)は独立させる

• 配送処理のサービス化

• ビジネスロジックからの同期送信はしない

サイタでのメール配送管理方針

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

DBとSQSを組み合わせて配送管理

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

配送前処理 ~ 配送予約

ここで万一コケても ロールバックはせず、抜ける

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

配送Worker処理

常時起動dequeue結果

受け取るまでループ

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

配送漏れの補償処理定期起動

ここで再enqueueが多く 発生するようなら、配送が遅延している

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

配送失敗の記録&通知処理

Return-Path 個別メールを特定

~2015/5

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

レッスン増 → 配送量増大

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

一部ドメインからの Deferredに悩まされる

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

サポート業務も増大

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

SendGridに 切り替えました

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

MTA切り替えるだけ?ここをSendGridに..

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

Return-PathでのBounce指定ができない

Bounceメール送ってきてくれないSendGrid

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

SMTPAPIを使う

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

SMTPAPIで、個別IDを仕込む ↓

Event Notificationで 配送状況を受け取って処理

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

SMTPAPIで個別メールIDを仕込む

ここでメール個別の IDをX-SMTPAPIに指定

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

SMTPAPIで個別メールIDを仕込む

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

Event Notificationを受け取り 配送失敗を記録&通知HTTP POST

一部処理は既存のものが そのまま使えた

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

Event Notificationを受け取り 配送失敗を記録&通知

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

移行完了!

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

実際はいろいろ ありましたが..

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

続きはブログで!

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

Service Infrastructure

Amazon EC2

Elastic Load Balancing

Amazon S3

CloudFront

Amazon RDS

ElastiCache

CloudWatch

Elastic Beanstalk

Amazon CloudSearch

Amazon SQS

Amazon Route 53

NEW!

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

ありがとうございました