めも帖

「めも帖」代わりにダラダラと書いていったり、めもしたりしているだけです。

えびスタ!#1【クックパッド × Retty × VASILY × UZABASE】 #ebista に参加しました

12月18日に「えびスタ!#1【クックパッド × Retty × VASILY × UZABASE】 - connpass」に参加しました。

えびスタ!#1

Cookpad and Microservices

Cookpad とは?

  • みなさん知っているよね?
  • 5,000万UU/月
  • 180万レシピ
  • EC、コミュニティ、料理教室などのたくさんの事業
  • 食にまつわる多くの事業をもつ

Whey Microservices ?

  • 環境の変化
  • Limit of Monolithic

ビジネスの変化

  • 多様なビジネスを持つようになった
  • 役割ごとの組織体系に
  • 意思決定のスピードを保ちつつ、規模を拡大

ユーザーの変化

  • ブラウザからモバイルアプリケーションに切り替わっていった
  • Web API へのシフト

1つのアプリケーションに様々な機能

テストが遅くなる

  • サイクルが遅くなる
  • デプロイ前のテストがたいへん
  • RRRspec solved

デプロイが遅くなる

  • mamiya solved

他にも色々と問題

  • そもそもを変えないと、局所的な対応になってしまう
  • そこで、マイクロサービス
  • ドメイン/ビジネスごとに区切って対応

特徴

  • 1つ1つ独立した存在
  • 1つ1つ単独でデプロイでき、軽いメッセージ機構
  • 分権化で構築
    • あるサービスはJavaで、あるサービスは、Goでということも可能
  • それぞれのチーム内で開発可能なものにする
    • 分散型の課題もある。メッセージングの失敗など

Published service data

  • Garage の利用
    • それぞれのプロダクト間の通信を担当
    • 既存のRails アプリケーションに追加が可能

共通ライブラリを別プロセスに

  • ライブラリを別プロセスとして実装
  • 認証、個人情報、通知など

データーの同期

  • Pub-Sub形式
  • Ping
    • Rails の拡張として提供
    • Amazon SNS and Fulentd のラッパー

質問

HTTP通信がボトルネックにならないのか?

  • いまは大丈夫だが、HTTP以外の選択も出来るように考えている

チーム内でのコミュニケーションが増えたりしないか?

  • 増えたかはわからないが、ドキュメントを用意したり、十分な機能でも対応できる

Dev が AWS と出会って DevOps を目指した話

サービス総明記

10万〜

  • EC2使ってみた

50万〜

  • あれ?

100万〜

  • おかしいぞ?
  • スケールアウトしてみた
  • SoftwareDesign 6月号
  • 監視って何?
    • nagios, monit, cloud watchを使ってみた

200万〜400万

  • RDSでのロギングが限界
    • SQLじゃ終わんない
    • バッチ終わんない
  • スケールアウトが追いつかない
    • 32bitによる限界
  • RDSのスレーブ上限に引っかかる

あるある

  • 繰り返す緊急でプロイ
  • amiが秘伝のタレ化
  • ミドルウェアのバージョンアップ
  • ログをfluented + S3

500万

  • 外部サービス連携
  • ログはトレジャーデーターに送る
  • Cirlcel CI に
  • Jenkins をホストするのは嫌

目的

  • DevをするためにOpsを減らす

AWS Elastic Beanstalk

  • Heroku みたいなことができる
  • Webアプリ、Workerか?
  • Elastic Beanstalkのスタック
  • Application
    • Enviromentごとに
    • 上記にgitで
  • git aws.push
    • eb deploy
  • オートスケールを自在に使いこなす

オートスケール設定

  • 画面から
  • 環境変数
  • ログは送る。送らないとだめ
  • .ebextensions

RDS

  • 高い
  • それを上回るメリット

S3

  • s3fs はオススメしない

最近やったこと

  • chatops始めました
    • SQS を使って、デプロイ
    • オペレーションで人間関係を悪くしたくない
  • スポットインスタンス
    • 微妙なところがある
    • 相場次第

まとめ

    • 金で解決すること
    • RDS
  • アプリケーションサーバーは放っておけるようにする
  • AWSのサービスを有機的に繋げる
  • S3とかSQSとかIAMとか
  • EC2をたてたら負け

Devがawsと出会ってdev opsを目指した話

プッシュ通知大戦争

プッシュ通知

  • mikanの通知
  • mikanというアプリ?

プッシュ通知はリテンションに効く

  • ユーザーの呼び戻し効果が高い
  • 効果的な運用が必須になる

プッシュ通知に求められるもの

  • 効果的な配信の仕組み
    • 決められた時間に配信
    • エラー処理、リトライ処理、
  • 分析の仕組み
    • 曜日、時間、セグメント、文言
    • どんなユーザーが開くのか?

効果的な配信の仕組み

  • ASPを使っていないところは?
    • AWSを使っている?
  • 200万以上のデバイスに一気に送りたい
  • どのデバイスが有効かわからない
  • エラー時のリトライ処理が
  • どれだけ到達してクリックされているかわからない

ほしい機能

  • マルチスレッドで配信
  • アンインストール済みやプッシュオフのデバイストークンがわかる
  • リトライ処理が正しく実装されている
  • 到達した数と、さらに実際にプッシュを開いたか知りたい

ASP サービス比較

  • Growth Push
  • 100万プッシュまで無料
  • いいお値段だった

Amazon SNS

  • 100万プッシュまで無料
  • 1アカウントにつき1000万デバイス

送っているプッシュ

  • 50種類以上あり
  • 条件が複雑

自前で構築

  • 配信の最適化
  • 配信データーの事前生成
    • 配信時のDBアクセス0に
  • EventMachine/EM-HTTP-Request/Multi
  • 1000件束ねて配信
  • 配信結果はfluentedに流す
    • 非同期でDBにflagを
  • 結果、10秒ぐらいになった

分析の仕組み

  • 増え続けるデーター
    • fluentd/S3経由でRedShift
  • ユーザー属性と一緒に

配信テスト最適化

  • 数%のユーザに文言をテスト後
    • ♡は響く!
    • 多腕バンデットテスト
  • 効果が高いから打てばいい、というものではない。ユーザーに価値ある「気づき」を与える武器

質問

開封率は?

  • CTRは、3〜9%

プッシュ通知大戦争/effective push notification by iQON // Speaker Deck

NewsPicks を支える技術と怖い話

  • NewsPicksは id:naoya絶賛!のサービスです
  • 30万人突破
  • 現在、10名ぐらいの開発チーム

NewsPicksを支える技術

  • AWSによるインフラ
  • SQSをヘビーに利用

いまどきJavaですか?

記事の取り込みフロー

  • Worker が非同期に連携して記事とこり込み、分類、タイムライン伝搬

SQS

  • キューの処理順が担保されていない

本当にあった恐い話

あらぶるRedis

  • 入社早々、眠れない
  • push 型のタイムラインを形成しているため、大量更新が発生
    • ElestCacheへ移行
    • RedisのSPOFを無くす
  • タイムライン以外のRedsは?
    • ElestCacheへ移行
    • RedisのSPOFを無くす

PhantomJSが暴走

  • 大量のクロールエラー
  • Angular なのでSEO対策されていなかった

互換性肥満

  • API後方互換性を保つために同じモデルが使い回しされていた
  • 業務レイヤーのモデルがAPIのI/Oと共有されていた
  • とにかく分離

まとめ

  • 人と技術を融合させる
  • CMP
    • コンテンツマーケティングプラットフォーム