21
プロセスの永続化で コスト削減 尾形 鉄次 (OGATA Tetsuji) Twitter: @xtetsuji 2013/11/29 PerlBeginners #11

プロセスの永続化でコスト削減 #perlbeginners

Embed Size (px)

DESCRIPTION

2013/11/29 PerlBeginners#!11 で発表したLTです。ビギナー向け勉強会なので、内容はいたって初歩的な範囲にしてあります。上級者からすると物足りない感じ。

Citation preview

Page 1: プロセスの永続化でコスト削減 #perlbeginners

プロセスの永続化でコスト削減尾形 鉄次 (OGATA Tetsuji)

Twitter: @xtetsuji2013/11/29 PerlBeginners #11

Page 2: プロセスの永続化でコスト削減 #perlbeginners

自己紹介

• 尾形 鉄次 (OGATA Tetsuji)

• Twitter: @xtetsuji

• Blog: http://post.tetsuji.jp/ (最近サーバ不調)

• レガシーとモダンの間の伝道師

Page 3: プロセスの永続化でコスト削減 #perlbeginners

CGI回顧と最近

Page 4: プロセスの永続化でコスト削減 #perlbeginners

CGIが遅い理由• リクエストが来たら「Perlインタープリタを起動する」「Perlプログラムを読み込む」「付随するモジュールをロードする」といった処理を毎回行う

• Linuxにとってこれらが一気に来られたらかなり重い仕事になる

Page 5: プロセスの永続化でコスト削減 #perlbeginners

プロセスの永続化• そんなわけで生まれたのがmod_perlや

FastCGIとかSpeedyCGIとか…

• mod_perlはApacheとPerlにロックオン

• FastCGIは仕様が面倒ではあるがCGI

同様言語やウェブサーバを選ばない

Page 6: プロセスの永続化でコスト削減 #perlbeginners

最近では

• Perlのウェブプログラミングでは、Plack

ベースのウェブサーバ(Starman、Starlet、Monocerosなど)を裏に置いて、表でApacheやNginxが受ける形になって来ている

Page 7: プロセスの永続化でコスト削減 #perlbeginners

×××でも悪くない• Perl CGI(Plackのエンジン含む)でも社内とか自分ツールの規模感であればパフォーマンスに問題無いしいいのでは?

• mod_perlも癖はあるけど悪くないよ

• FastCGIはちょっと実装面で困る事も

Page 8: プロセスの永続化でコスト削減 #perlbeginners

永続プロセス嬉しい

• mod_perlやPlackベースのウェブサーバであれば「Perlインタープリタ」「Perl

プログラム」「付随するモジュール」は全てロードされた状態で待ち受け

• コスト低い(CPU/HDD>>>メモリ)

Page 9: プロセスの永続化でコスト削減 #perlbeginners

永続プロセス嬉しい

• CPUよりメモリの時代だけど64bit化やメモリの価格下落で対応可能

• 永続プロセスは、一度起動したらそのまま入出力を待つ形式だけど、入出力(I/O)自体のコストは低いので無問題

Page 10: プロセスの永続化でコスト削減 #perlbeginners

リフレッシュも

• 永続プロセスもリクエストを受けつづけるとメモリの肥大化が見られ場合があるのでpreforkモデルが使われる

• 子プロセスに処理させ、一定数のリクエストを処理したら親が子を刷新する

Page 11: プロセスの永続化でコスト削減 #perlbeginners

安泰なウェブ開発• ウェブ開発の世界は進化した

• もうCGIのようなものでパフォーマンスに頭を悩ませる必要はない

• DB(MySQLとか)も永続プロセスというかサーバですね

Page 12: プロセスの永続化でコスト削減 #perlbeginners

用語• 起動したプログラムは「プロセス」

• 起動しっぱなしのプログラムを便宜的に「永続プロセス」とか呼んでいる

• 巷ではその類の物は「デーモン」とか「サーバ」と呼ばれる事が多い

Page 13: プロセスの永続化でコスト削減 #perlbeginners

用語• プロセスを起動する事をLinuxではfork

と言う事も多い

• もともとはプロセスの分岐複製のこと

• 複製ではない新規プロセスの生成でも内部的にforkが使われているので、用語が流用されることがある(fork/exec)

Page 14: プロセスの永続化でコスト削減 #perlbeginners

メールというやつ

Page 15: プロセスの永続化でコスト削減 #perlbeginners

メールというやつ

• 今も生き残るメールとメール関連開発

• メールサーバ(MTA)でメールが受信したタイミングで処理をしたい

• e.g. エラーメール処理など

Page 16: プロセスの永続化でコスト削減 #perlbeginners

Postfix pipe

• 最近のMTA業界はPostfixで枯れている

• PostfixもSendmail由来のpipeがある

• 例えば “.forward” で“|/path/to/mail-recieve.pl”

• やったことある人多いのでは?

Page 17: プロセスの永続化でコスト削減 #perlbeginners

pipeは都度起動• Postfix pipeは永続プロセスではなく都度起動するプロセスなの注意

• 処理すべきメールが大量に押し寄せるとサーバが気絶する事がありがち

• ウェブ側が100req/secで大丈夫でもMTA

が100recv/secで大変になることある

Page 18: プロセスの永続化でコスト削減 #perlbeginners

MTAでも永続化• qpsmtpdなどのPerl製のサーバがある

• Perlの永続プロセスを使った大量の受信メール処理といった事例もある

• そういう設計にしてコストを低くして難局を乗り切る

Page 19: プロセスの永続化でコスト削減 #perlbeginners

ノウハウが少ない

• 世間はあまりメールに興味失い気味

• 検索してもノウハウ少ない

• 続きは「Postfix友の会」などでフォローしたい(主宰はPB同様あずまさん)

Page 20: プロセスの永続化でコスト削減 #perlbeginners

続きは…で• PerlBeginnersはビギナー向け勉強会だし雰囲気だけでも想像してもらえれば

• 続きは、Machida.pm、Postfix友の会主催イベント等の、より高度な内容を扱うイベントでやろうと思います

• ぜひ他の勉強会でも会いましょう

Page 21: プロセスの永続化でコスト削減 #perlbeginners

ご清聴ありがとうございました