Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

10年モノ熟成Perlとの付き合い方

1,624 views

Published on

YAPC::Hokkaido 2016 SAPPORO 発表資料です。

Published in: Internet
  • Be the first to comment

  • Be the first to like this

10年モノ熟成Perlとの付き合い方

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

×