すこやかRails
-
Upload
takafumi-onaka -
Category
Technology
-
view
12.454 -
download
1
description
Transcript of すこやかRails
![Page 1: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/1.jpg)
すこやかRails ~クソと戦うサービス運用~
2014-11-01 渋谷Ruby会議01
大仲 能史 a.k.a. @onk
![Page 2: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/2.jpg)
self
1
![Page 3: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/3.jpg)
self
大仲 能史
RubyKaja 2013
– Rails勉強会@東京
仕事
–アプリケーションエンジニア
–主にサーバサイドの設計・開発を担当
2
@onk
![Page 4: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/4.jpg)
self.company
2006年12月 中途入社
2009年4月よりRailsアプリに関わる
– Rails暦5年半
3
![Page 5: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/5.jpg)
運用中サービスの稼働年数
4
0年
1年
2年
3年
4年
![Page 6: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/6.jpg)
今日の話
世界はクソ力(ちから)に満ち溢れていて、サービスを運用している
と必ず健康状態が悪化していきます。
5
![Page 7: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/7.jpg)
クソ力(ちから)の例
• データの蓄積によるレスポンス速度悪化
• 仕様変更による設計の無理
• ライブラリの更新への追随を怠る
• 突然応答しなくなるサーバ
• 人の流動によるノウハウの低下
• クソクエリ・クソコードの混入
• 技術のブラックボックス化
6
![Page 8: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/8.jpg)
現状を維持していると
クソな状態になる
7
![Page 9: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/9.jpg)
今日の話
実装が苦手なエンジニアでもアプリの健康状態を維持できる仕組みづくり
8
![Page 10: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/10.jpg)
アジェンダ
1. 検知する/計測する
2. 改善の手助けをする
9
![Page 11: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/11.jpg)
検知する/計測する
10
![Page 12: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/12.jpg)
検知する/計測する
• infra
– zabbix
– Mine
• error
– Sentry
• User
–CommunityWat
cher
11
• Performance – MySQL
• generalist
– Rails • New Relic
• CodeStyle – rake stats
– metric_fu
– rails_best_practices
– rubocop
![Page 13: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/13.jpg)
Mine
12
![Page 14: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/14.jpg)
13
![Page 15: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/15.jpg)
14
http://www.slideshare.net/KenichiMitsuki/ss-35379098
![Page 16: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/16.jpg)
Mine
• 1300台向けにセットアップしたくない
– Pushでメトリクスを通知させたい
• DCごとに構築したくない
• rrdつらぽよ
• 見た目が気に入らない
15
![Page 17: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/17.jpg)
CommunityWatcher
16
![Page 18: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/18.jpg)
• 2ch
• AppStoreやGooglePlayのレビュー
• SNS上のコミュニティ
• アプリ内の会話
17
ユーザの生の声を収集するbotたち
![Page 19: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/19.jpg)
生の声を直接見ていると
• 検知が早い
• ユーザの気持ちに立って開発できる
• リリースの手ごたえを得られる
18
• ノイズが多い
• あまりに生すぎて心が折れる
• ユーザの声に流されて大勢を見失う
![Page 20: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/20.jpg)
Generalist
19
![Page 21: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/21.jpg)
20
http://blog.father.gedow.net/2014/02/25/service-quality-improvement/
![Page 22: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/22.jpg)
MySQLのgeneral log +
EXPLAIN
21
![Page 23: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/23.jpg)
クエリ品質の可視化
22
![Page 24: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/24.jpg)
クエリの定量評価
• DQP (Dirty Query Point)
–1秒当たりのクソクエリポイント
• DUP (Dirty Update Point)
–1秒当たりのIO負荷
• DIP (Dirty Index Point)
–不要な Index のサジェスト
23
![Page 25: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/25.jpg)
クエリの定量評価
基本式
QPS * rows * type係数 * EXTRA係数
24
![Page 26: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/26.jpg)
クソクエリは必ず生まれる
• データベースの気持ちになってActiveRecordを操れる人は少ない
• サービスを日々改善する。アプリケーションも日々デプロイする。
• 想定漏れがどうしても出てくる
• フリーザ様級 (DQP:53万) のクエリがたまに出てくる
25
![Page 27: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/27.jpg)
今日の話
1. 検知する/計測する
2. 改善の手助けをする
26
![Page 28: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/28.jpg)
改善する手助けをする
• CI
– Jenkins
• MySQL
– DQPAnalyzer
• Rails
– ReliqRefactor
27
• CodeStyle
– pront
• Development
– QueryTracer
• Badge
• Ranking
– Gemicom
![Page 29: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/29.jpg)
戦略1:
目標を目立たせる
28
![Page 30: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/30.jpg)
DQPAnalyzer
29
![Page 31: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/31.jpg)
30
![Page 32: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/32.jpg)
31
![Page 33: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/33.jpg)
ReliqRefactor
32
![Page 34: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/34.jpg)
33
![Page 35: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/35.jpg)
34
![Page 36: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/36.jpg)
35
![Page 37: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/37.jpg)
人間が論理的に
考えていることは
コードに落とせる
36
![Page 38: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/38.jpg)
戦略2:
プライドをくすぐる
37
![Page 39: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/39.jpg)
Badge
38
![Page 40: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/40.jpg)
39
http://sue445.hatenablog.com/entry/2014/08/11/123000
![Page 41: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/41.jpg)
40
![Page 42: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/42.jpg)
戦略3:
競争を煽る
41
![Page 43: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/43.jpg)
運用中サービスの稼働年数
42
0年
1年
2年
3年
4年
DAU、成長率等はバラバラ
![Page 44: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/44.jpg)
43
![Page 45: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/45.jpg)
44
![Page 46: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/46.jpg)
gemicom
45
http://rubykaigi.org/2014/presentation/S-TakumiMiura
![Page 47: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/47.jpg)
戦略4:
ナビキャラに言わせる
46
![Page 48: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/48.jpg)
カーチャンJ( 'ー`)し • 静的解析bot (pront)
• 厳しいのでキャラクター化しないと
心が折れる
47
![Page 49: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/49.jpg)
48
http://sue445.hatenablog.com/entry/2014/10/10/111601
![Page 50: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/50.jpg)
改善を手助けする戦略
1. 目標を目立たせる
2. プライドをくすぐる
3. 競争を煽る
4. ナビキャラに言わせる
49
![Page 51: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/51.jpg)
まさにソーシャルゲームの手口ッ!
50
![Page 52: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/52.jpg)
改善する手助けをする
51
![Page 53: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/53.jpg)
開発と改善
52
![Page 54: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/54.jpg)
開発:収益を増やす
改善:損失を減らす
53
![Page 55: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/55.jpg)
改善も大事だが
本質ではない
54
![Page 56: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/56.jpg)
改善にかけるコストを
削減していく • 一目でクソだと分からせる
• 強くない人でも改善できるよう サジェストする
• 意識を無理やり高めるために テクニックを使う
• 1人が改善すればみんなが幸せになるよう 共通化する
55
![Page 57: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/57.jpg)
共通化 • RubyKaigi 2014 - “Gem of this week”
56
http://rubykaigi.org/2014/presentation/S-TakumiMiura
![Page 58: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/58.jpg)
今後の課題
57
![Page 59: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/59.jpg)
今後の課題
•職種間の溝を埋める –フロントエンド⇔サーバサイド
–Nativeクライアント⇔サーバ
–企画者⇔開発者
•リリース前に検知する
58
![Page 60: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/60.jpg)
REPL-client
• APIエンドポイントのインタフェースを
YAMLで持ち、REPL からリクエストを簡単に発行するツール
• 通信を暗号化しているので簡単に CURL
できないという問題を解決
• インタフェースの明文化と、柔軟なチート生活に役立つ
59
![Page 61: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/61.jpg)
QueryTracer
• ARProxyを使って開発中に 問題点を見つける
• where 1=0 とかパーティションの絞り込みができていないクエリとか
60
![Page 62: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/62.jpg)
まとめ
61
![Page 63: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/63.jpg)
現状維持は悪化の一途
クソ力(ちから)は強大
検知する/計測する ユーザにストレスを強く与えるところ
開発者にストレスを強く与えるところ
改善効率を上げる 判断できるものはシステム化できる
価値の本質に注力しよう
62
![Page 64: すこやかRails](https://reader033.fdocument.pub/reader033/viewer/2022060200/55987a191a28ab91218b476c/html5/thumbnails/64.jpg)
すこやかとは
健康が維持できていて
改善するのにコストが
かからない状態
63