YAPC::Hokkaido 2016 SAPPORO YAPC::Hokkaido 2016 SAPPORO 10 年年年年年 Perl 年年年年年年年 2016/12/10 アアアアアアアアア アア アア (@ikasam_a)
YAPC::Hokkaido 2016 SAPPORO
YAPC::Hokkaido 2016 SAPPORO
10 年モノ熟成 Perl との付き合い方
2016/12/10アイランド株式会社
中川 勝樹 (@ikasam_a)
YAPC::Hokkaido 2016 SAPPORO
自己紹介
☃中川 勝樹
☃アイランド株式会社 (2016/07/01-)
☃@ikasam_a☃github.com/masaki☃metacpan.org/MASAKI
2
YAPC::Hokkaido 2016 SAPPORO
We’re hiring!
☃エンジニア募集しています!
5
https://www.wantedly.com/projects/72445
YAPC::Hokkaido 2016 SAPPORO
レシピブログのシステム概要
☃FastCGI (Perl 5.10 + 独自 WAF)☃Apache 2.2☃PostgreSQL 9☃Elasticsearch☃File Cache + memcached (2016/10~)☃CloudFront
11
YAPC::Hokkaido 2016 SAPPORO
おとりよせネットのシステム概要
☃CGI (Perl 5.10)☃Apache 2.2☃PostgreSQL 9☃File Cache / Page Cache☃+ CloudFront (2016/11~)
12
YAPC::Hokkaido 2016 SAPPORO
技術・設計課題
☃利用技術の陳腐化❄ CGI 、 FastCGI 、…
☃開発環境や開発プロセスの停滞❄ 「運用でカバー」
☃そろそろモノリシックの規模も課題に
13
YAPC::Hokkaido 2016 SAPPORO
熟成した問題
☃独自 WAF 利用とその聖域化問題❄ メンテナンスやアップデートが行き届かず
❄ 手の入れ方がわからず運用でカバー
❄ 秘伝のタレ化
☃掃除不足によるゴミ屋敷問題❄ 不要なソースコードが残ったまま
❄ 不要なファイルが残ったまま
❄ 次第に影響範囲が不明になり消せなくなるパターン
14
YAPC::Hokkaido 2016 SAPPORO
背景理解
☃とにかくコードを読む❄ (個人的に) Perl でよかった
☃疑問や経緯はわかるまで全部聞く❄ 今目の前にある事象は、過去の決定の積み重ね
❄ 当時は何らかの意図や判断が必ずある
☃「システムに歴史あり」❄ ここまで事業を支えてきた事実をリスペクトする
❄ その上で諦めてきたことを知ろう
16
YAPC::Hokkaido 2016 SAPPORO
事実把握
☃ログをどんどん出す❄ 手がかりは多く、余れば後で捨てるだけ
❄ carp, croak → cluck, confess❄ $logger->warn($@)
☃リソースを監視する❄ 推測するな、計測せよ
❄ CloudForecast 入れるところから始めた
17
YAPC::Hokkaido 2016 SAPPORO
[ 改善 ] WAF の改修
☃コードを読んだ結果、普通に改修可能になった❄ (個人的に) Catalyst ライクな WAF でよかった
☃運用でカバーしていた部分が根本的解決へ
☃結果、コード自体もシンプルでスリムに
18
YAPC::Hokkaido 2016 SAPPORO
[ 改善 ] パフォーマンスチューニング
☃ログとリソースグラフのおかげ
☃ログに DB の max connection エラーを発見❄ DB チューニングで max connection 確保
☃まだ HTTP リクエストがタイムアウトしてた❄ TCP connection / HTTP がある値で頭打ちになってた
❄ ServerLimit, MaxClients 周りを設定
☃残るは DC 帯域が…(共用なので)
19
YAPC::Hokkaido 2016 SAPPORO
[ 改善 ] TV 露出の対応
☃TV (地上波 ) で取り上げられると即死( 30 分落ち)
☃「来週ヒルナンデスに出ます」という死の宣告
☃画像が豊富でページ当たりの転送量が…❄ とりあえず CloudFront 載せよう
☃アセットが世代管理されてないからキャッシュが…❄ mod_ext_filter っぽいのを書いた
☃CGI プロセスが膨大に…❄ SpeedyCGI (!) を引っ張りだした
❄ 参照系はことごとく静的に HTML 化
20
YAPC::Hokkaido 2016 SAPPORO
[ 革新 ] AWS導入
☃抜本的に環境を変える❄ 改善だけじゃ解決しきれない問題もある
☃ついでに残った問題も解決する❄ ドサクサに紛れて色々仕込む
21
YAPC::Hokkaido 2016 SAPPORO
なぜ革新なのか
☃ワクワク感が出る❄ 楽しさはモチベーションの源泉
❄ 「やるからには面白く、工夫して」 © 2016 @ikasam_a
☃本当は色々狙ってる❄ 大きな変化を伴わないと解決できない問題に向き合う
❄ 今ある他の課題も一緒に解決できる方法を考える
❄ 両立できる施策をしれっと狙う♨ 理想(革新)だけ追っても色んな意味で難しい
23