タグ

ブックマーク / sfujiwara.hatenablog.com (14)

  • AWS X-Ray による ISUCON8 本選問題の解析 - 酒日記 はてな支店

    ISUCON8 の選問題は、競技者がコントロールできない外部 API 呼び出しを多数含んだ出題内容でした。 講評では、 サービスの特性を適切に分析した上で、まとめるところはまとめたり、遅延させるところは遅延させるなど ……とさらっと書かれていますが、実際そんなことを短時間で分析することは可能なのかよ!という話題が競技後の懇親会でもあったので、それ AWS X-Ray でできるよ、というエントリをまとめておきたいと思います。 今回の解析は Perl 版の初期実装に対して行ったものですが、なぜ Perl かというと AWS の公式 SDK にない X-Ray 関連の CPAN モジュールを自分が書いているので、その宣伝も兼ねています。(blogエントリ書いてなかった) AWS::XRay Plack::Middleware::XRay Devel::KYTProf::Logger::XRay

    AWS X-Ray による ISUCON8 本選問題の解析 - 酒日記 はてな支店
    karupanerura
    karupanerura 2018/10/29
    めっちゃいい
  • ISUCON8 本選出題記 あるいはISUCONベンチマーカー負荷調整の歴史 - 酒日記 はてな支店

    ISUCON 8 の選出題を同僚の @ken39arg と担当しました。参加された皆様、運営にご協力して頂いたすべての関係者の方々にお礼申し上げます。 恒例の #isucon pic.twitter.com/iXAjgfgbeZ— fujiwara (@fujiwara) 2018年10月20日 問題についての講評は公式の ISUCON8 選問題の解説と講評 をご覧頂くとして、こちらでは今回、出題に導入された新要素である「シェア機能」について、どういう経緯で導入されたのか、裏話的なことを書いておきたいと思います。 「ベンチマークの負荷を自分で決めるのも、自動で際限なく負荷が上昇するのも実際のアプリケーションとは違うよね?」というところから思いついた機構なのですが、経緯についてはいろいろな前提と、歴史の理解が必要になります。結果的に長文になってしまいました。 ISUCONベンチマーカーと

    ISUCON8 本選出題記 あるいはISUCONベンチマーカー負荷調整の歴史 - 酒日記 はてな支店
    karupanerura
    karupanerura 2018/10/25
    真摯だし、実際に課題を解決できているのがかっこいい
  • sardine - mackerel plugin のメトリクスを CloudWatch で集約する agent を書いた - 酒日記 はてな支店

    OSS紹介 Advent Calendar 2017 - Qiita 22日目の記事です。 最近、監視を Zabbix から Mackerel に切り替えていっています。それと並行して、新規プロジェクトAmazon ECS でコンテナで運用するようにもしていっています。そこで考えどころなのが、コンテナで動作するプロセスのモニタリングをどうするかです。 たとえば、コンテナで動作する nginxmackerel-plugin-nginx で監視する場合、普通にやるとこんな感じになるのですが… nginxmackerel-agent を同一タスク (ECS用語) に定義する mackerel-agent.conf で cloud_platform = "none" の設定をして、コンテナがホストの EC2 とは切り離された状態でホストとして認識されるようにする すべてのタスクを

    sardine - mackerel plugin のメトリクスを CloudWatch で集約する agent を書いた - 酒日記 はてな支店
    karupanerura
    karupanerura 2017/12/22
    すごい。よさそう
  • MHAをAWSで使うための支援ツールMHA::AWSをアップデートしてCPANに上げた - 酒日記 はてな支店

    以前に作って、プロダクションでもいくつかのサービスに導入している MHA::AWS ですが、failover 方法を ENI 付け替えの他に VPC Route Table の書き換えもサポートしました。 ENI付け替えでは同一 Availability Zone 内での failover しかできませんが、VPC Route Table の書き換えによる方法では Multi-AZ 環境での failover も可能になります。 CPANにも上げましたので、 cpanm MHA::AWS でインストール可能です。 MHA::AWS - A support script for "MySQL Master HA" running on AWS - metacpan.org fujiwara/MHA-AWS · GitHub 以前の紹介記事 → #11 MySQL Master HA を AW

    MHAをAWSで使うための支援ツールMHA::AWSをアップデートしてCPANに上げた - 酒日記 はてな支店
  • Starlet 0.24で子プロセスごとに乱数系列が初期化されるようになった - 酒日記 はてな支店

    Perl 5で fork する場合に乱数系列が親と同じになってしまう現象については過去にもいろいろエントリがあります。 乱数と Perl5 にかんする蘊蓄の話 - blog.64p.org #22 カジュアルに乱数を使う方法とその注意点 | tech.kayac.com - KAYAC engineers' blog 0.23以前の Starlet では、親で一度でもどこかで rand (またはsrand) が呼ばれていると、初期化された乱数系列が fork された子プロセスにも引き継がれるため、その後に実際のユーザアプリケーションが走る子プロセス内で rand() しても同じ系列が返ってきてしまう、という現象があったのですが、0.24 では子プロセス生成後に srand() が呼ばれるようになりました。 # 正確にいうと、0.14 で --min-reqs-per-child がサポート

    Starlet 0.24で子プロセスごとに乱数系列が初期化されるようになった - 酒日記 はてな支店
    karupanerura
    karupanerura 2014/05/26
    朗報だ
  • nginx で gzip_static と gunzip を使ってストレージを節約する - 酒日記 はてな支店

    一月ほど前に 社内Gyazoの画像をAmazon S3に逃がしてスケーラブルに運用する - 酒日記 はてな支店 というエントリを書いて一段落と思いきや、そのサーバには社内向けの nopaste アプリも同居しており、気がつけばテキストファイルが10GB以上積もっていたのでした… 社内 nopaste アプリの実装はDBなどを使用せず単にテキストファイルを保存しているだけだったので、ファイルを gzip して nginx の http_gzip_static_module を使って配信したらディスクを節約できていいんじゃないか、と思いついたのですが、Accept-Encoding: gzip でないクライアントからアクセスすると 404 になってしまうので圧縮前のファイルが消せない。 今時ブラウザで対応していないものは少ないとはいえ、curlとか各種言語のHTTPクライアントでアクセスする場

    nginx で gzip_static と gunzip を使ってストレージを節約する - 酒日記 はてな支店
  • nginxでメソッドごとにリクエスト数制限を掛けたい - 酒日記 はてな支店

    アプリケーションでどうしても捌けない量のリクエストが一時的に押し寄せてしまう場合、アプリケーションサーバが死ぬのを避けるために GET は制限を掛けたいが、POST はリトライが面倒なのでなるべく通してあげたい、というような要求を nginx で処理できるかどうか。 実装として一番望ましいのは GET は 100 req/sec で制限 (超えたら503) POST は無制限 のようにメソッドごとに別々の制限を掛けることだったのですが、とりあえず HttpLimitReqModule を使うことで、メソッドごとに同一の上限を設定することはできました。 http { limit_req_zone $request_method zone=method:1m rate=100r/s; server { listen 80; location / { limit_req zone=method;

    nginxでメソッドごとにリクエスト数制限を掛けたい - 酒日記 はてな支店
  • 異常値検出プラグイン fluent-plugin-anomalydetect を使ってみたのでそろそろ閾値を決めたい - 酒日記 はてな支店

    異常値検知、素敵な響きですね!fluent-plugin-anomalydetect 作りました - PolyPeaceLight あらかじめ固定値でアラートの条件を決めておかなくても、通常と異なる数値変化を検出してアラートできたら大変嬉しい、ということでインストールして一週間ほど運用してみました。 fluent-agent-lite で送信されてくる nginx のアクセスログの数を対象 60秒間隔で集計 <match nginx.access.**> type copy <store> ... </store> <store> ... </store> <store> type anomalydetect tag nginx.anomaly.access_log tick 60 store_file /var/log/td-agent/anomalydetect.dat </store

    異常値検出プラグイン fluent-plugin-anomalydetect を使ってみたのでそろそろ閾値を決めたい - 酒日記 はてな支店
    karupanerura
    karupanerura 2013/01/26
    よさそう
  • #isucon2 で優勝してきました - 酒日記 はてな支店

    なんでもありのいい感じにスピードアップコンテスト ISUCON が 2 になって帰ってきたので、参加して優勝を勝ち取ってきました。 まとめ的なものはこちらから livedoor Techブログ : ISUCON チームメンバーのblogも併せてご覧ください。 おそらくはそれさえも平凡な日々: #isucon2 で連覇させてもらってきました Redis布教活動報告 ISUCON 編 - unknownplace.org 今回は前回の ISUCON 優勝メンバーのひとり @sugyan が転職して出題側に回ってしまったので、@typester を招聘してチーム編成。@songmu と共に3人でチーム「fujiwara組」として再参戦です。 以下、作業用IRCのログからふりかえりますと…… 11:39:29 <typester> とりあえずrecent_soldはキャッシュってのはまずやることか

    #isucon2 で優勝してきました - 酒日記 はてな支店
    karupanerura
    karupanerura 2012/11/04
    さらっとすごいことしててすごい
  • MySQL 5.6のInnoDB memcached pluginを使ってみる - 酒日記 はてな支店

    MySQL 5.6の RC 版が出ましたね。魅力的な機能が満載で皆さんwktkしていることと思います。早速、個人的に気になっていた memcached plugin を試してみました。 最初に結論から言いますが、現時点 (5.6.7rc) では HandlerSocket の代わりに使えるようなものではなさそうです。 memcached protocol でアクセスできるのは全体で 1 テーブルのみ 訂正: namespace という仕組みで複数テーブルにmapが可能です テーブルの文字コードは latin1 である必要がある 【2012-11-22 追記】5.6.8RCでは、文字コードが latin1 であるという制限は撤廃されました 「MySQL のテーブルに memcached protocol でアクセスできる」というよりは、「memcached のストレージを InnoDB にで

    MySQL 5.6のInnoDB memcached pluginを使ってみる - 酒日記 はてな支店
  • Parallel::Benchmark というモジュールを書きました - 酒日記 はてな支店

    プロセスを並列に立ち上げて負荷を掛けるようなベンチマークを実行することって、よくありますよね。(例 : クエリキャッシュを切ったほうがいイカ? ベンチマークしてみた - 酒日記 はてな支店) Perl で Parallel::ForkManager を使うとそういう処理も簡単に書けて便利なのですが、何度も同じようなコードを書くうちに、これもうちょっと抽象化したら使いやすいかも、と思って Parallel::Benchmark というモジュールを書いてみました。 リポジトリはこちらです。 https://github.com/fujiwara/p5-Parallel-Benchmark たとえばフィボナッチ数 fib(10) を求めるベンチマーク。 use Parallel::Benchmark; sub fib { my $n = shift; return $n if $n == 0 o

    Parallel::Benchmark というモジュールを書きました - 酒日記 はてな支店
  • Perl から Fluentd にログ出力 - Fluent::Logger リリース - 酒日記 はてな支店

    皆さん、ログ書いてますか!?(挨拶) Fluentd meetup in Japan も開催間近、最近大変熱いイベントログ収集システム Fluentd なわけですが、Perl からログを出力する Fluent::Logger というモジュールを CPAN にリリースしたのでお知らせします。 (最初の版は id:hirose31 さんが書かれて、それに同僚の id:shin1rosei と手を加えたものです) インストールは cpanm などでどうぞ。使い方は POD にもあるように簡単です。 use Fluent::Logger; my $logger = Fluent::Logger->new( host => "127.0.0.1", port => 24224 ); $logger->post( "myapp.info" => { foo => "bar" } ); 上記の例で送信す

    Perl から Fluentd にログ出力 - Fluent::Logger リリース - 酒日記 はてな支店
  • クエリキャッシュを切ったほうがいイカ? ベンチマークしてみた - 酒日記 はてな支店

    カジュアル!(挨拶) このエントリは MySQL Casual Advent Calendar 2011 の18日目の記事です。 昔、専ら PostgreSQL を使っていた頃、MySQL のクエリキャッシュって簡単に性能上がるしみたいだし羨ましいなあ、と思っていました。そのため、1年ほど前から業務で MySQL を使うようになっても、クエリキャッシュは当然のごとく有効にしておりました。 ところが先日 DSAS開発者の部屋:クエリキャッシュは切ったほうがいいんじゃなイカ? というエントリを読みまして、クエリキャッシュはグローバルロックを獲得するとのこと。これはちょっと検証してみなければなるまい、ということでベンチマークをしてみました。 ベンチマーク結果 結果は別ページにまとめました benchmark script と my.cnf ざっくりと説明しますと、 平均 260 byte/行、1

    クエリキャッシュを切ったほうがいイカ? ベンチマークしてみた - 酒日記 はてな支店
  • #isucon で優勝してきました - 酒日記 はてな支店

    なんでもありのWebアプリケーション高速化バトル、#isucon に会社の同僚 @Songmu @sugyan と3人で、fujiwara組として参戦してきました。結果、幸いにも優勝を勝ち取ることが出来ました。 こんなに楽しいイベントを企画、運営していただいた Livedoor の皆様、当にありがとうございます!! さて、ざっとチューニングした経過などを記録しておきます。 [追記] もっと詳しいレポートを @Songmu が上げているのでそちらもご覧ください おそらくはそれさえも平凡な日々: #isucon で優勝させてもらってきました [さらに追記] #isucon ではどんなことを考えながら作業していたか - 酒日記 はてな支店 自分でももう少し詳しく振り返りエントリ書きました。 まず説明を聞いて、環境を作るところから。IPアドレスでは作業がしにくいし事故も起こりそうなので、host

    #isucon で優勝してきました - 酒日記 はてな支店
    karupanerura
    karupanerura 2011/08/28
    ボトルネックを正確に特定するのがパフォーマンス向上には非常に重要だと痛感。すごかったです!おめでとうございます!
  • 1