Top Banner
YAPC::Hokkaido 2016 SAPPORO YAPC::Hokkaido 2016 SAPPORO 10 年年年年年 Perl 年年年年年年年 2016/12/10 アアアアアアアアア アア アア (@ikasam_a)
24

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

Apr 16, 2017

Download

Internet

Masaki Nakagawa
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 10年モノ熟成Perlとの付き合い方

YAPC::Hokkaido 2016 SAPPORO

YAPC::Hokkaido 2016 SAPPORO

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

2016/12/10アイランド株式会社

中川 勝樹 (@ikasam_a)

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

YAPC::Hokkaido 2016 SAPPORO

自己紹介

☃中川 勝樹

☃アイランド株式会社 (2016/07/01-)

☃@ikasam_a☃github.com/masaki☃metacpan.org/MASAKI

2

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

YAPC::Hokkaido 2016 SAPPORO

会社紹介

3

www.ai-land.co.jp

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

YAPC::Hokkaido 2016 SAPPORO

アイランドのライフスタイルメディア

4

「おとりよせネット」otoriyose.net

「レシピブログ」recipe-blog.jp

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

YAPC::Hokkaido 2016 SAPPORO

We’re hiring!

☃エンジニア募集しています!

5

https://www.wantedly.com/projects/72445

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

YAPC::Hokkaido 2016 SAPPORO6

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

YAPC::Hokkaido 2016 SAPPORO

Food Service Engineers Meetup ( ロゴ募集中 )

7

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

YAPC::Hokkaido 2016 SAPPORO8

「おとりよせネット」otoriyose.net

「レシピブログ」recipe-blog.jp

13 年 11 年

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

YAPC::Hokkaido 2016 SAPPORO9

over 10 years

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

YAPC::Hokkaido 2016 SAPPORO10

Language < System

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

YAPC::Hokkaido 2016 SAPPORO

レシピブログのシステム概要

☃FastCGI (Perl 5.10 + 独自 WAF)☃Apache 2.2☃PostgreSQL 9☃Elasticsearch☃File Cache + memcached (2016/10~)☃CloudFront

11

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

YAPC::Hokkaido 2016 SAPPORO

おとりよせネットのシステム概要

☃CGI (Perl 5.10)☃Apache 2.2☃PostgreSQL 9☃File Cache / Page Cache☃+ CloudFront (2016/11~)

12

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

YAPC::Hokkaido 2016 SAPPORO

技術・設計課題

☃利用技術の陳腐化❄ CGI 、 FastCGI 、…

☃開発環境や開発プロセスの停滞❄ 「運用でカバー」

☃そろそろモノリシックの規模も課題に

13

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

YAPC::Hokkaido 2016 SAPPORO

熟成した問題

☃独自 WAF 利用とその聖域化問題❄ メンテナンスやアップデートが行き届かず

❄ 手の入れ方がわからず運用でカバー

❄ 秘伝のタレ化

☃掃除不足によるゴミ屋敷問題❄ 不要なソースコードが残ったまま

❄ 不要なファイルが残ったまま

❄ 次第に影響範囲が不明になり消せなくなるパターン

14

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

YAPC::Hokkaido 2016 SAPPORO

どう向き合うか?

☃背景を理解する

☃事実を把握する

☃改善する

☃革新を起こす

15

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

YAPC::Hokkaido 2016 SAPPORO

背景理解

☃とにかくコードを読む❄ (個人的に) Perl でよかった

☃疑問や経緯はわかるまで全部聞く❄ 今目の前にある事象は、過去の決定の積み重ね

❄ 当時は何らかの意図や判断が必ずある

☃「システムに歴史あり」❄ ここまで事業を支えてきた事実をリスペクトする

❄ その上で諦めてきたことを知ろう

16

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

YAPC::Hokkaido 2016 SAPPORO

事実把握

☃ログをどんどん出す❄ 手がかりは多く、余れば後で捨てるだけ

❄ carp, croak → cluck, confess❄ $logger->warn($@)

☃リソースを監視する❄ 推測するな、計測せよ

❄ CloudForecast 入れるところから始めた

17

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

YAPC::Hokkaido 2016 SAPPORO

[ 改善 ] WAF の改修

☃コードを読んだ結果、普通に改修可能になった❄ (個人的に) Catalyst ライクな WAF でよかった

☃運用でカバーしていた部分が根本的解決へ

☃結果、コード自体もシンプルでスリムに

18

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

YAPC::Hokkaido 2016 SAPPORO

[ 改善 ] パフォーマンスチューニング

☃ログとリソースグラフのおかげ

☃ログに DB の max connection エラーを発見❄ DB チューニングで max connection 確保

☃まだ HTTP リクエストがタイムアウトしてた❄ TCP connection / HTTP がある値で頭打ちになってた

❄ ServerLimit, MaxClients 周りを設定

☃残るは DC 帯域が…(共用なので)

19

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

YAPC::Hokkaido 2016 SAPPORO

[ 改善 ] TV 露出の対応

☃TV (地上波 ) で取り上げられると即死( 30 分落ち)

☃「来週ヒルナンデスに出ます」という死の宣告

☃画像が豊富でページ当たりの転送量が…❄ とりあえず CloudFront 載せよう

☃アセットが世代管理されてないからキャッシュが…❄ mod_ext_filter っぽいのを書いた

☃CGI プロセスが膨大に…❄ SpeedyCGI (!) を引っ張りだした

❄ 参照系はことごとく静的に HTML 化

20

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

YAPC::Hokkaido 2016 SAPPORO

[ 革新 ] AWS導入

☃抜本的に環境を変える❄ 改善だけじゃ解決しきれない問題もある

☃ついでに残った問題も解決する❄ ドサクサに紛れて色々仕込む

21

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

YAPC::Hokkaido 2016 SAPPORO

[ 革新 ] システムリプレース

☃抜本的に(ry

☃ついでに(ry

22

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

YAPC::Hokkaido 2016 SAPPORO

なぜ革新なのか

☃ワクワク感が出る❄ 楽しさはモチベーションの源泉

❄ 「やるからには面白く、工夫して」 © 2016 @ikasam_a

☃本当は色々狙ってる❄ 大きな変化を伴わないと解決できない問題に向き合う

❄ 今ある他の課題も一緒に解決できる方法を考える

❄ 両立できる施策をしれっと狙う♨ 理想(革新)だけ追っても色んな意味で難しい

23

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

YAPC::Hokkaido 2016 SAPPORO

まとめ

☃アイランドではおやつにローストビーフが出ます

☃10 年過ぎると色んなところに地雷がありますが、こうなるに至った当時の判断背景が必ずあります

☃ここまで継続させてきた先駆者の実績をリスペクトしましょう

☃背景を理解した上で事実を知れば、どうやって対応していけばよいのか見えてきます

24