blog2013-02-12Plack::Middleware::Profiler::KYTProfでプロファイリングDevel::KYTProfでプロファイリングするのも、ミドルウェアになっていると使いやすいかもしれないということで作ってみました。KYTProf?onishiさんのDevel::KYTProfは、ネットワークI/O系やDBアクセスなどの、いわゆる重い処理に対してモンキーパッチをあてて、性能を測るということをするモジュールです。I/O系にフォーカスしているところが用途が明確でいいですね。Perl界隈でよく使われるモジュールに対してモンキーパッチをあてているので、useするだけで空気を読んで性能を測ってくれます。LLらしい面白いアプローチのモジュールです。Zabbixなどのリソースモニタリングツールを使うことで、I/O系の問題があることはすぐにわかります。I/Oの問題であることがわかっても、アプリケーションのどの箇所でおきているかを特定するのは、アプリの作りにも依存するところで、コードの理解無くして特定することは難しいこともあります。いった場合に、このミドルゥエアを使うことになります。使うことで、コードの変更すること無く、SQL、テンプレート、エンドポイントへの通信などを特定することが可能になります。基本的な性能問題の8-9割は、I/O絡みで発生することが殆どなので、その点で実用的といえるかもしれません。基本的な使い方は、以下の通りです。Engineもプロファイリング対象に加えています。};負荷テスト環境や独自のアプリでも使えるようにするために、サンプリングしたいケースや、何をプロファイリング対象にしたいかなどを切り替えられるようにもしてあります。examplesにサンプルをいれてあるので、使ってみてください。Enjoy!#NYTProfのようなマイクロチューニングをするためのモジュールは、使う人が*モジュールの作者など)かなり限定的になるかなとは思うんですが、こういったI/O系は性能のオーダーはまるで違うので、使いどころは結構ありそうです。00:00Plack::Middleware::Profiler::KYTProfでプロファイリングTweet広告を非表示にするもっと読むコメントを書く2013-02-11Plack::Middleware::Profiler::NYTProfでプロファイリングPlackアプリをプロファイリングするモジュールPlack::Middleware::Profiler::NYTProfを更新しました。https://github.com/dann/p5-plack-middleware-profiler-nytprofbayashiさんにパッチをもらって、負荷テスト環境などでも使えるようになりました。ある一定の負荷がかかった環境でしか性能問題がおきないといったケースはよくあるので、負荷テスト環境で、少し負荷をかけた状態で詳細なプロファイリングをしたい場合などに使ってみてください。プロファリングのオーバーヘッドと負荷を減らすために、サンプリング、プロファイリング対象の限定、レポート機能のoffの3点の機能を追加しています。サンプリング全部のプロセスに負荷をかけるのではなく、対象をenable_profileというcallbackで、条件によってプロファイリングを有効にすることができます。特定のプロセスや何回かに1回プロファイリングするなどでサンプリングしながら、プロファイリングするのがおすすめです。プロファイリング対象の限定NYTProfは、PerlのVMをhookして測定しているので、オーバーヘッドが他のプロファイラより小さくなっています。それでもプロファイリングするレベルがstatementレベルなどと小さいとオーバーヘッドは大きくなってしまいます。そこで、以下のDevel::NYTProfの文書に書いてあるように、プロダクション環境ではプロファイル対象を限定するのがおすすめです。slowops=0などを追加することで実現します。HTMLレポートの出力をしないこれは単純に元々が開発環境用を目的に作られた機能なので、デフォルトがオンになっているのをオフにできる機能を用意したというだけのことです。負荷テスト環境では、HTMLレポートをそのまま生成するのではなく、NYTProfのプロファイリング結果だけを出力して、後でみられるようにすればよく、HTMLレポートはoffにしておかないといけません。optionを0に設定することで実現します。設定のサンプルまとめると、例えば以下のような設定で使います。Hackathon(http://dann.g.hatena.ne.jp/dann/20091129/p1)で3年前につくったものですが、こうしてまた使われるというのも嬉しいものです。cover_db/coverage.vimを実行すると、以下のようにC0なコードがvim上で表示できます。エディタ上で気軽にカバレッジがみれるのはいいですね。coverage.vimをみた感じだと、ちょっとした修正で、rubyやperlに限らず色々と応用できそうなので、今後他の言語でも使っていきたいところです。人に聞かれることも増えてきた昨今ですが、お勧めする本は毎年そう変わりはしないのでまとめてみました。言語に依存する本は、書き出すと多くなってしまうので除いてます。Architecture大規模なシステムを組む場合、高い性能を要求される場合、省リソースが求められるケースなどは、特に低レイヤへの理解の必要性を実感することになります。下のレイヤを深く理解しておかなければ、このようなシステムのアーキテクチャデザインやトラブルシューティングは実質できません。Code〈Vol.2〉低いレベルで考え高いレベルで書くパタヘネ本を大学の時に読んでいたときには、その有り難みを半分程度しか理解していませんでしたが、このような本と一緒に合わせて読めていたら、もっと理解がしやすかったのにと思います。Engineerにお勧めしたい良書です。Architectureを知っていることが如何に大事かというのを理解できるようになります。Designを定量的に行うために、このような本と最新のハードウェアの性能測定に基づいて大体の理論値を計算できるようになっておくこととても重要です。Edition)パタヘネ本。定番ですが読んでおいて損はありません。Codeと一緒に読むのがよいです。最新のプロセッサのアーキテクチャがどのようになっているのかを丁寧に解説しており、最近のプロセッサの全体像を把握するのに役立ちます。Handbook詳解UNIXプログラミングの現代版ともいえる本です。読み切れてませんが、非常に細かいところまで書いてあるので、レファレンスとして使っていこうと思っています。ちなみにebookで買わないと色々と大変です。Library)Kernel開発を本格的にするための本というよりも、最近のKernelの概要をコンパクトにまとめてある本です。DBエンジニアやDevOpsの人などが読むのに非常に適した本だと思います。Structureアルゴリズムデザインアルゴリズムの解説書ではなく、どのようにアルゴリズムをデザインするのかという設計について書かれた本です。Algorithmを読んでから他のアルゴリズムの本を読むと大分アルゴリズムに対する理解の仕方が変わると思います。(マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ―Microsoft.net)トランザクション設計に関してこれ以上よくまとまっている本はないです。Techniquesと合わせて読むのがおすすめです。(Fowler))MQを使ったシステムのデザイン向けで他に類書があまりありません。MQ使われる方にはおすすめです。Paradigms分散システムのアーキテクチャに関して幅広く書かれており、分散システムをデザインする人は必ず読んでおいたほうがよい教科書的な本。Programmingと合わせて読みたい。Patternだけではないというのは、企業で物作りをしている方は感じることがあると思います。Architectureをどのような視点で評価するのかということに対して、大局観を与えてくれるものです。Architectureの関心事や課題をViewpointとPerspectiveのマトリクスで整理した本。SoftwareのArchitectureを多くの側面から見れるようになり、その点ではユニークであり面白い。Architectureをどのような切り口で文書化したらよいのかについての指針を与えてくれる本。設計の文書化をする際に、設計の「思想」をまとめるにも、どのような切り口で書くべきかというのは常に悩ましいところはありますが、この本はそれに大してある一定の切り口を提示してくれている点で貴重です。PatternGoFのパターン本以外にも読んでおくべきパターン本はあり、特にConcurrencyに関連する以下の本はおすすめです。Series)Lockに関するパターンなど、余り他の本には書かれていないパターンが書かれている良書。―その「基盤」と「最新API」を究める―Concurrencyのデザパタ本として秀逸。java.util.concurrentがある現在でも、読む価値はあります。Leaの本と比較してとても丁寧に説明が書かれているので読んでおくといいと思います。Systems複雑な状態遷移をモデリングする際に役立つパターンがちらほらと。Fowlerシリーズを読んでおくのがおすすめです。SELECTION)Dependencyの切り離し方のPatternのまとめが秀逸。過去の本をよく研究して作られており、コード例も比較的実践的な内容が多いため、あーこれはよくあるよねと納得しながら読むことができる。Martinシリーズとして出版されていないなあといった本。実装パターンCodingのIdiom系。Series)言わずと知れた名著。Patternsなどと一緒に読むと飽きずに読めると思います。OOA/Dアジャイルソフトウェア開発の奥義OODの原理原則が秀逸。Martinの本と言えばこれ。ソフトウェア開発の実践)現実と乖離するところが多いと言われることのあるこの本ではありますが、当時OO厨な人は誰もが読んでいたこの本。1回は読んでおいて損はないと思います。(Fowler))若干内容が重複していて冗長なところはありますが、これ以上にテストのボキャブラリが充実したパターン本は無く、一読の価値はあります。.net上記の2冊はTDD本よりは例が実戦的で、新しく読むならTDD本よりこの本がよいかもしれません。TDD関連の本を幾つか読んでいればpassしてよいとは思います。以下の本がおすすめです。PRESSプラスシリーズ)Googleの論文を丁寧に解説してある本で、当初読んだ時は感動しました。ある種の分散システムのデザインの指針となる良書だと思います。plusシリーズ)タイトル通りですが、はてなの本で、広範囲にスケーラビリティに関連する話が書かれており、最初に読む本としては最適だと思います。―高速サイトを実現する14のルールFront向けの性能チューニングで考えることがよくまとまっている。続編も合わせて読むのがよいです。Guide)Availability+Scalabilityに関するOSSの設定に関して非常に詳細に記述してあり、実践的で秀逸。plus)Web系システムとは違うMMORPGアーキテクチャ・見積もり方法などWebシステムのデザインであれば、上記の本を読むのでも十分得られることはあると思います。Database関連の本やHPCの分野の論文などを良く読んだほうがよいです。Designデータベースは、システム開発をする上では避けて通ることのできない分野です。DBはOSとStorageに強く依存しているため、DBのArchitectureだけでなく、ストレージ/OSのアーキテクチャも良く理解しておく必要があります。基本原理編DBのArchitecture一般についての理論的背景について非常によく書いてある本。この本は、各DB固有のアーキテクチャの本を読む前に読んでおくのがとてもよいです。Designを読まれた方でも意味はあります。[Oracle現場主義]Oracleでの物理設計についてよくまとまっている良書、物理設計を深く理解することはアーキテクチャの深い理解にも繋がります。第2版MySQLのパフォーマンスチューニング、システムアーキテクチャなどに関して幅広くまとめている良書。SELECTION)ストレージサブシステムとDBとの関係についてわかりやすく書いてある松信さんのMySQL本。松信さんの話は、この本だけでなく、その他のプレゼン全般でも、非常にストレージサブシステムへの説明が詳しくおすすめです。エキスパートのためのMySQL[運用+管理]トラブルシューティングガイドnippondanjiさんのmysqlの運用の本。ここまで細かく運用について書いてある本は他になく、アーキテクチャについてもかなり良く書かれています。癖のある分野で、これがベストであるといいきれる本はないのですが、以下の本は総じておすすめではないかと思います。ある程度読んだら、キーとなるドメインの知識獲得のほうを大事にしたほうがよいです。データベース設計技法Entityをコードで認識したり、EntityをEventとResourceに分離したりなど、モデリング手法として勉強になるところはかなりありました。書いてありますが、モデリング部分は面白いです。流れが非常にコンパクトにまとまっており、プロセスを学ぶという点では無駄の無い本。SELECTION)最近出た本なのですが、SQLのチューニングに必要な話が非常にコンパクトにまとまってます。コーディング方法、SQLの管理方法からSQLチューニングのプロセスまで幅広く扱っていて、考え方はOracle以外のDBにも使えるので是非読まれることをお勧めします。BOOKS)セルコさんのSQL本。ミックさんの本も系統は似ていて、DBアーキテクチャというよりも、「SQL」を学ぶための本。Webシステム系の人というよりも業務よりの人の方が向いているかもしれません。その他データベース・リファクタリング若干粒度が細かいといえば細かいのですが、類書はなく一回読んでおいて損はないです。DBエンジニアの人にとっては当たり前なことも多いかもしれないんですが、AP開発者の人がDB設計を改善する際には役に立つと思います。いった最近のDevOpsに求められる分野を網羅的にまとめている良書です。DevOpsの人だけでなく、AP開発者の人もAPを作る上で運用が可能なアプリケーションとはどのようなものなのかを意識するのにも役立つのではないかと思います。運用も含めた全体のシステムデザインが、昨今の大規模なクラスタではとても重要です。クラウドインフラが増えていき少数のエンジニアがその上でアプリケーションを開発するようになっていく時代には、AP開発者であってもインフラの基礎知識を持っておくことが今後より重要になっていくでしょう。Coplienの本を読んでおけば大体間違いないです。僕の場合は、Scrumをベースにした開発プロセスで大体のプロジェクトは進めています。Developmentアジャイルサムライ−達人開発者への道−後発だけあってよくまとまってます。今からならこれから読むとよいかもしれません。人間系ワインバーグの本一式。人への深い洞察は、今読んでも得られるものが多いです。デマルコの本などもよいですが、ワインバーグシリーズが個人的には好きです。Amazonへのリンクが欲しいというコメントがありましたので、リンクを追加しておきました。和書が出ているものは、和書のほうにリンクを張りました。さんと鎌倉いってきたときの写真。由比ケ浜は夕焼けが絵になって素晴らしかったですね。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。