タグ

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

  • awslim - Goで実装された高速なAWS CLIの代替品を作った - 酒日記 はてな支店

    最初に3行でまとめ AWS CLIは便利です。しかし起動が遅いので、Goで実装された高速な(ただし機能は少ない)代替品を作りました。awslim といいます リリースバイナリは無駄に大きいので、必要な機能だけを組み込んだビルドを簡単にできるようにしてあります。ビルドして使うのがお勧めです どうぞご利用下さい github.com 以下はこれに至るまでの経緯とか、実装や使い方の話とかです。長いです。 作成の経緯 AWSの各種サービスにアクセスするための AWS CLI は、スクリプトやコマンドラインから処理を自動化するために大変便利なツールです。AWSでサーバーサイドの開発、運用している人であれば、ほぼ全員がお世話になっているんじゃないかと思います。 しかし、AWS CLI (コマンド名aws) には「起動が重い」という問題があるなとずっと思っていました。具体的には、aws --versio

    awslim - Goで実装された高速なAWS CLIの代替品を作った - 酒日記 はてな支店
    mattn
    mattn 2024/05/27
  • ISUCON11で優勝しました - 酒日記 はてな支店

    勝った!!引退!!! 取り乱しました。 ずっと参加してきているWebアプリケーションパフォーマンスチューニングコンテスト ISUCON、ISUCON11選にチーム「fujiwara組」で参加して、優勝しました。 ISUCON11 まとめ : ISUCON公式Blog fujiwara組は初回のISUCONから参加している老舗チームで、自分(fujiwara)以外のメンバーは都度入れ替わっているのですが、今回はISUCON10の時と同様に会社(面白法人カヤック)の同僚である acidlemon と macopy とのチームです。 チーム紹介スライド 過去に ISUCON1, 2, 5 で優勝しているので、6年ぶり4度目の優勝になりました。もう引退していいよね!(というか941さんに出禁って言われた気がする…) やったこと リポジトリはこちらです。 github.com アプリケーションの変

    ISUCON11で優勝しました - 酒日記 はてな支店
    mattn
    mattn 2021/09/21
  • sardine で mackerel-plugin の出力をサービスメトリックとして投稿する - 酒日記 はてな支店

    全国三千万 Mackerel ユーザーの皆様こんにちは。 mackerel-plugin で生成した値を、サービスメトリックとして投稿したいと思ったことはないでしょうか。ありますよね。でも mackerel-agent ではホストメトリックしか投稿できません。 ということで、拙作の sardine に Mackerel のサービスメトリックとして投稿する機能を追加しました。(Thanks for @jet_zousan) sardine についてはこちらをご覧ください。 sfujiwara.hatenablog.com github.com mackerel-plugin 互換の出力を CloudWatch のメトリックとして投稿する agent です。 おもにコンテナ環境で、mackerel-agent を全部に立てたくはないけど使い慣れた mackerel-plugin で収集した値を

    sardine で mackerel-plugin の出力をサービスメトリックとして投稿する - 酒日記 はてな支店
    mattn
    mattn 2018/03/27
  • ISUCON6で準優勝でした - 酒日記 はてな支店

    ISUCON 6 にチーム「morimoto組」で参加して、最終スコア 36,067 で準優勝しました。 morimoto組は自分と、会社の新卒1,2年目( kasari , id:moshisora ) という歳の差チームです。 今年も作りました #isucon pic.twitter.com/y2fX4HiJys— fujiwara (@fujiwara) October 22, 2016 お題 匿名お絵かきサービス ログイン、セッション管理などはない SSE (Server Sent Events) で他のユーザの書き込みがストリーミングで流れてくる 一番前に React のサーバサイドレンダリングをする node のプロセスがいる react, 各言語実装のアプリケーションサーバ, MySQL はすべて Docker で起動している やー、盛りだくさんでしたね… スコア推移とやった

    ISUCON6で準優勝でした - 酒日記 はてな支店
    mattn
    mattn 2016/10/24
  • 「みんなのGo言語」の執筆に参加しました - 酒日記 はてな支店

    技術評論社から発行される「みんなのGo言語」という書籍の執筆に参加しました。日、9月9日発売です! gihyo.jp みんなのGo言語【現場で使える実践テクニック】 作者: 松木雅幸,mattn,藤原俊一郎,中島大一,牧大輔,鈴木健太,稲葉貴洋出版社/メーカー: 技術評論社発売日: 2016/09/09メディア: 大型この商品を含むブログ (1件) を見る Goと自分 Goは2009年に一番最初にリリースされたときにちょっと触っていて、このblogにもいくつかエントリを書いていました。 golang カテゴリーの記事一覧 - 酒日記 はてな支店 その後、実際にプロダクションで使うことがなかったのでしばらく離れていたのですが、 2013年頃からGoが盛り上がってるなという雰囲気もあり、 自分が出題を担当した2013年の ISUCON3 で参考実装にGoを (ISUCONでははじめて) 導

    「みんなのGo言語」の執筆に参加しました - 酒日記 はてな支店
    mattn
    mattn 2016/09/09
  • ISUCON5予選を全体1位で通過しました - 酒日記 はてな支店

    ISUCON5 の予選1日目にチーム「fujiwara組」(@fujiwara, @songmu, @sugyan) として参加して、全体通して1位のスコアで通過しました。 isucon.net 今回は ISUCON 1 の時の優勝チームを再結成という形になったわけですが、最初はISUCON 4の時と同じ社内のチームででようかと思ってたんですよね。ところが昨年優勝チームだった「LINE選抜 生ハム原木」が今回参戦できないということで、sugyanがチームどうしよう、と困っていたのでつい…*1 初代fujiwara組を再結成しよう— fujiwara (@fujiwara) 2015, 5月 27 準備 今回はOSは Ubuntu(バージョン非公開)なのが事前にレギュレーションで公開されていたので(前年まではCentOS, Amazon LinuxなどのRedHat系ディストリビューションで

    ISUCON5予選を全体1位で通過しました - 酒日記 はてな支店
    mattn
    mattn 2015/09/29
    3人がパラでベスト出し続けるの凄いな。
  • ISUCON4本選で3位に敗れました #isucon - 酒日記 はてな支店

    ISUCON4 に「fujiwara組」として参戦しましたが、既報のとおり 3位に敗れてきました。順位こそ3位で賞金10万円は獲得できたものの、スコアが示すとおり内容的には完敗です。 まずは主催のLINE社様、出題を担当していただいたCookpad社様、番サーバ提供をしていただいたテコラス社様にお礼申し上げます。当に楽しいイベントをありがとうございました。 うちのチームとしてやったことは #isucon 4の戦で3位を取ってきました (追記あり) - beatsync.net に大変詳しいので、そちらをご参照ください。 簡単に最終的な構成をまとめると Redisは1号機に(動画以外)集約 動画はアップロードを受けたサーバがローカルファイルとして保存しnginxが返す。保存されたサーバのアドレスをメタデータとしてRedisに保存し、APIへのレスポンスに含まれるURLを構築するのに使用

    ISUCON4本選で3位に敗れました #isucon - 酒日記 はてな支店
    mattn
    mattn 2014/11/10
  • Goで並列実行のベンチマークを取るためのライブラリ parallel-benchmark を書いた - 酒日記 はてな支店

    以前 Perl で、forkして並列実行するベンチマークを取るためのライブラリ、Parallel::Benchmark というのを書きました。 Parallel::Benchmark というモジュールを書きました - 酒日記 はてな支店 これを使うと、単に Perl コードのベンチマークだけではなく、並列に外部にアクセスして計測を行うような (たとえばApacheBenchのような) ベンチマークツールが簡単に作れるので重宝しています。(仕事では、ソーシャルゲームのサーバアプリケーションに対する負荷テストを行うために使ったりもしています) で、思い立って Go 版を書きました。 kayac/parallel-benchmark · GitHub 使用例 フィボナッチ数を求めるコードを並列実行するベンチマーク fib(30) を1回計算するごとにスコア1とする 10個の goroutine

    Goで並列実行のベンチマークを取るためのライブラリ parallel-benchmark を書いた - 酒日記 はてな支店
    mattn
    mattn 2014/07/18
  • 社内Gyazoの画像をAmazon S3に逃がしてスケーラブルに運用する - 酒日記 はてな支店

    Gyazo、便利ですよね。大変便利なので、社内でプライベートなGyazoサーバを用意して使っている会社も多いと思います。 うちでもサーバのパフォーマンスは特に必要ないので社内に適当なVMを立てて運用していたのですが、数年単位で運用していると画像ファイルが増えていくためdiskをなんとかする必要に迫られました。 ここでどんどん増えるファイルはAmazon S3に逃がそう、という自然な発想に至るわけですが、Gyazoサーバアプリが投稿を受けたときにS3にアップロードするような改修をするのは年末の忙しい時期に面倒。楽したい。 ということで S3 と nginx を組み合わせていいかんじに運用できるようにしてみました。 Gyazoに限らず、 ローカルに書き込んだファイルをhttpで閲覧する 一度書き込まれたファイルには変更がない ファイルは消えないでどんどん増える ようなものには応用できると思いま

    社内Gyazoの画像をAmazon S3に逃がしてスケーラブルに運用する - 酒日記 はてな支店
    mattn
    mattn 2014/03/15
  • Redisを使って排他制御するwrapperコマンド Redis-Setlock をPerlとGoで書いた - 酒日記 はてな支店

    しばらく前に作って書きそびれていましたが、Yokohama.pm #10 でLTしたのでエントリもあげます。 Perl版 https://metacpan.org/release/Redis-Setlock Go版 http://fujiwara.github.io/go-redis-setlock/ LTのスライドはこちら ⇒ Redis-Setlockを書いたはなし なにをするもの? 「setlockコマンドのロック処理をRedisサーバで行うもの」です。 setlockはflockを使ってロックを獲得したら引数に渡されたコマンドをexecする、daemontools付属のwrapperコマンドで、cronでコマンド実行するときなど多重実行を制御する場合に重宝します。 flockだとホストをまたいだロック処理が行えないため、その部分をRedisを使った排他制御に置き換えたものを書いてみ

    Redisを使って排他制御するwrapperコマンド Redis-Setlock をPerlとGoで書いた - 酒日記 はてな支店
    mattn
    mattn 2014/02/24
  • 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でメソッドごとにリクエスト数制限を掛けたい - 酒日記 はてな支店
    mattn
    mattn 2013/06/21
  • #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 で優勝してきました - 酒日記 はてな支店
    mattn
    mattn 2012/11/05
  • 手軽に使える forward http proxy : stone, Tinyproxy - 酒日記 はてな支店

    直接グローバルに繋がる経路をもたないホストから http アクセスしたいので http proxy を使いたい。Squidは定番ですが、もう少し手軽なのはなにかないかと思っていたところ twitter で教えていただきました。ありがとうございます。 reverseじゃなくてforwardなhttp proxyでsquid以外って手軽なの何かないか。Apacheをそれだけのために動かすのはちょっと…てかんじ 2012-10-23 17:57:44 via YoruFukurou @fujiwara stone とか? 2012-10-23 18:03:07 via web to @fujiwara @fujiwara うちはtinyproxyつかってますよ。 2012-10-23 19:01:47 via Echofon to @fujiwara Stone Simple Repeater

    mattn
    mattn 2012/10/23
  • #isucon で優勝してきました - 酒日記 はてな支店

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

    #isucon で優勝してきました - 酒日記 はてな支店
    mattn
    mattn 2011/08/29
  • ついにやらかした rm -rf / - 酒日記 はてな支店

    UNIX の root なら誰もが必ず一度はやるという、rm -rf / をついにやった。root歴10年にして…… 社内の開発サーバだったのが不幸中の幸いではあったが。 vsftpd でホームディレクトリがない時の挙動を確認したくて、テスト用のユーザ fujiwara2 の home を mv しようと、 # mv /home/fujiwara2 /ここまで打ち込んで、やっぱ mv じゃなくて rm でいいや、と思い直して # rm -rf /home/fujiwara2 /最後の / を付けたままで実行してしまった…… なんか返ってこないな? と思って気が付いて、慌ててキャンセルはしたのだが、時既に遅し。 /dev /etc あたりがごっそり消えた。なんでか /bin /boot は残ってた。 これまた幸いというか、このホストは VMware のバーチャルマシンだったので、2007年7

    ついにやらかした rm -rf / - 酒日記 はてな支店
    mattn
    mattn 2011/04/12
  • mod_pagespeed をちょっとだけ試してみた - 酒日記 はてな支店

    Google の Page Speed の Apache module 版 mod_pagespeed をインストールして、ちょっとだけ動きを見てみた。 インストールは Ubuntu に deb パッケージで。 $ wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_amd64.deb # sudo dpkg -i mod-pagespeed-beta_current_amd64.debconfig はデフォルトで入るものそのまま。 <IfModule pagespeed_module> SetOutputFilter MOD_PAGESPEED_OUTPUT_FILTER ModPagespeed on ModPagespeedUrlPrefix "http://localhost/mod_p

    mod_pagespeed をちょっとだけ試してみた - 酒日記 はてな支店
    mattn
    mattn 2010/11/04
  • node.jsでTwitter ChiarpUserStreamを閲覧するWebアプリを作った - 酒日記 はてな支店

    先日 Perl + AnyEvent で作った TwitterのChirpUserStreamsをダラ流しするWebApp を、node.js で作ってみました。 node.js というのは、「JavaScript V8 Engineでイベント駆動I/Oなネットワークサーバを書くためのフレームワーク(実行環境)」ということでいいんでしょうかね。 # インストールは ./configure && make && make install で終わるので詳細割愛 イベント駆動IOを使って、以下のような処理を1プロセスで行います。 CharpUserStream から流れてくる JSON を取得して node.js 組み込みの httpd のレスポンスに渡す ブラウザは Long poll して node.js から JSON を取得して画面描画 実際動いてるのを動画で見るとこんな感じです。左側の

    node.jsでTwitter ChiarpUserStreamを閲覧するWebアプリを作った - 酒日記 はてな支店
    mattn
    mattn 2010/06/21
  • Server::Starter 配下で動くサーバを Perl 以外で書く - 酒日記 はてな支店

    Server::Starter の SYNOPSIS には、自分で Server::Starter 配下で実行するサーバを作る場合の例があります。 # in my_httpd use Server::Starter qw(server_ports); my $listen_sock = IO::Socket::INET->new( Proto => 'tcp', ); $listen_sock->fdopen((values %{server_ports()})[0], 'w') or die "failed to bind to listening socket:$!"; while (1) { if (my $conn = $listen_sock->accept) { ... } } ところでこのサーバは Perl でなければ書けないのか? というと、そんなことはないのですね。 Se

    Server::Starter 配下で動くサーバを Perl 以外で書く - 酒日記 はてな支店
    mattn
    mattn 2010/05/27
  • Google Chrome のテキストエリアを外部エディタで編集する Edit with Emacs - 酒日記 はてな支店

    おことわり: Windows での事情は分かりません。以下は MacLinux のみで確認しています。 Firefox では昔は mozex、最近は It's All Text を使ってテキストエリアを emacs で編集していたのですが、Google Chrome では extension が見つからないので渋々普通にテキストエリアを使っていました。 が、昨日 Extensions Gallery をみていたら、Edit with Emacs というそれらしいものを発見。 Chromeセキュリティ上の理由で外部プロセスを起動することができないため、localhost:9292 に httpd を立ててそこに XMLHttpRequest でテキストエリアの内容を POST、レスポンスとして返ってきた内容を書き戻す、という動作をするものだそうです。 emacs 用にedit-se

    Google Chrome のテキストエリアを外部エディタで編集する Edit with Emacs - 酒日記 はてな支店
    mattn
    mattn 2010/01/30
  • goroutine は OS thread も使う - 酒日記 はてな支店

    goroutine は GOMAXPROCS >= 2 の場合は OS の thread も使って動くので、 そもそもgoroutineはスレッドじゃない。 そう、goroutineはスレッドじゃない。 Big Sky :: 非同期UI この部分はちょっと誤解を招くかもなあと思いました。 実際に複数の goroutine から共有変数を書き換えるようなコードを GOMAXPROCS >= 2 で動かすと、衝突したりします。 package main import ( "runtime"; "fmt"; ) func main() { incr(1); incr(2); } func incr(procs int) { runtime.GOMAXPROCS(procs); num := 0; wait := make(chan int); go func() { for i := 0; i

    goroutine は OS thread も使う - 酒日記 はてな支店
    mattn
    mattn 2009/12/31
    あざす!