えびスタ!#1【クックパッド × Retty × VASILY × UZABASE】 #ebista に参加しました
12月18日に「えびスタ!#1【クックパッド × Retty × VASILY × UZABASE】 - connpass」に参加しました。
Cookpad and Microservices
Cookpad とは?
Whey Microservices ?
- 環境の変化
- Limit of Monolithic
ビジネスの変化
- 多様なビジネスを持つようになった
- 役割ごとの組織体系に
- 意思決定のスピードを保ちつつ、規模を拡大
ユーザーの変化
- ブラウザからモバイルアプリケーションに切り替わっていった
- Web API へのシフト
1つのアプリケーションに様々な機能
- A huge Rails App
テストが遅くなる
- サイクルが遅くなる
- デプロイ前のテストがたいへん
- RRRspec solved
デプロイが遅くなる
- mamiya solved
他にも色々と問題
- そもそもを変えないと、局所的な対応になってしまう
- そこで、マイクロサービス
- ドメイン/ビジネスごとに区切って対応
特徴
- 1つ1つ独立した存在
- 1つ1つ単独でデプロイでき、軽いメッセージ機構
- REST, HTTP, JSON
- 分権化で構築
- あるサービスはJavaで、あるサービスは、Goでということも可能
- それぞれのチーム内で開発可能なものにする
- 分散型の課題もある。メッセージングの失敗など
Published service data
- Garage の利用
- それぞれのプロダクト間の通信を担当
- 既存のRails アプリケーションに追加が可能
共通ライブラリを別プロセスに
- ライブラリを別プロセスとして実装
- 認証、個人情報、通知など
データーの同期
質問
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を目指した話
プッシュ通知大戦争
- @kyuns
- VASILY
- iqon
プッシュ通知
- mikanの通知
- mikanというアプリ?
プッシュ通知はリテンションに効く
- ユーザーの呼び戻し効果が高い
- 効果的な運用が必須になる
プッシュ通知に求められるもの
- 効果的な配信の仕組み
- 決められた時間に配信
- エラー処理、リトライ処理、
- 分析の仕組み
- 曜日、時間、セグメント、文言
- どんなユーザーが開くのか?
効果的な配信の仕組み
ほしい機能
- マルチスレッドで配信
- アンインストール済みやプッシュオフのデバイストークンがわかる
- リトライ処理が正しく実装されている
- 到達した数と、さらに実際にプッシュを開いたか知りたい
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 のコメント欄がウゼーとか放言したところ昨日中の人に会ってしまい、ばれてないか非常にドキドキしたのですが案の定ばれてました。NewsPicks 最高ッス
— Naoya Ito (@naoya_ito) 2014, 12月 16
- NewsPicksは id:naoya絶賛!のサービスです
- 30万人突破
- 現在、10名ぐらいの開発チーム
NewsPicksを支える技術
- AWSによるインフラ
- SQSをヘビーに利用
いまどきJavaですか?
- Lombok + Java 8
記事の取り込みフロー
- Worker が非同期に連携して記事とこり込み、分類、タイムライン伝搬
SQS
- キューの処理順が担保されていない
本当にあった恐い話
あらぶるRedis
- 入社早々、眠れない
- push 型のタイムラインを形成しているため、大量更新が発生
- ElestCacheへ移行
- RedisのSPOFを無くす
- タイムライン以外のRedsは?
- ElestCacheへ移行
- RedisのSPOFを無くす
PhantomJSが暴走
- 大量のクロールエラー
- Angular なのでSEO対策されていなかった
互換性肥満
まとめ
- 人と技術を融合させる
- CMP
- コンテンツマーケティングプラットフォーム