タグ

ブックマーク / blog.nomadscafe.jp (29)

  • 株式会社メルカリに入社しました - blog.nomadscafe.jp

    入社なう pic.twitter.com/OSi3NaCAnV — masahiro nagano (@kazeburo) February 2, 2015 1000万ダウンロードと会社の2周年という記念の日に入社しました。 2周年を迎えたメルカリ、ダウンロード数は1000万超に - TechCrunch iOS、Androidアプリのダウンロード数はもちろん、商品の出品数や流通額も大幅に伸びています。また、アメリカでの展開等も進んでいるので、サーバ・フロントのエンジニアを募集しています。ご興味のある方はぜひご連絡くださいませ。 3月には六木ヒルズへのオフィス引越も予定されています。mixi入社前にlivedoorのセミナーでヒルズへ行ってから9年。ここに通うことになるとは思いもしませんでした。 今後の仕事 仕事は変わらずサーバ周りの運用・パフォーマンス改善、スケーラビリティの向上です。

  • Taobaoが公開しているnginxベースのWebサーバ Tengine の health check 機能 を試す - blog.nomadscafe.jp

    Tengineはアジア最大級のECサイト「淘宝網」が公開しているWebサーバです。 The Tengine Web Server alibaba/tengine Nginxをベースにいくつかの機能拡張を行い、また開発も続いていて最新のstableバージョンに追従しているようです。 主な機能拡張は上記のサイトにも上がっていますが、興味があるところを上げると、 nginx-1.6.2をベース。nginxと100%互換性がある ダイナミックなモジュールの読み込みをサポート。モジュールの追加にTengineの再ビルドが必要ない SO_REUSEPORT をサポート。接続がnginxの3倍高速化 SPDY v3をサポート upstreamの負荷分散方式の追加。consistent hashやsticky session、upstreamのヘルスチェック、リクエスト処理中のホスト名の名前解決 acce

  • derivedがプラグインアーキテクチャになってGrowthForecastに直接POSTできるようになったので、Javaのヒープのモニタリングをしてみた - blog.nomadscafe.jp

    「数字を出力するコマンドを定期的に実行して、秒間の変化量を memcachedプロトコルで取れるサーバを書いた」で紹介した、derived。memcahcedプロトコルで外からアクセスするだけじゃなくて、GrowthForecastに直接ポストできたら便利だなと思ったので、構成見直してプラグインでデータの出力方法をカスタマイズできるようにした。 CPAN: https://metacpan.org/release/App-derived github: https://github.com/kazeburo/App-derived 今まで $ derived -i 10 --port 12306 cmdsfile だったのが、 $ derived -i 10 -MMemcahced,port=12306 cmdsfile と -M でプラグインを読み込むようになります。何もプラグインを指定

  • CentOS 6.5にDockerいれてGrowthForecastを動かしてみた - blog.nomadscafe.jp

    ちょっとずつ試してる。環境は以下。 MacOS X 10.8 VirtualBox 4.3.2 Vagrant 1.3.5 Packer v0.4.0 packer でCentOS6.5のイメージを作る まず、packerを使ってCentOS 6.5のイメージを作るところから。テンプレートはgithubにあげてます。 $ git clone https://github.com/kazeburo/my_packer.git $ cd my_packer $ packer build centos6.5.json テンプレートは https://github.com/hnakamur/my-packer-template-files を参考にさせて頂きました。 このあとの作業が楽になるようにCentOS 6.5をインストールしたあとに、yum groupinstall "Developmen

  • ISUCON3 で優勝してきました!!! #isucon - blog.nomadscafe.jp

    いやぁ、、ほっとした。予選はこっちのblogに書かないぐらい惨敗した気分だったのでよかった。勝たなければ「LINE選抜大した事無い」とか「元出題者wwww」とか言われるし、勝ったら「#茶番」とか言われる立場でしたが、まじほっとしました。やったぁぜぇぇえぇえ!!! (写真は http://isucon.net/archives/33919770.html から引用) チームは、@tagomorisさん、@sugyanさんとの「LINE選抜チーム」です。お疲れ様でした!! isucon3戦いってきた&勝ってきた! #isucon - tagomorisのメモ置き場 #isucon 2013で優勝しました - すぎゃーんメモ 最終的なコードや設定などはこちらのリポジトリ 予選で学んだこと 予選のときは、開始直後からアプリケーションをみて明らかに重そうなところから手をつけていって、序盤からスコア

    overlast
    overlast 2013/11/11
    おめでとうございます〜
  • 僕らがmemcachedのキャッシュキーにsha1やmd5のhash値を使うを避ける理由 - blog.nomadscafe.jp

    memcachedのキャッシュキーにsha1やmd5のhash値を使うとtcpdumpや解析ツールで覗きにくくなるので、cacheには出来るだけわかりやすい名前をつけて下さい。というハナシ 下のようなコードのように sub cache { state $cache = Cache::Memcached::Fast->new({ namespace => 'db:', }); } sub key { my ($self,$key) = @_; sha1_hex($key); } sub cached_member { my ($self, $member_id) = @_; my $key = $self->key('member:'.$member_id); my $member = $self->cache->get($key); if ( !$member ) { #DBから取得 }

  • MySQLの設定ファイル my.cnf をgithubにて公開しました & チューニングポイントの紹介 - blog.nomadscafe.jp

    YAPC::Asiaのスライドで予告していた通り、実際に弊社のいくつかのサービスで使っている my.cnf を公開しました。 github: https://github.com/kazeburo/mysetup/tree/master/mysql 今回、公開した理由はMySQl Beginners Talksの発表の中でも触れている通りです。MySQLのソースコード中に含まれるサンプルのmy.cnfが最近のサーバハードウェアや運用に合わなくなって来ているという状況で、自分の設定にイマイチ自信が持てていない人は少なくないはず。そこで各社秘伝のタレ的な my.cnf をOpen & Shareすることで、モダンなmy.cnfを作り上げる事ができるんじゃないかという考えの下、今回 github にて公開しました。 ファイルは4つあり、それぞれ MySQL 4.0、5.1、5.5、そしてテスト中

    overlast
    overlast 2012/10/06
    kazeburoさんによる秘伝のタレ的な my.cnf のシェア
  • Webアプリケーションエンジニアはノマドであれ(特定のサーバに依存しない方法) - blog.nomadscafe.jp

    弊社では毎週水曜日はノーエンジニアデーなので、最近はMacbook AirとWIMAX持って外で仕事しています。意外と快適ですが、ここで書くのはサーバの使い方の話です。 ときおり、次のような状況に遭遇することがあります。 開発環境して使っているけど、セットアップをどのように行ったか残っていないので、新サーバへ移動できない 番環境だけど、セットアップをどのように行ったかわ(ry デプロイ元/管理ツールサーバとして使っているので古いサーバだけど捨てることができない DBがどこから参照されているか管理できていないので、サーバの入れ替えが困難 コードがどこから参照が把握できていないので、容易にサーバ構成の変更ができない 椅子^H^H 一度設置したサーバの移動なんてなかなかすることないと思う人はいるかもしれないけど、サーバが何の警告もなしに突然壊れて入れ替える必要がでてくるのはもちろん、インフラ技

  • OrePANとcpanmでCPANの部分ミラーを作ってCPANモジュールを管理する - blog.nomadscafe.jp

    これまでサービスで使うCPANモジュールの管理と言えばrpm/debパッケージが主流だと思いますが、最近ではperlbrewで使いたいバージョンのperlをインストールすることもあり、rpm/debでは対応できなくなってきています。 perlbrewのperlに対してプロジェクトが依存しているCPANモジュールを入れる際、 $ perlbrew switch perl-5.12.3 $ cd /path/to/MyProj $ perl Makefile.PL $ cpanm --installdeps . などと cpanm —installdeps が使えます。 しかし、これではサーバを新規セットアップするたびに、最新のモジュールが入ることになりサーバ間でモジュールのバージョンの差異が生まれる可能性があります。 そこで対応策として考えられるのが開発サーバで—installdepsを実行

  • 株式会社ライブドアに入社しました - blog.nomadscafe.jp

    先月末にミクシィを退職し、6月1日より株式会社ライブドアにて働かせていただくことになりました。 出社日2.0日目的な意味で。 ライブドアには以前からの知り合いのエンジニアも多くいたり、先月にはJPAの代表の牧さんが(再)就職をしていたり、同日入社にはアノPerlエンジニアもいます。それぞれが高い技術をもっている楽しみな職場です。ライブドアでの主な業務内容は前職に引き続きシステム運用を見ることになります。 Blogをはじめとするlivedoorのメディア、サービスを運用やスケーラビリティといった立場から支えて行きたいと思いますので、これからもよろしくお願いします。

  • 株式会社ミクシィを退職しました - blog.nomadscafe.jp

    昨日tweetした通り、株式会社ミクシィを退職しました。正確には今月末までとなり、今は少ない有給消化期間です。次の会社は既に決まっていて、6月1日から新しい会社となります ミクシィにはちょうど4年間在籍しました。その間mixiはPVにして10倍以上という驚異的な成長をし、会社としてのミクシィも上場をするなどさまざまな経験をさせて頂きました。 自分だけでやったことではなく、もちろん他のエンジニアの協力のもとで行ったことですが、4年間の間に自分のミクシィでやっていたことをBlog等ですでに紹介したものを中心にいくつか書くと アプリケーションレベルでのDBのフェイルオーバ Apache modproxybalancerの導入 デプロイツールの作成 サーバ設定のバージョン管理化 Squid COSSの検証導入 プロフィール画像などSquid CARPを利用した分散構成対応 Nginxの検証 Var

  • PSGI/Plackで非同期 Web Server - blog.nomadscafe.jp

    PSGI/Plackにおいて、非同期にレスポンスが返せるstreamingという仕様/機能が追加されました。 PSGI/Plack streaming is now complete これを使うと、streamingをサポートしたサーバから非同期/nonblockingにhttpやGearmanを利用して外部へ問い合わせを行い、その結果をレスポンスしたりできます。 また、これがPlackで既に実装済みなので、非常に短いコードでサーバの実装ができちゃいます。 すばらしいですね。 すでにmiyagawaさんが、この機能を利用した非同期Web Framework「Tatsumaki」を書かれています。 イベントを扱う部分が隠蔽されているので、これを使うとさらに簡単に実装できます。 すばらしすぐる。 ここでは、簡単に外部へAnyEvent::HTTPを用いて、HTTPリクエストを行うサンプルを書い

  • HTML::Template::Pro : blog.nomadscafe.jp

    HTML::Template::Pro HTML::Template::Pro HTML::TemplateのXS版。HTML::Templateと比べて、10倍〜25倍早いらしい。mod_perlでも効果あるようだ。 HTML::Template::Pro loads, parse and outputs template on fly, when you call $tmpl->output(), in one pass. The corresponding code is written in C and glued to Perl using Perl+XS. As a result, comparing to HTML::Template in ordinary calls, it runs 10-25 times faster. Comparing to HTML::Templ

  • lighttpd vs Perlbal : blog.nomadscafe.jp

    lighttpd vs Perlbal lighttpdのlinux-aioサポートの記事を読んでいて気になったので、既にaioをサポートしているPerlbalの静的コンテンツを配信するWebサーバとしての性能を調べてみた。 サーバは CPU Pen4 2.8GHz ( HyperThreading付き) Memory 512MB FedoraCore6 な環境です。 上記の記事の様にファイルを3GBほど作成(メモリーより明らかに多い量) 小さい画像ファイルと見立てて、3KBのファイルを10*100*1000=1M個作成しました。 #/bin/bash for i in `seq 1 10`; do for k in `seq 1 100`; do mkdir -p $i/$k; for j in `seq 1 1000`; do dd if=/dev/zero of=$i/$k/$j b

  • Squid2.6 のCOSSがいい感じ : blog.nomadscafe.jp

    Squid2.6 のCOSSがいい感じ Squidの比較的新しいcache_dirのCOSSが結構いい感じに動いている。 COSSだと、cache objectが1つの大きなファイルに納められるので、ディスクIOがかなり改善しています。 あまり情報がないのですが、Wikiに設定の説明と、aufsとの比較とかがあります。 cache_dir coss /var/spool/squid/coss 30000 block-size=2048 max-size=500000 cache_swap_log /var/spool/squid/%s こんな感じの設定のサーバで、cache個数 50万ファイル以上、最大リクエスト数500req/sec以上、Hit rateが99%の状態において、CPU負荷がUser:数%、iowait:1%弱とかで推移。もうちょっとcache個数の多いサーバでもiowai

  • Deployツール : blog.nomadscafe.jp

    Deployツール 会社でYAMLでDeployのPlanを書いて、実行できるDeployツールを作成中 common: proxies: - proxy1 - proxy2 plans: - name: mod_proxy concurrency: 2 base: ModProxy method: - rsync - httpd_graceful rsync_exclude: - .svn/ rsync_src: /mod_proxy rsync_dest: /var/proxy hosts: c{proxies} - name: mod_perl concurrency: 1 base: ModPerl method: - proxy_drop - httpd_stop - rsync - httpd_start - proxy_add balancers: c{proxies} ba

  • Load Balancer ManagerにアクセスするPerl Module : blog.nomadscafe.jp

    Load Balancer ManagerにアクセスするPerl Module mod_proxy_balancerのLoad Balancer ManagerにアクセスするPerl Moduleなんかも作っていたりするので、簡略版を載せてみる。 my $manager = BalancerManager->new( manager => 'http://proxy/lbman', balancer => 'test', # balancer://testの設定 ); $manager->enable('http://foo:8000'); #balancermanagerに登録してあるuri $manager->disable('http://foo:8000'); enable/disableの戻り値は画面のまんまで、Ok or Dis or Err。 該当しない場合は、「-」になる。

  • mod_proxy_balancerのretry : blog.nomadscafe.jp

    mod_proxy_balancerのretry mod_proxy_balancer(mod_proxy)のretry設定は、 コネクションをプーリングするための、リトライのタイムアウトを秒で 指定します。バックエンドサーバへのコネクションプーリングが失敗した場合は、 タイムアウトの期間が過ぎるまで、そのサーバにリクエストをフォワードしません。 というもので、 BalancerMember http://1.2.3.6:8000 retry=60 loadfactor=10 こんなように書ける。 アプリケーションサーバにデプロイするときに、 httpdの停止 rsync httpdの開始 という順番で行うのが通常だと思うけど、デフォルトのretry間隔が60秒になっているため、httpdを開始してからアクセスがバックエンドに届くには、最大1分間待たなければならない。 バックエンドのサーバ

  • Stacktrace付きdie : blog.nomadscafe.jp

    Stacktrace付きdie ログをもう少し詳しくしたいなぁと思って調べていて、Error.pmのソースで気がついたんけど、 eval { die Foo->new; } warn ref $@; #Foo が使えるんですね。 Sledge::Plugin::DebugScreenとか、CGI::Applicationだと$self->{__stacktrace}で情報を保存しているけど、$@を利用してstacktrace情報を受け渡すことができるよな、と考えたので書いてみた package MyApp::Exception; use strict; use warnings; use base qw/Class::Accessor::Fast Exporter/; use Devel::StackTrace; use overload '""' => 'as_string'; __PA

  • 「Class::DBI で疑似的カラム」をちょっと機能強化と、Class::DBIにStorable::freezeなデータ : blog.nomadscafe.jp

    「Class::DBI で疑似的カラム」をちょっと機能強化と、Class::DBIにStorable::freezeなデータ nipotanさんの「Class::DBI で疑似的カラムを扱う」で(自演)紹介されてるClass::DBI::Plugin::PseudoColumnsなんですが、ObjectやHASHをStorableでSerializeしてデータベースに突っ込む方法を便利にできるプラグインとしてちょっと気になった。 ただ、2つほど弱点があって create/insert時に使えない SerializeがData::Dumperオンリー このあたりが解決されると使いやすいと思うのでいじってみた。 podを書いてないんだけど、ソース一式はこちら→Class-DBI-Plugin-SerializeColumns-0.01.tar.gz。なかなかうまく動かなくていろいろ変更している

    overlast
    overlast 2006/05/13
    Storableをblob型につっこむ