タグ

ブックマーク / moznion.hatenadiary.com (9)

  • 書評: ISUCONを「ゴール」で終わらせない。『達人が教えるWebパフォーマンスチューニング ~ISUCONから学ぶ高速化の実践』 - その手の平は尻もつかめるさ

    達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践 作者:藤原 俊一郎,馬場 俊彰,中西 建登,長野 雅広,金子 達哉,草野 翔技術評論社Amazon 著者のid:catatsuyさんよりご恵投いただきました。ありがとうございます。実は著者の方からを頂戴するのってはじめてです。 さて、この書籍のタイトルをはじめて見たときは「オッ、ついにISUCONの攻略が来ましたね、これでワシも優勝間違いなしや!!」と思ったものですが実際に手に取ってみると必ずしもそうではないことに気付きました。むしろ「ISUCONで勝つための小手先のテクニック」のような話題は極力排除されており、高速かつ高可用なWebアプリケーションをどのように構築・運用していくか、というような実戦的な内容がその多くを占めています。 まず書籍の冒頭では「『Webアプリケーションのパフォーマンス』の定義」か

    書評: ISUCONを「ゴール」で終わらせない。『達人が教えるWebパフォーマンスチューニング ~ISUCONから学ぶ高速化の実践』 - その手の平は尻もつかめるさ
    sfujiwara
    sfujiwara 2022/06/12
    書評ありがとうございます!
  • 古いaws/aws-lambda-goでAWS Lambdaのcontainer image runtimeを使うと刺さる - その手の平は尻もつかめるさ

    具体的に言うと、aws/aws-lambda-go@v1.18.0よりも前のバージョンでAWS Lambdaのcontainer image runtimeを使うとハンドラが呼び出されず、タイムアウトするまで刺さります。 例えば以下のような非常に簡単なLambda Functionをデプロイした時、 package main import ( "context" "fmt" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" ) func handler(ctx context.Context, event events.DynamoDBEvent) error { fmt.Println("CALLED") return nil } func main() { lambda.Start(h

    古いaws/aws-lambda-goでAWS Lambdaのcontainer image runtimeを使うと刺さる - その手の平は尻もつかめるさ
    sfujiwara
    sfujiwara 2021/12/20
    container runtimeはcustom runtimeと同じ挙動(自分でRuntime APIにアクセスする)なのでバージョンアップが必要ですね
  • ネットワーク越しリトライ考 - その手の平は尻もつかめるさ

    ここ最近では何らかのインターネットサービスを構築・運用するにあたって、ネットワーク越しのリトライを考えることは避けられなくなりつつあります。 micro services のようなアーキテクチャを採用している場合はサービス間のメッセージのやり取りはまず失敗する前提 (つまりリトライをする前提) で組む必要がありますし、たくさんのクライアントがいてそのクライアントが定期的に何かを処理してセントラルにデータを送ってくる IoT のようなシステムを構築する時もその処理のリトライをよく考える必要があります。 というわけで「ネットワーク越しのリトライ」についてここ最近考えていることをざっくりと書き留めるものであります。 前提 リトライをする側をクライアント、リトライを試みられる側をサーバと呼称します リトライにおいて、サーバおよびネットワークはクライアントよりも弱者です クライアントはリトライをコン

    ネットワーク越しリトライ考 - その手の平は尻もつかめるさ
  • golangのstructに対してコンストラクタを自動生成するCLIツール "gonstructor" を書いた - その手の平は尻もつかめるさ

    github.com 表題の通りです.出オチのような名前です. 使い方やどういう挙動をするかという話題についてはREADME.mdのSynopsisをご覧いただければと思います.Javaのlombokをご存知の方はlombokの@Valueのような挙動をする,と言えばイメージしやすいでしょう. 基的にはgo:generateと組み合わせて使うことになるだろうと思います. モチベーションとしてはREADME.mdのMotivationにも書きましたが,ザックリ言うと以下のような感じです: Structのフィールドをprivateかつimmutableに取り扱いたいことが多い フィールド (ないしはstruct) をimmutableに保つことについて,goでは基的に「気をつける」しかないが,その際にはフィールドはprivateであるほうが嬉しい フィールドを破壊的に変更できる存在が絞られ

    golangのstructに対してコンストラクタを自動生成するCLIツール "gonstructor" を書いた - その手の平は尻もつかめるさ
    sfujiwara
    sfujiwara 2019/12/10
  • Test::Fluent::Logger書いた - その手の平は尻もつかめるさ

    表題の通りです.Perl5の話です. CPANにもあげてあります. https://metacpan.org/pod/Test::Fluent::Logger 何をするモジュールかというと,useするだけでFluent::Loggerのpost及びpost_with_timeの内容をインターセプトして,来送るべき宛先には送らずに内部のリストにそれを貯めるという動作をするモジュールです.そしてそのリストをgetしてきて中身を確認したり,またリストを空にする (clear) こともできます. 使い方についてはSYNOPSISを読んでいただければわかると思います.とくに難しいことはありません. 来はMockみたいな名前をつけるべきだったのかもしれませんが,こんなのテスト用途以外に誰が使うんだということでこの名前になっています. 毎度毎度この手のコードを書いていて,良い加減飽きたなという動機で

    Test::Fluent::Logger書いた - その手の平は尻もつかめるさ
  • Ukigumoの新機能一覧 - その手の平は尻もつかめるさ

    https://metacpan.org/pod/Ukigumo::Server https://metacpan.org/pod/Ukigumo::Client https://metacpan.org/pod/Ukigumo::Agent ゆるふわCIエコシステムのUkigumoですが,最近ひと通りアップグレードしたのでそれに伴って搭載された新機能について紹介します. 注意 Ukigumo::Server 2.0.0以降はDBのスキーマが変更されているので,テーブルのALTERが必要です. ALTER TABLE report ADD compare_url VARCHAR(255) DEFAULT NULL; などとしてやる必要があります. Ukigumo::AgentがGitHubのWebhooksに対応した /api/github_hookにGitHubのWebhookを飛ばして

    Ukigumoの新機能一覧 - その手の平は尻もつかめるさ
  • Text::XslateにテンプレートのSyntaxをチェックするメソッドが追加されて便利 - その手の平は尻もつかめるさ

    Text::Xslateのバージョン3.1.0から,テンプレートのSyntaxが正しいかそうでないかをチェックするメソッドが追加されていて便利です. 以下のように,テストしたい対象のテンプレートファイルをvalidate()メソッドの引数としてべさせてあげると,そのテンプレートファイルのSyntaxをチェックしてくれます (@filesの中身はテスト対象となるテンプレートファイルのパスのリスト). use Text::Xslate; my $tx = Text::Xslate->new; for my $file (@files) { $tx->validate($file); } Syntaxが正しい時には何も起きず,Syntaxが誤っている時は以下のようなメッセージと共に例外が送出されます. Text::Xslate::Syntax::Kolon: Expected a semico

    Text::XslateにテンプレートのSyntaxをチェックするメソッドが追加されて便利 - その手の平は尻もつかめるさ
  • Test::Synopsis::Expectationというモジュールをリリースしました - その手の平は尻もつかめるさ

    このたび,Test::Synopsis::Expectationというモジュールをリリースしました. https://metacpan.org/pod/Test::Synopsis::Expectation https://github.com/moznion/Test-Synopsis-Expectation 使い方や仕組み等をid:mackee_wさんの記事で紹介していただいたので,そちらの方も併せてご覧いただくと良いと思います. SYNOPSISのコメントを使ってテストするTest::Synopsis::Expectation - ぱいぱいにっき CPANに上がっているモジュールを使う時,多くの方が何は無くとも真っ先にSYNOPSISを見て使い方をザックリ把握するかと思います.とりあえずSYNOPSISのコードをコピペしてみて,動くかどうか見てみる的な. で,SYNOPSISのコード

    Test::Synopsis::Expectationというモジュールをリリースしました - その手の平は尻もつかめるさ
  • ISUCON 3 予選回顧録 - その手の平は尻もつかめるさ

    ISUCON 3 の予選に出場してきました。そして敗退しました。 全然全然全然全然駄目で駄目な感じでした。 スコアが上がらねえのなんのってもう惨敗でした。 やったことを時系列順に書くとこんな感じ。ちなみに言語はPerlです。 とりあえずベンチ走らせてみる mysqld の CPU 使用率がトチ狂っているので、真っ先にここを直した方が良いと指摘 インデックスの張り忘れでは? という事で EXPLAIN で確認しようぜ、というのを@__papix__さんに任せる ついでに my.cnf 弄ってスロークエリログを吐くようにする mysqld をリスタートする mysqld リスタートすると、プロセス上では起動できてるしコンソールでもログイン出来るんだけど、アプリ側が "MySQL Server has gone." とかエラー吐いて mysqld を認識しなくなる 誰かが言い始めた「しかたねえか

    ISUCON 3 予選回顧録 - その手の平は尻もつかめるさ
    sfujiwara
    sfujiwara 2013/10/09
    MySQL再起動するとhas gone awayになるのはperlからの接続永続化して再接続できてないからで、アプリサーバ再起動で直りますね
  • 1