タグ

ブックマーク / frsyuki.hatenablog.com (31)

  • リトライと冪等性のデザインパターン - Blog by Sadayuki Furuhashi

    リトライを肴に一晩酒が飲める古橋です。 大規模なデータに触れることが日常茶飯事になっている今日この頃。この分野のおもしろいところは、いつまで経っても終わらないプログラムを簡単に作れてしまうことかもしれません。エラー処理、リトライそして冪等性*1の3つを抑えていないプログラムは、小規模なデータなら問題ないが、データ量が多くなると使い物にならなくなる可能性が大です。 大規模データをバッチ処理するケース以外でも、リトライは一般にプログラムの信頼性に関わる重要な問題です。 そんなわけで、リトライに関わるいくつかのデザインパターンを、連載でまとめておこうと思います*2。 では、第1回は背景から: なぜリトライが必要なのか プログラムは色々な理由で失敗する。例えば、 A) 通信先のプログラムが高負荷すぎて応答できなかった B) メモリを消費しすぎてメモリ確保に失敗した。またはOOM KIllerに殺さ

    リトライと冪等性のデザインパターン - Blog by Sadayuki Furuhashi
  • Webサイトをgithubで管理してpush時に自動的に同期する方法 - Blog by Sadayuki Furuhashi

    Webサーバに Subversion のサーバを立てておき、HTMLCSS を commit することでWebサイトを更新する方法は、良く知られているテクニック、らしいですね*1。更新の履歴を残すことができるし、ましてチマチマとFTPやsftpでアップロードするよりずっと簡単です。 しかし SVN の代わりに git を使おうとすると、pushしてもリポートリポジトリではファイルを更新してくれません。 また、リポジトリはWebサーバ上に作るよりも、便利な管理インタフェースがある github(や噂のgitosis)に置いておきたいところです。 そこで、github の Post-Receive Hook を使うと、リポジトリに変更を push すると同時に、Webサーバにも同期させることができます*2。 Webサーバに同期する前に、Sphinxでドキュメントを整形したり、SassをC

    Webサイトをgithubで管理してpush時に自動的に同期する方法 - Blog by Sadayuki Furuhashi
  • Amazon EC2 で手元のホストとファイルを共有する - Blog by Sadayuki Furuhashi

    Amazon EC2 はVMを好きなタイミングで好きなだけ使うことができるので、複数のサーバを使う分散システムの検証環境として非常に使いやすい*1。費用を計算してみても、自宅でクラスタを動かすことを考えれば、十分安く上がりそうである。 しかし、VMを起動するたびに環境を設定したり、新しいテストを実行するたびにファイルを配ったりするのは面倒なので、ファイルを共有したくなる。 通信の遅延がかなり大きいので、EC2上でssh越しにファイルを編集するのも少々つらい。 そこで、手元のホストとホームディレクトリを共有する。さらに、一度転送したデータはキャッシュさせる。 共有ホームディレクトリ環境の管理方法と組み合わせれば、便利に使えるに違いない。 戦略 ファイル共有には NFSv4 over ssh を使う。NFSv4はポート番号を1つしか使わない(portmapperも要らない)ので、ssh越しで使

    Amazon EC2 で手元のホストとファイルを共有する - Blog by Sadayuki Furuhashi
  • WebSocketサーバライブラリ rev-websocket リリース - Blog by Sadayuki Furuhashi

    いま WebSocket がにわかに注目を集めているようです。 ブラウザとサーバの間でリアルタイムな双方向通信を実現する機能で、HTML5に追加された(される予定の)新しい仕様です。 このWebSocketを使うには、ブラウザ側のJavaScriptの記述だけでなく、サーバ側の実装も必要になります。 そこで、Rubyで使えるWebSocketのサーバライブラリ rev-websocket をリリースしました。 gemでインストールできます:gem install rev-websocket 早速、デモアプリケーションを作ってみました:シャウッたー *1 WebSocket を使ったチャットシステムに、ちょっとした演出を加えたシンプルなアプリケーションです。速くタイプするほど大きく表示されるという趣向です^^; WebSocket に対応しているブラウザは今のところ Safari と Chr

    WebSocketサーバライブラリ rev-websocket リリース - Blog by Sadayuki Furuhashi
  • kumofsから学ぶNot only SQLの技術 - Blog by Sadayuki Furuhashi

    NoSQLを知る〜kumofsから学ぶNot only SQL技術 と題して、Developers Summit 2010で発表しました。 twitterの#devsumi2010 kumofsを見る限りでは大変ご好評をいただいたようで、ひとまずほっとしています。 プレゼンテーションの資料を公開しました。内容はどれも同じですが、クリックで進むムービー版がオススメです。 クリックで進むムービー(クリック/矢印キーで進む) PDF Keynoteファイル(Keynote '09が必要) NoSQLを知るView more presentations from frsyuki. Consistent Hashingとdouble-hash-spaceアルゴリズムの紹介は、68ページ以降にあります。 第101回 カーネル読書会 2月25日に楽天タワーで行われるカーネル読書会でも、kumofs関連

  • kumofsはなぜ落ちないか - Blog by Sadayuki Furuhashi

    前回は、kumofsはなぜスケールするかということについて紹介しました。その中で最後に、耐障害性もスケーラビリティにとって重要だーと述べました。 そこで今回は、kumofsはなぜ落ちないのか、なぜ耐障害性が高いと言えるのかーということについて紹介したいと思います。 分散システムはテストが難しいことに定評がありますが(たぶん^^;)、その中でも耐障害性の検証は最上級に困難な部類です。 耐障害性は実際のところ、アルゴリズムの設計以前に実装上のバグが大きく影響するので、設計上は耐障害性が高いと言っていても、実際に使ってみると良く止まるという話はありがちな話です。(個人で開発している場合など、開発リソースが小さい場合はなおさら) そのため耐障害性の高いシステムを実現するためには、実装しやすくバグが入り込みにくい設計も重要かなーと思います(もちろん、アルゴリズムも重要ですが)。 分散システムには複雑

    kumofsはなぜ落ちないか - Blog by Sadayuki Furuhashi
  • kumofsはなぜスケールするか - Blog by Sadayuki Furuhashi

    先日、分散Key-valueストア kumofs を公開しました。 多く方から反響とフィードバックをいただいています。ありがとうございます。 今回は、kumofs はなぜスケールするのか、なぜスケールすると言えるのかーということについて紹介したいと思います。 ところでスケーラビリティとは何か? スケーラビリティとは、利用者や仕事の増大に適応できる能力・度合い とされています(端的!)*1 。Scalability を日語にすると、拡張性 と訳されるようです。 ただ一口でスケーラビリティと言っても、様々な側面があります。ITシステムでは主には処理性能と運用に関することを指す場合が多いと思いますが*2、その中にも様々な側面があります。 なぜスケーラビリティが必要か スケーラビリティは システムなどが持つべき望ましい特性 であって、高いに越したことはありません。しかし、高いスケーラビリティはタ

    kumofsはなぜスケールするか - Blog by Sadayuki Furuhashi
    rx7
    rx7 2010/01/27
  • kumofs関連資料まとめ - Blog by Sadayuki Furuhashi

    随時更新予定。 ツールなど 2010-01-08 kumofsの死活監視はこんな感じでNagiosでやってます - (ひ)メモ 検討と検証 2010-04-01 kumofsに10MBのvalueを入れるとどうなるか実験してみた - sdyuki-devel 2010-02-24 KVS(NoSQL)のまとめと「これから」の設計手法 - どっかのBlogの前置きのような 2010-02-01 kumofs その4・速度比較してみた - とあるWEBプログラマの軌跡(仮) 設計とアーキテクチャ 2010-04-26 hbstudy#10「ずばり動く!kumofs と ずばり動かないケース」 2010-04-25 丸レク2010「分散Key-valueストアkumofsの思想と設計」 2010-02-09 kumofsはなぜ落ちないか 2010-01-26 kumofsはなぜスケールするか 2

  • 分散Key-Valueストア「kumofs」を公開しました! - Blog by Sadayuki Furuhashi

    分散Key-Valueストア kumofs を、日オープンソースソフトウェアとしてリリースしました! kumofs@SourceForge kumofs関連資料まとめ kumofsとは? kumofs(クモエフエス)は、実用性を重視した分散データストアです。レプリケーション機能を備え、一部のサーバーに障害が発生しても動作し続けます。単体でも高い性能を持ちながら、サーバーを追加することで読み・書き両方の性能が向上する特徴を持ち、低コストで極めて高速なストレージシステムを構築・運用できます。 kumofsの大きな特徴は、システムの構成の簡単に変更できる点です。システムを止めることなく、簡単な手順でサーバーを追加したり復旧したりできます。アプリケーションには一切影響を与えません。 またkumofsは、広く利用されている分散キャッシュシステムの「memcached」と互換性のあるプロトコルを実装

    分散Key-Valueストア「kumofs」を公開しました! - Blog by Sadayuki Furuhashi
  • 54行で分散KVSを実装する(レプリケーション機能付き) - Blog by Sadayuki Furuhashi

    Ruby と MessagePack-RPC があれば、簡単なkey-valueストレージは簡単に作れます。54行で書けます(レプリケーションと負荷分散機能付き。サーバー38行、クライアント16行)。 簡単なKVSをベースにして、ログ集計や遠隔デプロイ、遠隔管理機能などの機能を追加していけば、ちょっと便利なサーバープログラムをサクサク自作できるハズ。 この分散KVSは、(keyのハッシュ値 % サーバーの台数)番目のサーバーにkeyを保存します。また、サーバーの名前順でソートしたときの「次のサーバー」と「次の次のサーバー」にデータをレプリケーションします。 すべてのサーバーで同じ設定ファイルを使います。サーバーごとの設定は引数を自分のホスト名に書き換えるだけなので、デプロイが容易です。 MessagePack-RPC for Ruby を使うと、分散しないkey-valueストレージ*1は

    54行で分散KVSを実装する(レプリケーション機能付き) - Blog by Sadayuki Furuhashi
  • Interopクラウドコン優勝は「えとらぼ」分散key-valueストレージ kumofs - Blog by Sadayuki Furuhashi

    InteropTokyo 2009 クラウドコンピューティングコンペティション(通称クラウドコン)は、我等がえとらぼチームが優勝しました! 実行委員・StarBEDプロジェクト・IBMの皆様を始め関係者の皆様、ありがとうございました。 プレゼンテーションムービーとポスターとパンフレット*1を公開しました。 プレゼンムービー(マウスクリック/矢印キーで進む) PDF版 ポスター パンフレット *2 …どれも相当に気合いが入っているので、ぜひご覧ください^^ Ustream.tvの録画もあります(えとらぼチームはちょっと細切れですが) 途中で行ったデモは、StarBEDの45台の物理サーバーを使ってkumofsを動かして、ランダムで選んだノードを自動的にkill/再起動するスクリプトを走らせたものです。サーバーが落ちてもシステムは全然止まらないし、どのサーバーにも均等に負荷が分散されます。 時

    Interopクラウドコン優勝は「えとらぼ」分散key-valueストレージ kumofs - Blog by Sadayuki Furuhashi
  • Sun は Oracle に買収されますが - Blog by Sadayuki Furuhashi

    Oracle Buys Sun Overview and Frequently Asked Questions OpenSolaris.orgで進められている数々のプロジェクトは、ぜひ継続して欲しいものです。 "Sun" を偲びつつ。 Hadoop Live CD 仮想サーバー(Solaris Zone)を立ち上げて3ノードのHadoopクラスタを構築する Live CD。もちろんOSはOpenSolaris。 Hadoopを使ったアプリケーションの開発を始めるのにちょうど良さそうです。 Live CD と言えば、知る人ぞ知るBusyboxと同等のものをOpenSolarisでも実装しようというプロジェクトがあるようです: OpenSolaris Busybox OpenSolaris Squashfs Open High Availability Cluster Linuxで言うところの

    Sun は Oracle に買収されますが - Blog by Sadayuki Furuhashi
    rx7
    rx7 2009/04/21
  • Safari 4 より bash 4 が気になる - Blog by Sadayuki Furuhashi

    bash-4.0がリリースされたので早速試す。 $ sudo port sync $ sudo port deactivate readline $ sudo port install bash $ bash NEWS CHANGES autocd ディレクトリ名を入力だけでcdする。 $ shopt -s autocd $ / cd / cdspell cdするときディレクトリ名をよしなに修正する。 $ shopt -s cdspell $ cd /user/inclde<Enter> cd /usr/include dirspell 補完するときディレクトリ名をよしなに修正する。 $ shopt -s dirspell $ vi /user/inclde<Tab> $ vi /usr/include/ globstar globで**が使える。 $ shopt -s globstar

    Safari 4 より bash 4 が気になる - Blog by Sadayuki Furuhashi
    rx7
    rx7 2009/02/25
  • 音声チャットをはじめよう! - festivoice.net オープン - Blog by Sadayuki Furuhashi

    気軽に多人数の音声チャットが始められるサービスfestivoice.net(フェスティボイス)をオープンしました! festivoice.net festivoice.netの始め方 festivoiceはfestival(祭)とvoice(声)を組み合わせた造語です。ユーザー登録が不要で、誰でも簡単に始められます。 ミーティングに ペアプログラミングに IRCのお供に ちょっとしたおしゃべりにも そして新しい出会いにも 文字だけではうまく伝わらないことは、とてもよくあります。そんなときにfestivoice.netを試してみてください。 festivoice.netのシステムはオープンソース*1で公開しています。社内のサーバーや自分のノートPCに入れて使うことができます。「ちょっと音声チャットができるといいなー」と感じていたら、ぜひ導入してみてください。 festivoiceサーバーの導

    音声チャットをはじめよう! - festivoice.net オープン - Blog by Sadayuki Furuhashi
  • memstored 0.1 = memcached + mpio + Tokyo Cabinet - Blog by Sadayuki Furuhashi

    memstored は memcached のバイナリプロトコルをサポートしたハッシュストレージサーバーです。IO戦略ライブラリmpio の信頼性と性能をテストするために開発しました。 IOに mp::iothreads を使用し、バックエンドには Tokyo Cabinet の抽象データベースAPIを利用しているため、高速でスケーラビリティが高く、かつ柔軟性の高いアーキテクチャになっています。プログラムの大部分はライブラリによって実現されているため、プログラム全体の見通しが良く、行数で見ても非常に小さく収まっています。 SVN (memstored): http://svn.coderepos.org/share/lang/c/memstored/trunk SVN (mpio): http://svn.coderepos.org/share/lang/c/mpio/trunk パッケー

    memstored 0.1 = memcached + mpio + Tokyo Cabinet - Blog by Sadayuki Furuhashi
  • memcached binary protocol - Blog by Sadayuki Furuhashi

    先日memcached Night in Tokyo #1に参加してきました。レプリケーションがアツイ。バイナリプロトコルがアツイ。 というわけでバイナリプロトコルのマイクロベンチマークをしてみました。 テストしたのは家memcachedではなく、私が勝手に作ったストリームパーサです(すべてのプロトコルには対応していません)。get("key$i") と set("key$i", "value$i") を5,000,000回ずつリクエストしたときのプロトコルをファイルに保存しておき、mmap(2)してパースしました。 パーサとベンチマークに使ったプログラム一式はmemcached-protocol-bench.tar.gzからダウンロードできます。 AMD Athlon 64 X2 5000+, Memory 4GB Linux 2.6.22.9 SMP x86_64 gcc 4.2.2

    memcached binary protocol - Blog by Sadayuki Furuhashi
  • マルチコア時代の高速サーバーの実装 - Blog by Sadayuki Furuhashi

    特にサーバー用途では、CPUがシングルコアに戻ってくることは考えにくい。 マルチコアCPUの性能を活かすにはマルチスレッドに対応したサーバーの実装が必要になるわけですが、マルチスレッドなプログラミングは往々にして「高負荷になると固まる」とか「たまに落ちる」といった悩ましいバグと戦わなければならず、イヤです。 かといってシングルスレッドでは、近い将来 32コアCPU! などが出てきたとき、たぶん性能を発揮できません。 そこで、そこそこデバッグしやすく、それでいて多コアCPUでもスケールするという落としどころを模索しているのですが、ボトルネックはネットワークIO周りにあるだろう*1という前提の元で、ネットワークIO部分だけをマルチスレッドで動かし、それ以外の部分をシングルスレッドで動かすというアーキテクチャを考えています。 ロジックの部分はマルチスレッドで書いても共有リソースにアクセスする度に

    マルチコア時代の高速サーバーの実装 - Blog by Sadayuki Furuhashi
  • Proxy DHCPを使ってネットワークブートサーバーを構築する - Blog by Sadayuki Furuhashi

    pxe-pdhcpはProxy DHCPサーバーの実装です。Proxy DHCPはPreboot Execution Environment (PXE)というネットワークブートの標準規格を使ってディスクレスコンピュータをネットワークブートする際に使います。ディスクレスコンピュータは簡単に増やしたり交換したりできるので、シンクライアントやHPCクラスタ、ロードバランサの裏に置く実サーバーなどを簡単に用意することができるようになります。 Proxy DHCPサーバーは別のホスト上で動いているDHCPサーバーと連携して動作します。DHCPサーバーはIPアドレスを割り振り、Proxy DHCPサーバーは Network Bootstrap Program (NBP。ブートローダーのようなものです) の位置をネットワークブートクライアントに通知します。クライアントはNBPを取得するのにTFTPを使う

    Proxy DHCPを使ってネットワークブートサーバーを構築する - Blog by Sadayuki Furuhashi
  • vimしか使えない - Blog by Sadayuki Furuhashi

    vimを使おう - ウノウラボ vimerとしては、こういう記事を見つけてしまうと黙っていられないわけです。vimerと言っても、私はhjklがどうしても慣れずに矢印キーを使ってしまう軟弱vimerですが。 そんなわけで、私もちょっとしたvimのtipsを紹介したいと思います。 私が使っているvimのバージョンはvim 7.0なので、vim 6.xでは動かない機能があるかもしれません(特に補完のあたり)。そう言う場合は、vim 7.0をコンパイルして入れましょう。(そのときはvimshellのパッチを是非…vimshellはvim>7.0-0には当たらないので注意) バックアップファイルの保存先 まずは地味なところから。 vimでファイルを編集すると、そのファイルと同じディレクトリに「~」が末尾に付いたバックアップファイルと、同じように「.swp」が付いたファイルが作られますが、これがなか

    vimしか使えない - Blog by Sadayuki Furuhashi
  • Aerial over Comet - Blog by Sadayuki Furuhashi

    Aerial(エアリアル) - Ajax/Cometの次を行く リアルタイム双方向RPCのトラックバックより引用: 次世代Webアプリケーション基盤技術 - 個人的まとめ他 これは当に非常に素晴らしい。 ただ、Flash・サーバ間の通信がHTTPじゃなく、Socket(独自プロトコル over TCP)なのが最大の欠点になってしまうと思う。 似たことが出来るAdobeのBlazeDSの最大の利点はやっぱりHTTPで通信してるところなんだと思うし。 BlazeDSどうでしょう - 無題 @ はてな このエントリの通りFlex3でExternal Interface使ってフレームワークとして整えてあげればHTTP版Aerialが完成なんじゃなかろうか。 もしくはサーバをCometにして、Flash側でそれをうまいことラッピングしてプロトコル意識させないようにするとか。 そこで、「サーバーをC

    Aerial over Comet - Blog by Sadayuki Furuhashi