kai-devel-ja Mailing List for kai (Page 3)
Kai is a distributed key-value datastore
Status: Beta
Brought to you by:
takemaru
You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(14) |
Jun
(95) |
Jul
(94) |
Aug
(44) |
Sep
(5) |
Oct
(8) |
Nov
(14) |
Dec
(6) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
|
Feb
(18) |
Mar
(19) |
Apr
|
May
(11) |
Jun
(8) |
Jul
(4) |
Aug
|
Sep
(3) |
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Takeru I. <tak...@gm...> - 2009-02-25 23:39:38
|
井上です. どれも決定的な欠点はないように思うので,幾田さんが書きやすい方法でいいような気がします. 階層化の呼び出しはこんな風にするんですよね. kai_tcp.sup:start() ちょっと読みにくいですが (慣れないだけだと思うけど),実際上の問題はないですよね. すでに,kai_store が複数モジュールで構成されているので,そういう場合のルールを統一していった方がいいですね. 今後も増えることを考えると,実験的という気もするけど,階層化してった方がいいのかなぁ. 2009/2/26 masahito ikuta <coo...@gm...>: > 皆様 > > 幾田です。 > お疲れ様です。 > > kai_tcp_server のモジュール構成について > ご相談があり、メール致しました。 > > kai_tcp_server に Monitor 用の gen_server を追加しようとしたのですが > supervisor のコールバック関数 init/1 と > gen_server のコールバック関数 init/1 が > モジュール内で重複してしまいました。 > > 一応、引数のパターンマッチで逃れられるのですが > そろそろファイル分割の時期なのかもしれないとも考えております。 > 如何でしょうか? > > > 案1.分割しない > ファイルのポータビリティを重視し、分割しないのもありだと考えております。 > 最終的なコード行数は、300 行程度になる予定である為 > まだ、分割しなくとも良いかもしれません。 > > > 案2.振る舞い毎にモジュールを分割 > 具体的には、下記のような構成を考えております。 > > kai_tcp_server.erl (他のモジュールから呼ばれる I/F を配置) > kai_tcp_server_sup.erl > kai_tcp_server_monitor.erl > kai_tcp_server_acceptor.erl > > kai_tcp_server を利用する他のモジュールに > 「起動したい場合は sup の関数を使う」 > 「接続中のプロセスの個数を知りたい場合は monitor の関数を使う」 > とモジュール名を選択させるよりは > kai_tcp_server に I/F を集中させてしまった方が > 良いのではないかと考えておりますが > 如何でしょうか? > > > 案3.パッケージを使う > Scalaris くらいでしか見かけないのですが > パッケージを階層化する方法もあります。 > (http://www.erlang.org/doc/man/packages.html) > > ファイルの構成は、下記を考えております。 > kai_tcp_server.erl > kai_tcp_server/supervisor.erl > kai_tcp_server/monitor.erl > kai_tcp_server/acceptor.erl > > 個人的には、案2で良いかとも思いますが > パッケージを使う事で src ディレクトリ配下が > 見通しが良くなるような気もしています。 > 如何でしょうか? > > > お手数ではございますが > ご意見の程、何卒よろしくお願い致します。 > > > 2009/2/18 masahito ikuta <coo...@gm...>: >>>> Monitor が {'DOWN', MonitorRef, Type, Object, Info} を受信した場合 >>>> erlang:demonitor/1 でモニタリングを解除し >>>> デクリメントの処理を行ないます。 >>> >>> どのようなときに DOWN が送られるんでしたっけ? >> >> erlang:monitor/2 で登録したプロセスが >> 何らかの事情で停止すると、DOWN メッセージを受信します。 >> >> Monitor の trap_exit に true を設定しておけば >> erlang:link/1 を利用しても良いのですが >> こう言う用途では、erlang:monitor/2 が妥当ではないかと考えました。 >> >>>> <デメリット> >>>> Monitor が落ち、Supervisor により再起動されると >>>> erlang:monitor/2 を、やり直す必要があります。 >>> >>>滅多にないと思うので,warning メッセージを残しておけばいいのかなぁ. >>> >>>> gen_server である為 >>>> tarminate/2 で State を引き継げそうなので >>>> 何とかなりそう? >>> >>>おぉ,なるほど. >> >> supervisor 配下の gen_server の Module:tarminate/2 の仕様を >> 正しく理解できていない状態で >> 勢いで予想を書いてしまったので(ぉぃ) >> 少し調査させてください。 >> >> ここは、あまり神経質にならずに >> 初回の make では、warning を出す事を検討してみます。 >> >> という事で、週末に案1を実装してみます。 >> >> >> 2009/2/17 Takeru INOUE <tak...@gm...>: >>> 難しいですねぇ. >>> 正直言って,どちらが良いかははっきりわからないです. >>> >>> 2009/2/17 masahito ikuta <coo...@gm...>: >>>> 煮詰まったので、ご相談させてください。 >>>> >>>>> エラーによる受信終了もすべてキャッチできれば,正しくデクリメントできると思います. >>>> >>>> 現在、kai_tcp_server の Supervisor 配下に >>>> 何らかのステータス管理用プロセスを配置する事を検討中です。 >>>> >>>> ※kai_state を kai_tcp_server 内で使うと、tcp_server が Kai に密結合しすぎかなぁと・・・ >>>> この辺りも検討の余地があると思うのですが、ちょっと、それは脇に置いておきます。 >>> >>> 密結合しすぎだし,利点もそれほどなさそうですね. >>> >>>> 案1.erlang:monitor/2 を使う >>>> >>>> supervidor:handle_info/2 で {'EXIT', Pid, Reason} をトラップしているので >>>> これをフックできれば一番楽なのですが >>>> 残念ながら、そう言う機構は Supervisor に用意されていないようです。 >>>> >>>> そこで、Supervisor の下に (Supervisor 以外の) Acceptor 死活を監視する >>>> Monitor(gen_server) を配置する事を検討しております。 >>>> >>>> 各 Acceptor は、起動時に Monitor へ自分の pid を送りつけ >>>> Monitor は、受信した pid を erlang:monitor/2 でモニタリング開始します。 >>>> >>>> 各 Acceptor は、Monitor へ >>>> accept した時点で インクリメント メッセージを >>>> accept_loop を抜けた時点で デクリメント メッセージを送ります。 >>>> >>>> インクリメント処理は、数値のカウントアップではなく >>>> 接続中リストへの Pid の追加とします。 >>>> デクリメントは、その逆です。 >>>> >>>> Monitor が {'DOWN', MonitorRef, Type, Object, Info} を受信した場合 >>>> erlang:demonitor/1 でモニタリングを解除し >>>> デクリメントの処理を行ないます。 >>> >>> どのようなときに DOWN が送られるんでしたっけ? >>> >>>> <デメリット> >>>> Monitor が落ち、Supervisor により再起動されると >>>> erlang:monitor/2 を、やり直す必要があります。 >>> >>> 滅多にないと思うので,warning メッセージを残しておけばいいのかなぁ. >>> >>>> gen_server である為 >>>> tarminate/2 で State を引き継げそうなので >>>> 何とかなりそう? >>> >>> おぉ,なるほど. >>> >>>> 案2.Mod:handle_call/3 を try catch で包む >>>> >>>> 案1と同様に、Supervisor 配下に Monitor を配置しますが >>>> 案1と異なり、Monitor は Acceptor の死活監視を行ないません。 >>>> >>>> 各 Acceptor は、Monitor へ >>>> accept した時点で インクリメント メッセージを・・・ >>>> accept_loop を抜けた際、明示的に exit/1 を実行した際、Mod:handle_call/3 で例外を catch した際に >>>> デクリメント メッセージを送ります。 >>>> >>>> <デメリット> >>>> 想定外のプロセス終了が発生した場合、対処できません。 >>> >>> try/catch って広く使われてるんですかねぇ. >>> そのあたりにもリスクがあったりするかもです. >>> >>>> 以上です。 >>>> 案1は、実装が複雑になりそうなので、二の足を踏んでおりますが >>>> 案2より案1の方が erlang っぽい為、採用の方向で検討しております。 >>>> 何か他に案があれば、ご教授頂けないでしょうか? >>>> よろしくお願い致します。 >>>> (不備のご指摘もあわせてお願い致します) >>> >>> はっきりした意見はないのですが,案1 のほうに弱めの一票を入れておきます. >>> >>>> 2009/2/9 Takeru INOUE <tak...@gm...>: >>>>>> Accept しているだけのプロセスを除いた >>>>>> 今まさにリクエストを捌いている最中のプロセス数ですよね? >>>>> >>>>> そうです. >>>>> >>>>>> 普通に内部でカウンタを保持して >>>>>> Accept 毎にインクリメントしておけば良いのでは?と >>>>>> 先ほど、気が付きました(w; >>>>>> >>>>>> 正しくデクリメントされるように作るのが難しそうですが >>>>>> これで試してみましょうか? >>>>> >>>>> そうそう,そこが課題っぽいんですよね. >>>>> エラーによる受信終了もすべてキャッチできれば,正しくデクリメントできると思います. >>>>> 時間があったらやってみてもらえますでしょうか. >>>>> >>>>>> 個人的には、quorum の方が役割をイメージしやすく感じます。 >>>>> >>>>> この方向で検討してみます. >>>>> >>>>> >>>>>> 2009/2/9 masahito ikuta <coo...@gm...>: >>>>>>>>> ざっと stats を実装してみました. >>>>>>> >>>>>>> ご苦労様です! >>>>>>> 本業が忙しすぎて、全くコミットできておらず、申し訳ありません。 >>>>>>> >>>>>>>>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >>>>>>> >>>>>>> Accept しているだけのプロセスを除いた >>>>>>> 今まさにリクエストを捌いている最中のプロセス数ですよね? >>>>>>> >>>>>>> あまり良い案は浮かばないのですが・・・ >>>>>>> >>>>>>> 案1. >>>>>>> <方法> >>>>>>> Active で Accept した際、イベントループ内で ping メッセージを受け取ると pong を返すようにする。 >>>>>>> ステータス取得時に、非同期で全 Accept 中のプロセスに ping を発行し、pong の数を数える。 >>>>>>> >>>>>>> <デメリット> >>>>>>> Active 時のみ対応となる。 >>>>>>> また、pang = タイムアウト である為、curr_connections 取得まで少し時間が掛かる。 >>>>>>> >>>>>>> 案2. >>>>>>> <方法> >>>>>>> 接続の度にプロセスを作る方式に切り替える。 >>>>>>> >>>>>>> <デメリット> >>>>>>> プロセス生成するコストを起動時に負担できない。 >>>>>>> kai_tcp_server に大幅な修正が入る。 >>>>>>> ステータス取得の為に、erlang らしさを捨てる事になる。 >>>>>>> >>>>>>> >>>>>>> んー、何か正規の方法があるかもしれないので >>>>>>> 本家 ML に質問を出しつつ、gen_tcp のドキュメントやソースを読んでみます。 >>>>>>> >>>>>>>> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >>>>>>>> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >>>>>>>> どうですかねぇ? >>>>>>> >>>>>>> 個人的には、quorum の方が役割をイメージしやすく感じます。 >>>>>>> >>>>>>> >>>>>>> 2009/2/8 Takeru INOUE <tak...@gm...>: >>>>>>>> ひとつ書き忘れました. >>>>>>>> >>>>>>>> N,R,W の設定名は,それぞれ n, r, w としています. >>>>>>>> しかし,stats のほうでは 3つまとめて kai_quorum という名前にしてみました. >>>>>>>> STAT kai_quorum 3,2,2 のようなのが返ってきます. >>>>>>>> >>>>>>>> というわけで,現時点では設定名と統計名がずれています. >>>>>>>> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >>>>>>>> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >>>>>>>> どうですかねぇ? >>>>>>>> >>>>>>>> >>>>>>>> 2009/2/8 Takeru INOUE <tak...@gm...>: >>>>>>>>> ざっと stats を実装してみました. >>>>>>>>> 取得できる統計値は kai-users-ja を見てください. >>>>>>>>> >>>>>>>>> 以下は開発者向けのコメントと相談です. >>>>>>>>> >>>>>>>>> bytes (ローカルストレージのデータ量) についてです. >>>>>>>>> ets では正確なデータ量を得ることができませんでした. >>>>>>>>> これは,ets が管理しているデータ量が,大きなバイナリを含まないためです. >>>>>>>>> とりあえず,ets が管理してるデータ量に,Erlang VM が管理している全バイナリデータ量を加算したものを返しています. >>>>>>>>> かなり大きめの値が返ります. >>>>>>>>> また,ガベージコレクションのタイミングによっては,古い値が消されても,データ量が減らなかったりするようです. >>>>>>>>> 自前でデータ量を計算した方がいいですかねぇ.. >>>>>>>>> とはいえ,ets/dets のオーバヘッド (key のためのインデックスなど) がよくわからないので,正確な値を計算することは困難だと思っているのですが. >>>>>>>>> >>>>>>>>> cooldaemon さま: >>>>>>>>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >>>>>>>>> >>>>>>>>> shino さま: >>>>>>>>> 二つのバージョンが返ってしまった数の累計は,どういう風に得るのが適切だと思いますでしょうか. >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Takeru INOUE <tak...@gm...> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Takeru INOUE <tak...@gm...> >>>>>>>> >>>>>>>> ------------------------------------------------------------------------------ >>>>>>>> Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) >>>>>>>> software. With Adobe AIR, Ajax developers can use existing skills and code to >>>>>>>> build responsive, highly engaging applications that combine the power of local >>>>>>>> resources and data with the reach of the web. Download the Adobe AIR SDK and >>>>>>>> Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com >>>>>>>> _______________________________________________ >>>>>>>> Kai-devel-ja mailing list >>>>>>>> Kai...@li... >>>>>>>> https://lists.sourceforge.net/lists/listinfo/kai-devel-ja >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> cooldaemon >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> cooldaemon >>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) >>>>>> software. With Adobe AIR, Ajax developers can use existing skills and code to >>>>>> build responsive, highly engaging applications that combine the power of local >>>>>> resources and data with the reach of the web. Download the Adobe AIR SDK and >>>>>> Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com >>>>>> _______________________________________________ >>>>>> Kai-devel-ja mailing list >>>>>> Kai...@li... >>>>>> https://lists.sourceforge.net/lists/listinfo/kai-devel-ja >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Takeru INOUE <tak...@gm...> >>>>> >>>> >>>> >>>> >>>> -- >>>> cooldaemon >>>> >>> >>> >>> >>> -- >>> Takeru INOUE <tak...@gm...> >>> >> >> >> >> -- >> cooldaemon >> > > > > -- > cooldaemon > > ------------------------------------------------------------------------------ > Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA > -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise > -Strategies to boost innovation and cut costs with open source participation > -Receive a $600 discount off the registration fee with the source code: SFAD > http://p.sf.net/sfu/XcvMzF8H > _______________________________________________ > Kai-devel-ja mailing list > Kai...@li... > https://lists.sourceforge.net/lists/listinfo/kai-devel-ja > -- Takeru INOUE <tak...@gm...> |
From: masahito i. <coo...@gm...> - 2009-02-25 15:23:14
|
皆様 幾田です。 お疲れ様です。 kai_tcp_server のモジュール構成について ご相談があり、メール致しました。 kai_tcp_server に Monitor 用の gen_server を追加しようとしたのですが supervisor のコールバック関数 init/1 と gen_server のコールバック関数 init/1 が モジュール内で重複してしまいました。 一応、引数のパターンマッチで逃れられるのですが そろそろファイル分割の時期なのかもしれないとも考えております。 如何でしょうか? 案1.分割しない ファイルのポータビリティを重視し、分割しないのもありだと考えております。 最終的なコード行数は、300 行程度になる予定である為 まだ、分割しなくとも良いかもしれません。 案2.振る舞い毎にモジュールを分割 具体的には、下記のような構成を考えております。 kai_tcp_server.erl (他のモジュールから呼ばれる I/F を配置) kai_tcp_server_sup.erl kai_tcp_server_monitor.erl kai_tcp_server_acceptor.erl kai_tcp_server を利用する他のモジュールに 「起動したい場合は sup の関数を使う」 「接続中のプロセスの個数を知りたい場合は monitor の関数を使う」 とモジュール名を選択させるよりは kai_tcp_server に I/F を集中させてしまった方が 良いのではないかと考えておりますが 如何でしょうか? 案3.パッケージを使う Scalaris くらいでしか見かけないのですが パッケージを階層化する方法もあります。 (http://www.erlang.org/doc/man/packages.html) ファイルの構成は、下記を考えております。 kai_tcp_server.erl kai_tcp_server/supervisor.erl kai_tcp_server/monitor.erl kai_tcp_server/acceptor.erl 個人的には、案2で良いかとも思いますが パッケージを使う事で src ディレクトリ配下が 見通しが良くなるような気もしています。 如何でしょうか? お手数ではございますが ご意見の程、何卒よろしくお願い致します。 2009/2/18 masahito ikuta <coo...@gm...>: >>> Monitor が {'DOWN', MonitorRef, Type, Object, Info} を受信した場合 >>> erlang:demonitor/1 でモニタリングを解除し >>> デクリメントの処理を行ないます。 >> >> どのようなときに DOWN が送られるんでしたっけ? > > erlang:monitor/2 で登録したプロセスが > 何らかの事情で停止すると、DOWN メッセージを受信します。 > > Monitor の trap_exit に true を設定しておけば > erlang:link/1 を利用しても良いのですが > こう言う用途では、erlang:monitor/2 が妥当ではないかと考えました。 > >>> <デメリット> >>> Monitor が落ち、Supervisor により再起動されると >>> erlang:monitor/2 を、やり直す必要があります。 >> >>滅多にないと思うので,warning メッセージを残しておけばいいのかなぁ. >> >>> gen_server である為 >>> tarminate/2 で State を引き継げそうなので >>> 何とかなりそう? >> >>おぉ,なるほど. > > supervisor 配下の gen_server の Module:tarminate/2 の仕様を > 正しく理解できていない状態で > 勢いで予想を書いてしまったので(ぉぃ) > 少し調査させてください。 > > ここは、あまり神経質にならずに > 初回の make では、warning を出す事を検討してみます。 > > という事で、週末に案1を実装してみます。 > > > 2009/2/17 Takeru INOUE <tak...@gm...>: >> 難しいですねぇ. >> 正直言って,どちらが良いかははっきりわからないです. >> >> 2009/2/17 masahito ikuta <coo...@gm...>: >>> 煮詰まったので、ご相談させてください。 >>> >>>> エラーによる受信終了もすべてキャッチできれば,正しくデクリメントできると思います. >>> >>> 現在、kai_tcp_server の Supervisor 配下に >>> 何らかのステータス管理用プロセスを配置する事を検討中です。 >>> >>> ※kai_state を kai_tcp_server 内で使うと、tcp_server が Kai に密結合しすぎかなぁと・・・ >>> この辺りも検討の余地があると思うのですが、ちょっと、それは脇に置いておきます。 >> >> 密結合しすぎだし,利点もそれほどなさそうですね. >> >>> 案1.erlang:monitor/2 を使う >>> >>> supervidor:handle_info/2 で {'EXIT', Pid, Reason} をトラップしているので >>> これをフックできれば一番楽なのですが >>> 残念ながら、そう言う機構は Supervisor に用意されていないようです。 >>> >>> そこで、Supervisor の下に (Supervisor 以外の) Acceptor 死活を監視する >>> Monitor(gen_server) を配置する事を検討しております。 >>> >>> 各 Acceptor は、起動時に Monitor へ自分の pid を送りつけ >>> Monitor は、受信した pid を erlang:monitor/2 でモニタリング開始します。 >>> >>> 各 Acceptor は、Monitor へ >>> accept した時点で インクリメント メッセージを >>> accept_loop を抜けた時点で デクリメント メッセージを送ります。 >>> >>> インクリメント処理は、数値のカウントアップではなく >>> 接続中リストへの Pid の追加とします。 >>> デクリメントは、その逆です。 >>> >>> Monitor が {'DOWN', MonitorRef, Type, Object, Info} を受信した場合 >>> erlang:demonitor/1 でモニタリングを解除し >>> デクリメントの処理を行ないます。 >> >> どのようなときに DOWN が送られるんでしたっけ? >> >>> <デメリット> >>> Monitor が落ち、Supervisor により再起動されると >>> erlang:monitor/2 を、やり直す必要があります。 >> >> 滅多にないと思うので,warning メッセージを残しておけばいいのかなぁ. >> >>> gen_server である為 >>> tarminate/2 で State を引き継げそうなので >>> 何とかなりそう? >> >> おぉ,なるほど. >> >>> 案2.Mod:handle_call/3 を try catch で包む >>> >>> 案1と同様に、Supervisor 配下に Monitor を配置しますが >>> 案1と異なり、Monitor は Acceptor の死活監視を行ないません。 >>> >>> 各 Acceptor は、Monitor へ >>> accept した時点で インクリメント メッセージを・・・ >>> accept_loop を抜けた際、明示的に exit/1 を実行した際、Mod:handle_call/3 で例外を catch した際に >>> デクリメント メッセージを送ります。 >>> >>> <デメリット> >>> 想定外のプロセス終了が発生した場合、対処できません。 >> >> try/catch って広く使われてるんですかねぇ. >> そのあたりにもリスクがあったりするかもです. >> >>> 以上です。 >>> 案1は、実装が複雑になりそうなので、二の足を踏んでおりますが >>> 案2より案1の方が erlang っぽい為、採用の方向で検討しております。 >>> 何か他に案があれば、ご教授頂けないでしょうか? >>> よろしくお願い致します。 >>> (不備のご指摘もあわせてお願い致します) >> >> はっきりした意見はないのですが,案1 のほうに弱めの一票を入れておきます. >> >>> 2009/2/9 Takeru INOUE <tak...@gm...>: >>>>> Accept しているだけのプロセスを除いた >>>>> 今まさにリクエストを捌いている最中のプロセス数ですよね? >>>> >>>> そうです. >>>> >>>>> 普通に内部でカウンタを保持して >>>>> Accept 毎にインクリメントしておけば良いのでは?と >>>>> 先ほど、気が付きました(w; >>>>> >>>>> 正しくデクリメントされるように作るのが難しそうですが >>>>> これで試してみましょうか? >>>> >>>> そうそう,そこが課題っぽいんですよね. >>>> エラーによる受信終了もすべてキャッチできれば,正しくデクリメントできると思います. >>>> 時間があったらやってみてもらえますでしょうか. >>>> >>>>> 個人的には、quorum の方が役割をイメージしやすく感じます。 >>>> >>>> この方向で検討してみます. >>>> >>>> >>>>> 2009/2/9 masahito ikuta <coo...@gm...>: >>>>>>>> ざっと stats を実装してみました. >>>>>> >>>>>> ご苦労様です! >>>>>> 本業が忙しすぎて、全くコミットできておらず、申し訳ありません。 >>>>>> >>>>>>>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >>>>>> >>>>>> Accept しているだけのプロセスを除いた >>>>>> 今まさにリクエストを捌いている最中のプロセス数ですよね? >>>>>> >>>>>> あまり良い案は浮かばないのですが・・・ >>>>>> >>>>>> 案1. >>>>>> <方法> >>>>>> Active で Accept した際、イベントループ内で ping メッセージを受け取ると pong を返すようにする。 >>>>>> ステータス取得時に、非同期で全 Accept 中のプロセスに ping を発行し、pong の数を数える。 >>>>>> >>>>>> <デメリット> >>>>>> Active 時のみ対応となる。 >>>>>> また、pang = タイムアウト である為、curr_connections 取得まで少し時間が掛かる。 >>>>>> >>>>>> 案2. >>>>>> <方法> >>>>>> 接続の度にプロセスを作る方式に切り替える。 >>>>>> >>>>>> <デメリット> >>>>>> プロセス生成するコストを起動時に負担できない。 >>>>>> kai_tcp_server に大幅な修正が入る。 >>>>>> ステータス取得の為に、erlang らしさを捨てる事になる。 >>>>>> >>>>>> >>>>>> んー、何か正規の方法があるかもしれないので >>>>>> 本家 ML に質問を出しつつ、gen_tcp のドキュメントやソースを読んでみます。 >>>>>> >>>>>>> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >>>>>>> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >>>>>>> どうですかねぇ? >>>>>> >>>>>> 個人的には、quorum の方が役割をイメージしやすく感じます。 >>>>>> >>>>>> >>>>>> 2009/2/8 Takeru INOUE <tak...@gm...>: >>>>>>> ひとつ書き忘れました. >>>>>>> >>>>>>> N,R,W の設定名は,それぞれ n, r, w としています. >>>>>>> しかし,stats のほうでは 3つまとめて kai_quorum という名前にしてみました. >>>>>>> STAT kai_quorum 3,2,2 のようなのが返ってきます. >>>>>>> >>>>>>> というわけで,現時点では設定名と統計名がずれています. >>>>>>> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >>>>>>> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >>>>>>> どうですかねぇ? >>>>>>> >>>>>>> >>>>>>> 2009/2/8 Takeru INOUE <tak...@gm...>: >>>>>>>> ざっと stats を実装してみました. >>>>>>>> 取得できる統計値は kai-users-ja を見てください. >>>>>>>> >>>>>>>> 以下は開発者向けのコメントと相談です. >>>>>>>> >>>>>>>> bytes (ローカルストレージのデータ量) についてです. >>>>>>>> ets では正確なデータ量を得ることができませんでした. >>>>>>>> これは,ets が管理しているデータ量が,大きなバイナリを含まないためです. >>>>>>>> とりあえず,ets が管理してるデータ量に,Erlang VM が管理している全バイナリデータ量を加算したものを返しています. >>>>>>>> かなり大きめの値が返ります. >>>>>>>> また,ガベージコレクションのタイミングによっては,古い値が消されても,データ量が減らなかったりするようです. >>>>>>>> 自前でデータ量を計算した方がいいですかねぇ.. >>>>>>>> とはいえ,ets/dets のオーバヘッド (key のためのインデックスなど) がよくわからないので,正確な値を計算することは困難だと思っているのですが. >>>>>>>> >>>>>>>> cooldaemon さま: >>>>>>>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >>>>>>>> >>>>>>>> shino さま: >>>>>>>> 二つのバージョンが返ってしまった数の累計は,どういう風に得るのが適切だと思いますでしょうか. >>>>>>>> >>>>>>>> -- >>>>>>>> Takeru INOUE <tak...@gm...> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Takeru INOUE <tak...@gm...> >>>>>>> >>>>>>> ------------------------------------------------------------------------------ >>>>>>> Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) >>>>>>> software. With Adobe AIR, Ajax developers can use existing skills and code to >>>>>>> build responsive, highly engaging applications that combine the power of local >>>>>>> resources and data with the reach of the web. Download the Adobe AIR SDK and >>>>>>> Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com >>>>>>> _______________________________________________ >>>>>>> Kai-devel-ja mailing list >>>>>>> Kai...@li... >>>>>>> https://lists.sourceforge.net/lists/listinfo/kai-devel-ja >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> cooldaemon >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> cooldaemon >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) >>>>> software. With Adobe AIR, Ajax developers can use existing skills and code to >>>>> build responsive, highly engaging applications that combine the power of local >>>>> resources and data with the reach of the web. Download the Adobe AIR SDK and >>>>> Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com >>>>> _______________________________________________ >>>>> Kai-devel-ja mailing list >>>>> Kai...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/kai-devel-ja >>>>> >>>> >>>> >>>> >>>> -- >>>> Takeru INOUE <tak...@gm...> >>>> >>> >>> >>> >>> -- >>> cooldaemon >>> >> >> >> >> -- >> Takeru INOUE <tak...@gm...> >> > > > > -- > cooldaemon > -- cooldaemon |
From: masahito i. <coo...@gm...> - 2009-02-18 01:14:10
|
>> Monitor が {'DOWN', MonitorRef, Type, Object, Info} を受信した場合 >> erlang:demonitor/1 でモニタリングを解除し >> デクリメントの処理を行ないます。 > > どのようなときに DOWN が送られるんでしたっけ? erlang:monitor/2 で登録したプロセスが 何らかの事情で停止すると、DOWN メッセージを受信します。 Monitor の trap_exit に true を設定しておけば erlang:link/1 を利用しても良いのですが こう言う用途では、erlang:monitor/2 が妥当ではないかと考えました。 >> <デメリット> >> Monitor が落ち、Supervisor により再起動されると >> erlang:monitor/2 を、やり直す必要があります。 > >滅多にないと思うので,warning メッセージを残しておけばいいのかなぁ. > >> gen_server である為 >> tarminate/2 で State を引き継げそうなので >> 何とかなりそう? > >おぉ,なるほど. supervisor 配下の gen_server の Module:tarminate/2 の仕様を 正しく理解できていない状態で 勢いで予想を書いてしまったので(ぉぃ) 少し調査させてください。 ここは、あまり神経質にならずに 初回の make では、warning を出す事を検討してみます。 という事で、週末に案1を実装してみます。 2009/2/17 Takeru INOUE <tak...@gm...>: > 難しいですねぇ. > 正直言って,どちらが良いかははっきりわからないです. > > 2009/2/17 masahito ikuta <coo...@gm...>: >> 煮詰まったので、ご相談させてください。 >> >>> エラーによる受信終了もすべてキャッチできれば,正しくデクリメントできると思います. >> >> 現在、kai_tcp_server の Supervisor 配下に >> 何らかのステータス管理用プロセスを配置する事を検討中です。 >> >> ※kai_state を kai_tcp_server 内で使うと、tcp_server が Kai に密結合しすぎかなぁと・・・ >> この辺りも検討の余地があると思うのですが、ちょっと、それは脇に置いておきます。 > > 密結合しすぎだし,利点もそれほどなさそうですね. > >> 案1.erlang:monitor/2 を使う >> >> supervidor:handle_info/2 で {'EXIT', Pid, Reason} をトラップしているので >> これをフックできれば一番楽なのですが >> 残念ながら、そう言う機構は Supervisor に用意されていないようです。 >> >> そこで、Supervisor の下に (Supervisor 以外の) Acceptor 死活を監視する >> Monitor(gen_server) を配置する事を検討しております。 >> >> 各 Acceptor は、起動時に Monitor へ自分の pid を送りつけ >> Monitor は、受信した pid を erlang:monitor/2 でモニタリング開始します。 >> >> 各 Acceptor は、Monitor へ >> accept した時点で インクリメント メッセージを >> accept_loop を抜けた時点で デクリメント メッセージを送ります。 >> >> インクリメント処理は、数値のカウントアップではなく >> 接続中リストへの Pid の追加とします。 >> デクリメントは、その逆です。 >> >> Monitor が {'DOWN', MonitorRef, Type, Object, Info} を受信した場合 >> erlang:demonitor/1 でモニタリングを解除し >> デクリメントの処理を行ないます。 > > どのようなときに DOWN が送られるんでしたっけ? > >> <デメリット> >> Monitor が落ち、Supervisor により再起動されると >> erlang:monitor/2 を、やり直す必要があります。 > > 滅多にないと思うので,warning メッセージを残しておけばいいのかなぁ. > >> gen_server である為 >> tarminate/2 で State を引き継げそうなので >> 何とかなりそう? > > おぉ,なるほど. > >> 案2.Mod:handle_call/3 を try catch で包む >> >> 案1と同様に、Supervisor 配下に Monitor を配置しますが >> 案1と異なり、Monitor は Acceptor の死活監視を行ないません。 >> >> 各 Acceptor は、Monitor へ >> accept した時点で インクリメント メッセージを・・・ >> accept_loop を抜けた際、明示的に exit/1 を実行した際、Mod:handle_call/3 で例外を catch した際に >> デクリメント メッセージを送ります。 >> >> <デメリット> >> 想定外のプロセス終了が発生した場合、対処できません。 > > try/catch って広く使われてるんですかねぇ. > そのあたりにもリスクがあったりするかもです. > >> 以上です。 >> 案1は、実装が複雑になりそうなので、二の足を踏んでおりますが >> 案2より案1の方が erlang っぽい為、採用の方向で検討しております。 >> 何か他に案があれば、ご教授頂けないでしょうか? >> よろしくお願い致します。 >> (不備のご指摘もあわせてお願い致します) > > はっきりした意見はないのですが,案1 のほうに弱めの一票を入れておきます. > >> 2009/2/9 Takeru INOUE <tak...@gm...>: >>>> Accept しているだけのプロセスを除いた >>>> 今まさにリクエストを捌いている最中のプロセス数ですよね? >>> >>> そうです. >>> >>>> 普通に内部でカウンタを保持して >>>> Accept 毎にインクリメントしておけば良いのでは?と >>>> 先ほど、気が付きました(w; >>>> >>>> 正しくデクリメントされるように作るのが難しそうですが >>>> これで試してみましょうか? >>> >>> そうそう,そこが課題っぽいんですよね. >>> エラーによる受信終了もすべてキャッチできれば,正しくデクリメントできると思います. >>> 時間があったらやってみてもらえますでしょうか. >>> >>>> 個人的には、quorum の方が役割をイメージしやすく感じます。 >>> >>> この方向で検討してみます. >>> >>> >>>> 2009/2/9 masahito ikuta <coo...@gm...>: >>>>>>> ざっと stats を実装してみました. >>>>> >>>>> ご苦労様です! >>>>> 本業が忙しすぎて、全くコミットできておらず、申し訳ありません。 >>>>> >>>>>>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >>>>> >>>>> Accept しているだけのプロセスを除いた >>>>> 今まさにリクエストを捌いている最中のプロセス数ですよね? >>>>> >>>>> あまり良い案は浮かばないのですが・・・ >>>>> >>>>> 案1. >>>>> <方法> >>>>> Active で Accept した際、イベントループ内で ping メッセージを受け取ると pong を返すようにする。 >>>>> ステータス取得時に、非同期で全 Accept 中のプロセスに ping を発行し、pong の数を数える。 >>>>> >>>>> <デメリット> >>>>> Active 時のみ対応となる。 >>>>> また、pang = タイムアウト である為、curr_connections 取得まで少し時間が掛かる。 >>>>> >>>>> 案2. >>>>> <方法> >>>>> 接続の度にプロセスを作る方式に切り替える。 >>>>> >>>>> <デメリット> >>>>> プロセス生成するコストを起動時に負担できない。 >>>>> kai_tcp_server に大幅な修正が入る。 >>>>> ステータス取得の為に、erlang らしさを捨てる事になる。 >>>>> >>>>> >>>>> んー、何か正規の方法があるかもしれないので >>>>> 本家 ML に質問を出しつつ、gen_tcp のドキュメントやソースを読んでみます。 >>>>> >>>>>> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >>>>>> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >>>>>> どうですかねぇ? >>>>> >>>>> 個人的には、quorum の方が役割をイメージしやすく感じます。 >>>>> >>>>> >>>>> 2009/2/8 Takeru INOUE <tak...@gm...>: >>>>>> ひとつ書き忘れました. >>>>>> >>>>>> N,R,W の設定名は,それぞれ n, r, w としています. >>>>>> しかし,stats のほうでは 3つまとめて kai_quorum という名前にしてみました. >>>>>> STAT kai_quorum 3,2,2 のようなのが返ってきます. >>>>>> >>>>>> というわけで,現時点では設定名と統計名がずれています. >>>>>> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >>>>>> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >>>>>> どうですかねぇ? >>>>>> >>>>>> >>>>>> 2009/2/8 Takeru INOUE <tak...@gm...>: >>>>>>> ざっと stats を実装してみました. >>>>>>> 取得できる統計値は kai-users-ja を見てください. >>>>>>> >>>>>>> 以下は開発者向けのコメントと相談です. >>>>>>> >>>>>>> bytes (ローカルストレージのデータ量) についてです. >>>>>>> ets では正確なデータ量を得ることができませんでした. >>>>>>> これは,ets が管理しているデータ量が,大きなバイナリを含まないためです. >>>>>>> とりあえず,ets が管理してるデータ量に,Erlang VM が管理している全バイナリデータ量を加算したものを返しています. >>>>>>> かなり大きめの値が返ります. >>>>>>> また,ガベージコレクションのタイミングによっては,古い値が消されても,データ量が減らなかったりするようです. >>>>>>> 自前でデータ量を計算した方がいいですかねぇ.. >>>>>>> とはいえ,ets/dets のオーバヘッド (key のためのインデックスなど) がよくわからないので,正確な値を計算することは困難だと思っているのですが. >>>>>>> >>>>>>> cooldaemon さま: >>>>>>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >>>>>>> >>>>>>> shino さま: >>>>>>> 二つのバージョンが返ってしまった数の累計は,どういう風に得るのが適切だと思いますでしょうか. >>>>>>> >>>>>>> -- >>>>>>> Takeru INOUE <tak...@gm...> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Takeru INOUE <tak...@gm...> >>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) >>>>>> software. With Adobe AIR, Ajax developers can use existing skills and code to >>>>>> build responsive, highly engaging applications that combine the power of local >>>>>> resources and data with the reach of the web. Download the Adobe AIR SDK and >>>>>> Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com >>>>>> _______________________________________________ >>>>>> Kai-devel-ja mailing list >>>>>> Kai...@li... >>>>>> https://lists.sourceforge.net/lists/listinfo/kai-devel-ja >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> cooldaemon >>>>> >>>> >>>> >>>> >>>> -- >>>> cooldaemon >>>> >>>> ------------------------------------------------------------------------------ >>>> Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) >>>> software. With Adobe AIR, Ajax developers can use existing skills and code to >>>> build responsive, highly engaging applications that combine the power of local >>>> resources and data with the reach of the web. Download the Adobe AIR SDK and >>>> Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com >>>> _______________________________________________ >>>> Kai-devel-ja mailing list >>>> Kai...@li... >>>> https://lists.sourceforge.net/lists/listinfo/kai-devel-ja >>>> >>> >>> >>> >>> -- >>> Takeru INOUE <tak...@gm...> >>> >> >> >> >> -- >> cooldaemon >> > > > > -- > Takeru INOUE <tak...@gm...> > -- cooldaemon |
From: Takeru I. <tak...@gm...> - 2009-02-17 13:27:07
|
難しいですねぇ. 正直言って,どちらが良いかははっきりわからないです. 2009/2/17 masahito ikuta <coo...@gm...>: > 煮詰まったので、ご相談させてください。 > >> エラーによる受信終了もすべてキャッチできれば,正しくデクリメントできると思います. > > 現在、kai_tcp_server の Supervisor 配下に > 何らかのステータス管理用プロセスを配置する事を検討中です。 > > ※kai_state を kai_tcp_server 内で使うと、tcp_server が Kai に密結合しすぎかなぁと・・・ > この辺りも検討の余地があると思うのですが、ちょっと、それは脇に置いておきます。 密結合しすぎだし,利点もそれほどなさそうですね. > 案1.erlang:monitor/2 を使う > > supervidor:handle_info/2 で {'EXIT', Pid, Reason} をトラップしているので > これをフックできれば一番楽なのですが > 残念ながら、そう言う機構は Supervisor に用意されていないようです。 > > そこで、Supervisor の下に (Supervisor 以外の) Acceptor 死活を監視する > Monitor(gen_server) を配置する事を検討しております。 > > 各 Acceptor は、起動時に Monitor へ自分の pid を送りつけ > Monitor は、受信した pid を erlang:monitor/2 でモニタリング開始します。 > > 各 Acceptor は、Monitor へ > accept した時点で インクリメント メッセージを > accept_loop を抜けた時点で デクリメント メッセージを送ります。 > > インクリメント処理は、数値のカウントアップではなく > 接続中リストへの Pid の追加とします。 > デクリメントは、その逆です。 > > Monitor が {'DOWN', MonitorRef, Type, Object, Info} を受信した場合 > erlang:demonitor/1 でモニタリングを解除し > デクリメントの処理を行ないます。 どのようなときに DOWN が送られるんでしたっけ? > <デメリット> > Monitor が落ち、Supervisor により再起動されると > erlang:monitor/2 を、やり直す必要があります。 滅多にないと思うので,warning メッセージを残しておけばいいのかなぁ. > gen_server である為 > tarminate/2 で State を引き継げそうなので > 何とかなりそう? おぉ,なるほど. > 案2.Mod:handle_call/3 を try catch で包む > > 案1と同様に、Supervisor 配下に Monitor を配置しますが > 案1と異なり、Monitor は Acceptor の死活監視を行ないません。 > > 各 Acceptor は、Monitor へ > accept した時点で インクリメント メッセージを・・・ > accept_loop を抜けた際、明示的に exit/1 を実行した際、Mod:handle_call/3 で例外を catch した際に > デクリメント メッセージを送ります。 > > <デメリット> > 想定外のプロセス終了が発生した場合、対処できません。 try/catch って広く使われてるんですかねぇ. そのあたりにもリスクがあったりするかもです. > 以上です。 > 案1は、実装が複雑になりそうなので、二の足を踏んでおりますが > 案2より案1の方が erlang っぽい為、採用の方向で検討しております。 > 何か他に案があれば、ご教授頂けないでしょうか? > よろしくお願い致します。 > (不備のご指摘もあわせてお願い致します) はっきりした意見はないのですが,案1 のほうに弱めの一票を入れておきます. > 2009/2/9 Takeru INOUE <tak...@gm...>: >>> Accept しているだけのプロセスを除いた >>> 今まさにリクエストを捌いている最中のプロセス数ですよね? >> >> そうです. >> >>> 普通に内部でカウンタを保持して >>> Accept 毎にインクリメントしておけば良いのでは?と >>> 先ほど、気が付きました(w; >>> >>> 正しくデクリメントされるように作るのが難しそうですが >>> これで試してみましょうか? >> >> そうそう,そこが課題っぽいんですよね. >> エラーによる受信終了もすべてキャッチできれば,正しくデクリメントできると思います. >> 時間があったらやってみてもらえますでしょうか. >> >>> 個人的には、quorum の方が役割をイメージしやすく感じます。 >> >> この方向で検討してみます. >> >> >>> 2009/2/9 masahito ikuta <coo...@gm...>: >>>>>> ざっと stats を実装してみました. >>>> >>>> ご苦労様です! >>>> 本業が忙しすぎて、全くコミットできておらず、申し訳ありません。 >>>> >>>>>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >>>> >>>> Accept しているだけのプロセスを除いた >>>> 今まさにリクエストを捌いている最中のプロセス数ですよね? >>>> >>>> あまり良い案は浮かばないのですが・・・ >>>> >>>> 案1. >>>> <方法> >>>> Active で Accept した際、イベントループ内で ping メッセージを受け取ると pong を返すようにする。 >>>> ステータス取得時に、非同期で全 Accept 中のプロセスに ping を発行し、pong の数を数える。 >>>> >>>> <デメリット> >>>> Active 時のみ対応となる。 >>>> また、pang = タイムアウト である為、curr_connections 取得まで少し時間が掛かる。 >>>> >>>> 案2. >>>> <方法> >>>> 接続の度にプロセスを作る方式に切り替える。 >>>> >>>> <デメリット> >>>> プロセス生成するコストを起動時に負担できない。 >>>> kai_tcp_server に大幅な修正が入る。 >>>> ステータス取得の為に、erlang らしさを捨てる事になる。 >>>> >>>> >>>> んー、何か正規の方法があるかもしれないので >>>> 本家 ML に質問を出しつつ、gen_tcp のドキュメントやソースを読んでみます。 >>>> >>>>> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >>>>> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >>>>> どうですかねぇ? >>>> >>>> 個人的には、quorum の方が役割をイメージしやすく感じます。 >>>> >>>> >>>> 2009/2/8 Takeru INOUE <tak...@gm...>: >>>>> ひとつ書き忘れました. >>>>> >>>>> N,R,W の設定名は,それぞれ n, r, w としています. >>>>> しかし,stats のほうでは 3つまとめて kai_quorum という名前にしてみました. >>>>> STAT kai_quorum 3,2,2 のようなのが返ってきます. >>>>> >>>>> というわけで,現時点では設定名と統計名がずれています. >>>>> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >>>>> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >>>>> どうですかねぇ? >>>>> >>>>> >>>>> 2009/2/8 Takeru INOUE <tak...@gm...>: >>>>>> ざっと stats を実装してみました. >>>>>> 取得できる統計値は kai-users-ja を見てください. >>>>>> >>>>>> 以下は開発者向けのコメントと相談です. >>>>>> >>>>>> bytes (ローカルストレージのデータ量) についてです. >>>>>> ets では正確なデータ量を得ることができませんでした. >>>>>> これは,ets が管理しているデータ量が,大きなバイナリを含まないためです. >>>>>> とりあえず,ets が管理してるデータ量に,Erlang VM が管理している全バイナリデータ量を加算したものを返しています. >>>>>> かなり大きめの値が返ります. >>>>>> また,ガベージコレクションのタイミングによっては,古い値が消されても,データ量が減らなかったりするようです. >>>>>> 自前でデータ量を計算した方がいいですかねぇ.. >>>>>> とはいえ,ets/dets のオーバヘッド (key のためのインデックスなど) がよくわからないので,正確な値を計算することは困難だと思っているのですが. >>>>>> >>>>>> cooldaemon さま: >>>>>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >>>>>> >>>>>> shino さま: >>>>>> 二つのバージョンが返ってしまった数の累計は,どういう風に得るのが適切だと思いますでしょうか. >>>>>> >>>>>> -- >>>>>> Takeru INOUE <tak...@gm...> >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Takeru INOUE <tak...@gm...> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) >>>>> software. With Adobe AIR, Ajax developers can use existing skills and code to >>>>> build responsive, highly engaging applications that combine the power of local >>>>> resources and data with the reach of the web. Download the Adobe AIR SDK and >>>>> Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com >>>>> _______________________________________________ >>>>> Kai-devel-ja mailing list >>>>> Kai...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/kai-devel-ja >>>>> >>>> >>>> >>>> >>>> -- >>>> cooldaemon >>>> >>> >>> >>> >>> -- >>> cooldaemon >>> >>> ------------------------------------------------------------------------------ >>> Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) >>> software. With Adobe AIR, Ajax developers can use existing skills and code to >>> build responsive, highly engaging applications that combine the power of local >>> resources and data with the reach of the web. Download the Adobe AIR SDK and >>> Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com >>> _______________________________________________ >>> Kai-devel-ja mailing list >>> Kai...@li... >>> https://lists.sourceforge.net/lists/listinfo/kai-devel-ja >>> >> >> >> >> -- >> Takeru INOUE <tak...@gm...> >> > > > > -- > cooldaemon > -- Takeru INOUE <tak...@gm...> |
From: masahito i. <coo...@gm...> - 2009-02-17 04:19:52
|
煮詰まったので、ご相談させてください。 > エラーによる受信終了もすべてキャッチできれば,正しくデクリメントできると思います. 現在、kai_tcp_server の Supervisor 配下に 何らかのステータス管理用プロセスを配置する事を検討中です。 ※kai_state を kai_tcp_server 内で使うと、tcp_server が Kai に密結合しすぎかなぁと・・・ この辺りも検討の余地があると思うのですが、ちょっと、それは脇に置いておきます。 案1.erlang:monitor/2 を使う supervidor:handle_info/2 で {'EXIT', Pid, Reason} をトラップしているので これをフックできれば一番楽なのですが 残念ながら、そう言う機構は Supervisor に用意されていないようです。 そこで、Supervisor の下に (Supervisor 以外の) Acceptor 死活を監視する Monitor(gen_server) を配置する事を検討しております。 各 Acceptor は、起動時に Monitor へ自分の pid を送りつけ Monitor は、受信した pid を erlang:monitor/2 でモニタリング開始します。 各 Acceptor は、Monitor へ accept した時点で インクリメント メッセージを accept_loop を抜けた時点で デクリメント メッセージを送ります。 インクリメント処理は、数値のカウントアップではなく 接続中リストへの Pid の追加とします。 デクリメントは、その逆です。 Monitor が {'DOWN', MonitorRef, Type, Object, Info} を受信した場合 erlang:demonitor/1 でモニタリングを解除し デクリメントの処理を行ないます。 <デメリット> Monitor が落ち、Supervisor により再起動されると erlang:monitor/2 を、やり直す必要があります。 gen_server である為 tarminate/2 で State を引き継げそうなので 何とかなりそう? 案2.Mod:handle_call/3 を try catch で包む 案1と同様に、Supervisor 配下に Monitor を配置しますが 案1と異なり、Monitor は Acceptor の死活監視を行ないません。 各 Acceptor は、Monitor へ accept した時点で インクリメント メッセージを・・・ accept_loop を抜けた際、明示的に exit/1 を実行した際、Mod:handle_call/3 で例外を catch した際に デクリメント メッセージを送ります。 <デメリット> 想定外のプロセス終了が発生した場合、対処できません。 以上です。 案1は、実装が複雑になりそうなので、二の足を踏んでおりますが 案2より案1の方が erlang っぽい為、採用の方向で検討しております。 何か他に案があれば、ご教授頂けないでしょうか? よろしくお願い致します。 (不備のご指摘もあわせてお願い致します) 2009/2/9 Takeru INOUE <tak...@gm...>: >> Accept しているだけのプロセスを除いた >> 今まさにリクエストを捌いている最中のプロセス数ですよね? > > そうです. > >> 普通に内部でカウンタを保持して >> Accept 毎にインクリメントしておけば良いのでは?と >> 先ほど、気が付きました(w; >> >> 正しくデクリメントされるように作るのが難しそうですが >> これで試してみましょうか? > > そうそう,そこが課題っぽいんですよね. > エラーによる受信終了もすべてキャッチできれば,正しくデクリメントできると思います. > 時間があったらやってみてもらえますでしょうか. > >> 個人的には、quorum の方が役割をイメージしやすく感じます。 > > この方向で検討してみます. > > >> 2009/2/9 masahito ikuta <coo...@gm...>: >>>>> ざっと stats を実装してみました. >>> >>> ご苦労様です! >>> 本業が忙しすぎて、全くコミットできておらず、申し訳ありません。 >>> >>>>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >>> >>> Accept しているだけのプロセスを除いた >>> 今まさにリクエストを捌いている最中のプロセス数ですよね? >>> >>> あまり良い案は浮かばないのですが・・・ >>> >>> 案1. >>> <方法> >>> Active で Accept した際、イベントループ内で ping メッセージを受け取ると pong を返すようにする。 >>> ステータス取得時に、非同期で全 Accept 中のプロセスに ping を発行し、pong の数を数える。 >>> >>> <デメリット> >>> Active 時のみ対応となる。 >>> また、pang = タイムアウト である為、curr_connections 取得まで少し時間が掛かる。 >>> >>> 案2. >>> <方法> >>> 接続の度にプロセスを作る方式に切り替える。 >>> >>> <デメリット> >>> プロセス生成するコストを起動時に負担できない。 >>> kai_tcp_server に大幅な修正が入る。 >>> ステータス取得の為に、erlang らしさを捨てる事になる。 >>> >>> >>> んー、何か正規の方法があるかもしれないので >>> 本家 ML に質問を出しつつ、gen_tcp のドキュメントやソースを読んでみます。 >>> >>>> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >>>> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >>>> どうですかねぇ? >>> >>> 個人的には、quorum の方が役割をイメージしやすく感じます。 >>> >>> >>> 2009/2/8 Takeru INOUE <tak...@gm...>: >>>> ひとつ書き忘れました. >>>> >>>> N,R,W の設定名は,それぞれ n, r, w としています. >>>> しかし,stats のほうでは 3つまとめて kai_quorum という名前にしてみました. >>>> STAT kai_quorum 3,2,2 のようなのが返ってきます. >>>> >>>> というわけで,現時点では設定名と統計名がずれています. >>>> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >>>> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >>>> どうですかねぇ? >>>> >>>> >>>> 2009/2/8 Takeru INOUE <tak...@gm...>: >>>>> ざっと stats を実装してみました. >>>>> 取得できる統計値は kai-users-ja を見てください. >>>>> >>>>> 以下は開発者向けのコメントと相談です. >>>>> >>>>> bytes (ローカルストレージのデータ量) についてです. >>>>> ets では正確なデータ量を得ることができませんでした. >>>>> これは,ets が管理しているデータ量が,大きなバイナリを含まないためです. >>>>> とりあえず,ets が管理してるデータ量に,Erlang VM が管理している全バイナリデータ量を加算したものを返しています. >>>>> かなり大きめの値が返ります. >>>>> また,ガベージコレクションのタイミングによっては,古い値が消されても,データ量が減らなかったりするようです. >>>>> 自前でデータ量を計算した方がいいですかねぇ.. >>>>> とはいえ,ets/dets のオーバヘッド (key のためのインデックスなど) がよくわからないので,正確な値を計算することは困難だと思っているのですが. >>>>> >>>>> cooldaemon さま: >>>>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >>>>> >>>>> shino さま: >>>>> 二つのバージョンが返ってしまった数の累計は,どういう風に得るのが適切だと思いますでしょうか. >>>>> >>>>> -- >>>>> Takeru INOUE <tak...@gm...> >>>>> >>>> >>>> >>>> >>>> -- >>>> Takeru INOUE <tak...@gm...> >>>> >>>> ------------------------------------------------------------------------------ >>>> Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) >>>> software. With Adobe AIR, Ajax developers can use existing skills and code to >>>> build responsive, highly engaging applications that combine the power of local >>>> resources and data with the reach of the web. Download the Adobe AIR SDK and >>>> Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com >>>> _______________________________________________ >>>> Kai-devel-ja mailing list >>>> Kai...@li... >>>> https://lists.sourceforge.net/lists/listinfo/kai-devel-ja >>>> >>> >>> >>> >>> -- >>> cooldaemon >>> >> >> >> >> -- >> cooldaemon >> >> ------------------------------------------------------------------------------ >> Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) >> software. With Adobe AIR, Ajax developers can use existing skills and code to >> build responsive, highly engaging applications that combine the power of local >> resources and data with the reach of the web. Download the Adobe AIR SDK and >> Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com >> _______________________________________________ >> Kai-devel-ja mailing list >> Kai...@li... >> https://lists.sourceforge.net/lists/listinfo/kai-devel-ja >> > > > > -- > Takeru INOUE <tak...@gm...> > -- cooldaemon |
From: Takeru I. <tak...@gm...> - 2009-02-16 14:29:28
|
2009/2/15 shunichi shinohara <shi...@gm...>: > しのはらです。 > > 2009/2/14 Takeru INOUE <tak...@gm...>: >>> - 最小限 >>> 2, 3, 4,... 個のバージョンが返った数 >>> cmd_get[2], cmd_get[3],.... >>> - 余裕があればあれば良いなぁという項目 >>> レプリカノードから n1 個がかえってきて、vector clocks で n2 個にまとまった GET の数 (n1 > n2) >>> cmd_get[n2][n1] >> >> cmd_get が複数の値を示すという意味ですか? >> "STAT cmd_get 100 2 0" のように. >> memcache と同じ統計名は同じ意味で使いたいので,cmd_get はひとつの値だけを返すようにしたいなぁと思っています. >> たとえば,kai_unreconciled_get のような統計名を新設して,"STAT kai_unreconciled_get 2 0" >> のような値を返すのがいいかなぁ. > > 書き方がまぎらわしくてすみません。 > cmd_get は memcached に従う、ということで単一の値を返す、に賛成です。 > Kai 特有の統計については、名前は、 kai_.... にするのでしょうね。 > 2 つ以上のバージョンが返るばあいには、 kai_unreconciled_get は分かりやすいとおもいました :-) > == > kai_unreconciled_get_2 %% 2 バージョンが返った数 > kai_unreconciled_get_3 %% 3 バージョンが返った数 > == > と分けてしまうのは、ちょっと冗長でしょうか?? :-/ > > 「レプリカノードから 3 バージョンが返ってきて、 1 つにまとまった場合」の数は、、、 > unreconciled ではないので、 > kai_unreconciled_get_3to1 > だとおちつかない気もしますね。単純に、 > kai_cmd_get_3to1 > にしてしまいますか? > # そしたら、上の複数バージョンも、 kai_cmd_get_2 etc. とあわせるのかな なんとなくですが,管理者は「複数の値が返ってしまってないか,もし返っていたとしてもごく稀か」というようなことを気にするのかなと思いました. 返った数が 2 なのか 3 なのかというのはそれほど気にせずに,複数の値が返ったかどうかをチェックするのであれば,ひとつの統計名の方がチェックしやすいかもしれません. あと,クラスタ内部で解消できた場合の回数を記すかどうかですが,開発者としてはどのくらいそういうケースがあったのか知りたいところですが,運用者には興味がないかもしれないです. 括弧付きで「おまけ」ということがわかるように書くのがいいかなぁ. まとめるとこんな感じでしょうか. 内部的に 2つのバージョンが返ってきたことが 3 回あり,そのうち 1回は解消できなかった. さらに,3つのバージョンが返ってきたことが 1回あったけど,解消できた. kai_unreconciled_get 1(3) 0(1) というのではどうでしょう. >> 複数の値が返るかどうかの判定は,kai_memcache が行って問題ないですよね. >> cmd_get を kai_memcace で数えているので,そこで一緒に行うのがいいかなと. > > kai_coordinator だと、reconcilation 前の数もわかるので > そちらのほうが適当だと思います。 kai 独自の統計情報なので,kai_memcache で測定しない方がよいですね. kai_coordinator にしましょう. -- Takeru INOUE <tak...@gm...> |
From: shunichi s. <shi...@gm...> - 2009-02-15 06:33:45
|
しのはらです。 2009/2/14 Takeru INOUE <tak...@gm...>: >> - 最小限 >> 2, 3, 4,... 個のバージョンが返った数 >> cmd_get[2], cmd_get[3],.... >> - 余裕があればあれば良いなぁという項目 >> レプリカノードから n1 個がかえってきて、vector clocks で n2 個にまとまった GET の数 (n1 > n2) >> cmd_get[n2][n1] > > cmd_get が複数の値を示すという意味ですか? > "STAT cmd_get 100 2 0" のように. > memcache と同じ統計名は同じ意味で使いたいので,cmd_get はひとつの値だけを返すようにしたいなぁと思っています. > たとえば,kai_unreconciled_get のような統計名を新設して,"STAT kai_unreconciled_get 2 0" > のような値を返すのがいいかなぁ. 書き方がまぎらわしくてすみません。 cmd_get は memcached に従う、ということで単一の値を返す、に賛成です。 Kai 特有の統計については、名前は、 kai_.... にするのでしょうね。 2 つ以上のバージョンが返るばあいには、 kai_unreconciled_get は分かりやすいとおもいました :-) == kai_unreconciled_get_2 %% 2 バージョンが返った数 kai_unreconciled_get_3 %% 3 バージョンが返った数 == と分けてしまうのは、ちょっと冗長でしょうか?? :-/ 「レプリカノードから 3 バージョンが返ってきて、 1 つにまとまった場合」の数は、、、 unreconciled ではないので、 kai_unreconciled_get_3to1 だとおちつかない気もしますね。単純に、 kai_cmd_get_3to1 にしてしまいますか? # そしたら、上の複数バージョンも、 kai_cmd_get_2 etc. とあわせるのかな > 複数の値が返るかどうかの判定は,kai_memcache が行って問題ないですよね. > cmd_get を kai_memcace で数えているので,そこで一緒に行うのがいいかなと. kai_coordinator だと、reconcilation 前の数もわかるので そちらのほうが適当だと思います。 -- shino |
From: Takeru I. <tak...@gm...> - 2009-02-14 13:05:49
|
2009/2/13 shunichi shinohara <shi...@gm...>: > しのはらです。返信遅くてすみません f(--) > > 2009/2/8 Takeru INOUE <tak...@gm...>: >> N,R,W の設定名は,それぞれ n, r, w としています. >> しかし,stats のほうでは 3つまとめて kai_quorum という名前にしてみました. >> STAT kai_quorum 3,2,2 のようなのが返ってきます. >> >> というわけで,現時点では設定名と統計名がずれています. >> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >> どうですかねぇ? > > まとめてのほうが(人間には)見易いとおもうので、ぼくは好みです。 > (いまのところ)不変な値なので、後からでも重複して返すのもありなので、 > === > kai_quorum 3,2,2 > n 3 > r 2 > w 2 > === > ひとまず問題ないのではないでしょうか。 stats の応答は kai_quorum にしましょう. 設定値を {quorum, 3, 2, 2} のようにするかは,もう少し考えてみます. 常識的には,新旧両方をサポートして,古い方を使ったら警告文を表示させるんだろうなぁ. >>> また,ガベージコレクションのタイミングによっては,古い値が消されても,データ量が減らなかったりするようです. >>> 自前でデータ量を計算した方がいいですかねぇ.. >>> とはいえ,ets/dets のオーバヘッド (key のためのインデックスなど) がよくわからないので,正確な値を計算することは困難だと思っているのですが. >>> >>> cooldaemon さま: >>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. > > ちらっと memcached のソースをみたら、get/set のときにインクレメント・デクレメントしていました。 > >>> shino さま: >>> 二つのバージョンが返ってしまった数の累計は,どういう風に得るのが適切だと思いますでしょうか. > > いまぱっと思いつくものは素直なものしかでないですが。 > - 最小限 > 2, 3, 4,... 個のバージョンが返った数 > cmd_get[2], cmd_get[3],.... > - 余裕があればあれば良いなぁという項目 > レプリカノードから n1 個がかえってきて、vector clocks で n2 個にまとまった GET の数 (n1 > n2) > cmd_get[n2][n1] cmd_get が複数の値を示すという意味ですか? "STAT cmd_get 100 2 0" のように. memcache と同じ統計名は同じ意味で使いたいので,cmd_get はひとつの値だけを返すようにしたいなぁと思っています. たとえば,kai_unreconciled_get のような統計名を新設して,"STAT kai_unreconciled_get 2 0" のような値を返すのがいいかなぁ. 複数の値が返るかどうかの判定は,kai_memcache が行って問題ないですよね. cmd_get を kai_memcace で数えているので,そこで一緒に行うのがいいかなと. > # 横道にそれますが、 cmd_get は、coordinator として GET に成功した数? > # それともレプリカノードとして get された場合の数? > # memcached 的には上でしょうか。下は別途 kei_..._get? memcache と同じ意味で使っています. つまり,kai_memcache モジュールが返した数です. クライアントがノード A に get を送信して成功したら,ノード A への stats は cmd_get 1 を返します. bytes_read なども同様です. -- Takeru INOUE <tak...@gm...> |
From: shunichi s. <shi...@gm...> - 2009-02-13 13:52:01
|
しのはらです。返信遅くてすみません f(--) 2009/2/8 Takeru INOUE <tak...@gm...>: > N,R,W の設定名は,それぞれ n, r, w としています. > しかし,stats のほうでは 3つまとめて kai_quorum という名前にしてみました. > STAT kai_quorum 3,2,2 のようなのが返ってきます. > > というわけで,現時点では設定名と統計名がずれています. > n,r,w はわかりにくい (一文字というのもよくない) ので,quorum > にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. > どうですかねぇ? まとめてのほうが(人間には)見易いとおもうので、ぼくは好みです。 (いまのところ)不変な値なので、後からでも重複して返すのもありなので、 === kai_quorum 3,2,2 n 3 r 2 w 2 === ひとまず問題ないのではないでしょうか。 >> また,ガベージコレクションのタイミングによっては,古い値が消されても,データ量が減らなかったりするようです. >> 自前でデータ量を計算した方がいいですかねぇ.. >> とはいえ,ets/dets のオーバヘッド (key のためのインデックスなど) がよくわからないので,正確な値を計算することは困難だと思っているのですが. >> >> cooldaemon さま: >> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. ちらっと memcached のソースをみたら、get/set のときにインクレメント・デクレメントしていました。 >> shino さま: >> 二つのバージョンが返ってしまった数の累計は,どういう風に得るのが適切だと思いますでしょうか. いまぱっと思いつくものは素直なものしかでないですが。 - 最小限 2, 3, 4,... 個のバージョンが返った数 cmd_get[2], cmd_get[3],.... - 余裕があればあれば良いなぁという項目 レプリカノードから n1 個がかえってきて、vector clocks で n2 個にまとまった GET の数 (n1 > n2) cmd_get[n2][n1] # 横道にそれますが、 cmd_get は、coordinator として GET に成功した数? # それともレプリカノードとして get された場合の数? # memcached 的には上でしょうか。下は別途 kei_..._get? -- shino |
From: Takeru I. <tak...@gm...> - 2009-02-09 14:53:21
|
> Accept しているだけのプロセスを除いた > 今まさにリクエストを捌いている最中のプロセス数ですよね? そうです. > 普通に内部でカウンタを保持して > Accept 毎にインクリメントしておけば良いのでは?と > 先ほど、気が付きました(w; > > 正しくデクリメントされるように作るのが難しそうですが > これで試してみましょうか? そうそう,そこが課題っぽいんですよね. エラーによる受信終了もすべてキャッチできれば,正しくデクリメントできると思います. 時間があったらやってみてもらえますでしょうか. > 個人的には、quorum の方が役割をイメージしやすく感じます。 この方向で検討してみます. > 2009/2/9 masahito ikuta <coo...@gm...>: >>>> ざっと stats を実装してみました. >> >> ご苦労様です! >> 本業が忙しすぎて、全くコミットできておらず、申し訳ありません。 >> >>>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >> >> Accept しているだけのプロセスを除いた >> 今まさにリクエストを捌いている最中のプロセス数ですよね? >> >> あまり良い案は浮かばないのですが・・・ >> >> 案1. >> <方法> >> Active で Accept した際、イベントループ内で ping メッセージを受け取ると pong を返すようにする。 >> ステータス取得時に、非同期で全 Accept 中のプロセスに ping を発行し、pong の数を数える。 >> >> <デメリット> >> Active 時のみ対応となる。 >> また、pang = タイムアウト である為、curr_connections 取得まで少し時間が掛かる。 >> >> 案2. >> <方法> >> 接続の度にプロセスを作る方式に切り替える。 >> >> <デメリット> >> プロセス生成するコストを起動時に負担できない。 >> kai_tcp_server に大幅な修正が入る。 >> ステータス取得の為に、erlang らしさを捨てる事になる。 >> >> >> んー、何か正規の方法があるかもしれないので >> 本家 ML に質問を出しつつ、gen_tcp のドキュメントやソースを読んでみます。 >> >>> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >>> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >>> どうですかねぇ? >> >> 個人的には、quorum の方が役割をイメージしやすく感じます。 >> >> >> 2009/2/8 Takeru INOUE <tak...@gm...>: >>> ひとつ書き忘れました. >>> >>> N,R,W の設定名は,それぞれ n, r, w としています. >>> しかし,stats のほうでは 3つまとめて kai_quorum という名前にしてみました. >>> STAT kai_quorum 3,2,2 のようなのが返ってきます. >>> >>> というわけで,現時点では設定名と統計名がずれています. >>> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >>> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >>> どうですかねぇ? >>> >>> >>> 2009/2/8 Takeru INOUE <tak...@gm...>: >>>> ざっと stats を実装してみました. >>>> 取得できる統計値は kai-users-ja を見てください. >>>> >>>> 以下は開発者向けのコメントと相談です. >>>> >>>> bytes (ローカルストレージのデータ量) についてです. >>>> ets では正確なデータ量を得ることができませんでした. >>>> これは,ets が管理しているデータ量が,大きなバイナリを含まないためです. >>>> とりあえず,ets が管理してるデータ量に,Erlang VM が管理している全バイナリデータ量を加算したものを返しています. >>>> かなり大きめの値が返ります. >>>> また,ガベージコレクションのタイミングによっては,古い値が消されても,データ量が減らなかったりするようです. >>>> 自前でデータ量を計算した方がいいですかねぇ.. >>>> とはいえ,ets/dets のオーバヘッド (key のためのインデックスなど) がよくわからないので,正確な値を計算することは困難だと思っているのですが. >>>> >>>> cooldaemon さま: >>>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >>>> >>>> shino さま: >>>> 二つのバージョンが返ってしまった数の累計は,どういう風に得るのが適切だと思いますでしょうか. >>>> >>>> -- >>>> Takeru INOUE <tak...@gm...> >>>> >>> >>> >>> >>> -- >>> Takeru INOUE <tak...@gm...> >>> >>> ------------------------------------------------------------------------------ >>> Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) >>> software. With Adobe AIR, Ajax developers can use existing skills and code to >>> build responsive, highly engaging applications that combine the power of local >>> resources and data with the reach of the web. Download the Adobe AIR SDK and >>> Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com >>> _______________________________________________ >>> Kai-devel-ja mailing list >>> Kai...@li... >>> https://lists.sourceforge.net/lists/listinfo/kai-devel-ja >>> >> >> >> >> -- >> cooldaemon >> > > > > -- > cooldaemon > > ------------------------------------------------------------------------------ > Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) > software. With Adobe AIR, Ajax developers can use existing skills and code to > build responsive, highly engaging applications that combine the power of local > resources and data with the reach of the web. Download the Adobe AIR SDK and > Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com > _______________________________________________ > Kai-devel-ja mailing list > Kai...@li... > https://lists.sourceforge.net/lists/listinfo/kai-devel-ja > -- Takeru INOUE <tak...@gm...> |
From: masahito i. <coo...@gm...> - 2009-02-09 11:20:09
|
普通に内部でカウンタを保持して Accept 毎にインクリメントしておけば良いのでは?と 先ほど、気が付きました(w; 正しくデクリメントされるように作るのが難しそうですが これで試してみましょうか? 2009/2/9 masahito ikuta <coo...@gm...>: >>> ざっと stats を実装してみました. > > ご苦労様です! > 本業が忙しすぎて、全くコミットできておらず、申し訳ありません。 > >>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. > > Accept しているだけのプロセスを除いた > 今まさにリクエストを捌いている最中のプロセス数ですよね? > > あまり良い案は浮かばないのですが・・・ > > 案1. > <方法> > Active で Accept した際、イベントループ内で ping メッセージを受け取ると pong を返すようにする。 > ステータス取得時に、非同期で全 Accept 中のプロセスに ping を発行し、pong の数を数える。 > > <デメリット> > Active 時のみ対応となる。 > また、pang = タイムアウト である為、curr_connections 取得まで少し時間が掛かる。 > > 案2. > <方法> > 接続の度にプロセスを作る方式に切り替える。 > > <デメリット> > プロセス生成するコストを起動時に負担できない。 > kai_tcp_server に大幅な修正が入る。 > ステータス取得の為に、erlang らしさを捨てる事になる。 > > > んー、何か正規の方法があるかもしれないので > 本家 ML に質問を出しつつ、gen_tcp のドキュメントやソースを読んでみます。 > >> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >> どうですかねぇ? > > 個人的には、quorum の方が役割をイメージしやすく感じます。 > > > 2009/2/8 Takeru INOUE <tak...@gm...>: >> ひとつ書き忘れました. >> >> N,R,W の設定名は,それぞれ n, r, w としています. >> しかし,stats のほうでは 3つまとめて kai_quorum という名前にしてみました. >> STAT kai_quorum 3,2,2 のようなのが返ってきます. >> >> というわけで,現時点では設定名と統計名がずれています. >> n,r,w はわかりにくい (一文字というのもよくない) ので,quorum >> にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. >> どうですかねぇ? >> >> >> 2009/2/8 Takeru INOUE <tak...@gm...>: >>> ざっと stats を実装してみました. >>> 取得できる統計値は kai-users-ja を見てください. >>> >>> 以下は開発者向けのコメントと相談です. >>> >>> bytes (ローカルストレージのデータ量) についてです. >>> ets では正確なデータ量を得ることができませんでした. >>> これは,ets が管理しているデータ量が,大きなバイナリを含まないためです. >>> とりあえず,ets が管理してるデータ量に,Erlang VM が管理している全バイナリデータ量を加算したものを返しています. >>> かなり大きめの値が返ります. >>> また,ガベージコレクションのタイミングによっては,古い値が消されても,データ量が減らなかったりするようです. >>> 自前でデータ量を計算した方がいいですかねぇ.. >>> とはいえ,ets/dets のオーバヘッド (key のためのインデックスなど) がよくわからないので,正確な値を計算することは困難だと思っているのですが. >>> >>> cooldaemon さま: >>> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >>> >>> shino さま: >>> 二つのバージョンが返ってしまった数の累計は,どういう風に得るのが適切だと思いますでしょうか. >>> >>> -- >>> Takeru INOUE <tak...@gm...> >>> >> >> >> >> -- >> Takeru INOUE <tak...@gm...> >> >> ------------------------------------------------------------------------------ >> Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) >> software. With Adobe AIR, Ajax developers can use existing skills and code to >> build responsive, highly engaging applications that combine the power of local >> resources and data with the reach of the web. Download the Adobe AIR SDK and >> Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com >> _______________________________________________ >> Kai-devel-ja mailing list >> Kai...@li... >> https://lists.sourceforge.net/lists/listinfo/kai-devel-ja >> > > > > -- > cooldaemon > -- cooldaemon |
From: masahito i. <coo...@gm...> - 2009-02-09 04:02:59
|
>> ざっと stats を実装してみました. ご苦労様です! 本業が忙しすぎて、全くコミットできておらず、申し訳ありません。 >> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. Accept しているだけのプロセスを除いた 今まさにリクエストを捌いている最中のプロセス数ですよね? あまり良い案は浮かばないのですが・・・ 案1. <方法> Active で Accept した際、イベントループ内で ping メッセージを受け取ると pong を返すようにする。 ステータス取得時に、非同期で全 Accept 中のプロセスに ping を発行し、pong の数を数える。 <デメリット> Active 時のみ対応となる。 また、pang = タイムアウト である為、curr_connections 取得まで少し時間が掛かる。 案2. <方法> 接続の度にプロセスを作る方式に切り替える。 <デメリット> プロセス生成するコストを起動時に負担できない。 kai_tcp_server に大幅な修正が入る。 ステータス取得の為に、erlang らしさを捨てる事になる。 んー、何か正規の方法があるかもしれないので 本家 ML に質問を出しつつ、gen_tcp のドキュメントやソースを読んでみます。 > n,r,w はわかりにくい (一文字というのもよくない) ので,quorum > にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. > どうですかねぇ? 個人的には、quorum の方が役割をイメージしやすく感じます。 2009/2/8 Takeru INOUE <tak...@gm...>: > ひとつ書き忘れました. > > N,R,W の設定名は,それぞれ n, r, w としています. > しかし,stats のほうでは 3つまとめて kai_quorum という名前にしてみました. > STAT kai_quorum 3,2,2 のようなのが返ってきます. > > というわけで,現時点では設定名と統計名がずれています. > n,r,w はわかりにくい (一文字というのもよくない) ので,quorum > にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. > どうですかねぇ? > > > 2009/2/8 Takeru INOUE <tak...@gm...>: >> ざっと stats を実装してみました. >> 取得できる統計値は kai-users-ja を見てください. >> >> 以下は開発者向けのコメントと相談です. >> >> bytes (ローカルストレージのデータ量) についてです. >> ets では正確なデータ量を得ることができませんでした. >> これは,ets が管理しているデータ量が,大きなバイナリを含まないためです. >> とりあえず,ets が管理してるデータ量に,Erlang VM が管理している全バイナリデータ量を加算したものを返しています. >> かなり大きめの値が返ります. >> また,ガベージコレクションのタイミングによっては,古い値が消されても,データ量が減らなかったりするようです. >> 自前でデータ量を計算した方がいいですかねぇ.. >> とはいえ,ets/dets のオーバヘッド (key のためのインデックスなど) がよくわからないので,正確な値を計算することは困難だと思っているのですが. >> >> cooldaemon さま: >> curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. >> >> shino さま: >> 二つのバージョンが返ってしまった数の累計は,どういう風に得るのが適切だと思いますでしょうか. >> >> -- >> Takeru INOUE <tak...@gm...> >> > > > > -- > Takeru INOUE <tak...@gm...> > > ------------------------------------------------------------------------------ > Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) > software. With Adobe AIR, Ajax developers can use existing skills and code to > build responsive, highly engaging applications that combine the power of local > resources and data with the reach of the web. Download the Adobe AIR SDK and > Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com > _______________________________________________ > Kai-devel-ja mailing list > Kai...@li... > https://lists.sourceforge.net/lists/listinfo/kai-devel-ja > -- cooldaemon |
From: Takeru I. <tak...@gm...> - 2009-02-08 14:45:22
|
ひとつ書き忘れました. N,R,W の設定名は,それぞれ n, r, w としています. しかし,stats のほうでは 3つまとめて kai_quorum という名前にしてみました. STAT kai_quorum 3,2,2 のようなのが返ってきます. というわけで,現時点では設定名と統計名がずれています. n,r,w はわかりにくい (一文字というのもよくない) ので,quorum にしたほうがいいのかなと思ってみたりもするのですが,今さら変更するのもどうかなと思ってみたり. どうですかねぇ? 2009/2/8 Takeru INOUE <tak...@gm...>: > ざっと stats を実装してみました. > 取得できる統計値は kai-users-ja を見てください. > > 以下は開発者向けのコメントと相談です. > > bytes (ローカルストレージのデータ量) についてです. > ets では正確なデータ量を得ることができませんでした. > これは,ets が管理しているデータ量が,大きなバイナリを含まないためです. > とりあえず,ets が管理してるデータ量に,Erlang VM が管理している全バイナリデータ量を加算したものを返しています. > かなり大きめの値が返ります. > また,ガベージコレクションのタイミングによっては,古い値が消されても,データ量が減らなかったりするようです. > 自前でデータ量を計算した方がいいですかねぇ.. > とはいえ,ets/dets のオーバヘッド (key のためのインデックスなど) がよくわからないので,正確な値を計算することは困難だと思っているのですが. > > cooldaemon さま: > curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. > > shino さま: > 二つのバージョンが返ってしまった数の累計は,どういう風に得るのが適切だと思いますでしょうか. > > -- > Takeru INOUE <tak...@gm...> > -- Takeru INOUE <tak...@gm...> |
From: Takeru I. <tak...@gm...> - 2009-02-08 14:41:22
|
ざっと stats を実装してみました. 取得できる統計値は kai-users-ja を見てください. 以下は開発者向けのコメントと相談です. bytes (ローカルストレージのデータ量) についてです. ets では正確なデータ量を得ることができませんでした. これは,ets が管理しているデータ量が,大きなバイナリを含まないためです. とりあえず,ets が管理してるデータ量に,Erlang VM が管理している全バイナリデータ量を加算したものを返しています. かなり大きめの値が返ります. また,ガベージコレクションのタイミングによっては,古い値が消されても,データ量が減らなかったりするようです. 自前でデータ量を計算した方がいいですかねぇ.. とはいえ,ets/dets のオーバヘッド (key のためのインデックスなど) がよくわからないので,正確な値を計算することは困難だと思っているのですが. cooldaemon さま: curr_connections (kai_tcp_server のアクティブプロセス数) は,どういう風に得るのが適切だと思いますでしょうか. shino さま: 二つのバージョンが返ってしまった数の累計は,どういう風に得るのが適切だと思いますでしょうか. -- Takeru INOUE <tak...@gm...> |
From: Takeru I. <tak...@gm...> - 2008-12-08 13:27:41
|
0.3.0 リリースしました. 2008/12/8 Takeru INOUE <tak...@gm...>: >>> # そろそろ、次のリリースになるのでしょうか? >> >> そうしようかなぁ. >> 新ノードの join を簡単にするコードを書いてからと思ってるんだけど,遅くなりそうだったらリリースしちゃいます. > > 遅くなりそうなのと,バグもとれてきているので,近いうちに v0.3.0 をリリースします. > > 今回の目玉は Vector Clocks と dets 対応かな? > > * 0.3.0 released: > - Vector Clocks algorithm is introduced for concurrency control > - dets is newly added to local storage options > - kai_api module was renamed to kai_rpc > - Configuration parameters api_port and api_max processes were also to > rpc_port and rpc_max_processes, respectively > - Some bugs related to memcache protocol are fixed: thx T. Hashimoto > > >>> --- >>> shino >>> >> >> >> >> -- >> Takeru INOUE <tak...@gm...> >> > > > > -- > Takeru INOUE <tak...@gm...> > -- Takeru INOUE <tak...@gm...> |
From: Takeru I. <tak...@gm...> - 2008-12-08 13:10:41
|
>> # そろそろ、次のリリースになるのでしょうか? > > そうしようかなぁ. > 新ノードの join を簡単にするコードを書いてからと思ってるんだけど,遅くなりそうだったらリリースしちゃいます. 遅くなりそうなのと,バグもとれてきているので,近いうちに v0.3.0 をリリースします. 今回の目玉は Vector Clocks と dets 対応かな? * 0.3.0 released: - Vector Clocks algorithm is introduced for concurrency control - dets is newly added to local storage options - kai_api module was renamed to kai_rpc - Configuration parameters api_port and api_max processes were also to rpc_port and rpc_max_processes, respectively - Some bugs related to memcache protocol are fixed: thx T. Hashimoto >> --- >> shino >> > > > > -- > Takeru INOUE <tak...@gm...> > -- Takeru INOUE <tak...@gm...> |
From: Takeru I. <tak...@gm...> - 2008-12-04 14:52:37
|
いつもいつもありがとうございます. 不明コマンドが送られたときの戻り値を,ケアレスミスで間違えていました.. trunk/ (revision 103) で直っています. 2008/12/4 Tomoya Hashimoto <tom...@gm...>: > 橋本です。 > > リビジョン102で試してみたところ、ばっちり動きました。PHPのmemcachedクライアントからも問題なく動作しました。 > > 手動でコマンドをkaiに送っていたときに思ったのですが、エラーの時の動き方がmemcachedと違う場合があります。 > ちゃんと調べていないのですが、memcachedは"ERROR"と返して接続を維持するのに対して、kaiは切断してしまう点が異なります。様々な言語にmemcachedクライアントが実装されていますが、この挙動の違いに引っ掛かる実装があるかもしれないと思いました。 > > 2008/12/03 23:56 Takeru INOUE <tak...@gm...>: >> いつもありがとうございます. >> >>> delete <key> [<time>] [noreply]\r\n >> >> time の存在を考慮していませんでしたので,修正しました. >> 最新の trunk/ をチェックしてください. >> >> time = 0 であれば正常に動作します. >> 0 以外のときには,エラーが返ります. >> >> >> 2008/12/3 Tomoya Hashimoto <tom...@gm...>: >>> 橋本です。 >>> >>> deleteの挙動について質問です。 >>> >>> memcachedのプロトコル仕様書ではdeleteは以下のように定義されています。 >>> >>> delete <key> [<time>] [noreply]\r\n >>> >>> ですが、kaiにこの様式で送るとコネクションを切られます。 >>> >>> [t-hashi@gtp301 work]$ telnet gtp205 11211 >>> Trying 172.20.31.205... >>> Connected to gtp205 (172.20.31.205). >>> Escape character is '^]'. >>> set hoge 0 0 10 >>> 0123456789 >>> STORED >>> get hoge >>> VALUE hoge 0 10 >>> 0123456789 >>> END >>> delete hoge 0 <- ここ >>> Connection closed by foreign host. >>> [t-hashi@gtp301 work]$ >>> >>> timeをつけると問答無用で切断されます。timeをつけないと期待通りに動きます。 >>> >>> [t-hashi@gtp301 work]$ telnet gtp205 11211 >>> Trying 172.20.31.205... >>> Connected to gtp205 (172.20.31.205). >>> Escape character is '^]'. >>> set hoge 0 0 10 >>> 0123456789 >>> STORED >>> get hoge >>> VALUE hoge 0 10 >>> 0123456789 >>> END >>> delete hoge >>> DELETED >>> get hoge >>> END >>> quit >>> Connection closed by foreign host. >>> >>> PHPでサンプルコードを書くとdeleteができないように見えて発見しました。tcpdumpしてみるとPHPのmemcachedクライアントは >>> timeをつけて送信していました。結果的にPHPからdeleteを送った後は予期しない動きになってしまします。 >>> >>> ------------------------------------------------------------------------- >>> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge >>> Build the coolest Linux based applications with Moblin SDK & win great prizes >>> Grand prize is a trip for two to an Open Source event anywhere in the world >>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>> _______________________________________________ >>> Kai-users-ja mailing list >>> Kai...@li... >>> https://lists.sourceforge.net/lists/listinfo/kai-users-ja >>> >> >> >> >> -- >> Takeru INOUE <tak...@gm...> >> > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Kai-users-ja mailing list > Kai...@li... > https://lists.sourceforge.net/lists/listinfo/kai-users-ja > -- Takeru INOUE <tak...@gm...> |
From: Tomoya H. <tom...@gm...> - 2008-12-04 07:42:43
|
橋本です。 リビジョン102で試してみたところ、ばっちり動きました。PHPのmemcachedクライアントからも問題なく動作しました。 手動でコマンドをkaiに送っていたときに思ったのですが、エラーの時の動き方がmemcachedと違う場合があります。 ちゃんと調べていないのですが、memcachedは"ERROR"と返して接続を維持するのに対して、kaiは切断してしまう点が異なります。様々な言語にmemcachedクライアントが実装されていますが、この挙動の違いに引っ掛かる実装があるかもしれないと思いました。 2008/12/03 23:56 Takeru INOUE <tak...@gm...>: > いつもありがとうございます. > >> delete <key> [<time>] [noreply]\r\n > > time の存在を考慮していませんでしたので,修正しました. > 最新の trunk/ をチェックしてください. > > time = 0 であれば正常に動作します. > 0 以外のときには,エラーが返ります. > > > 2008/12/3 Tomoya Hashimoto <tom...@gm...>: >> 橋本です。 >> >> deleteの挙動について質問です。 >> >> memcachedのプロトコル仕様書ではdeleteは以下のように定義されています。 >> >> delete <key> [<time>] [noreply]\r\n >> >> ですが、kaiにこの様式で送るとコネクションを切られます。 >> >> [t-hashi@gtp301 work]$ telnet gtp205 11211 >> Trying 172.20.31.205... >> Connected to gtp205 (172.20.31.205). >> Escape character is '^]'. >> set hoge 0 0 10 >> 0123456789 >> STORED >> get hoge >> VALUE hoge 0 10 >> 0123456789 >> END >> delete hoge 0 <- ここ >> Connection closed by foreign host. >> [t-hashi@gtp301 work]$ >> >> timeをつけると問答無用で切断されます。timeをつけないと期待通りに動きます。 >> >> [t-hashi@gtp301 work]$ telnet gtp205 11211 >> Trying 172.20.31.205... >> Connected to gtp205 (172.20.31.205). >> Escape character is '^]'. >> set hoge 0 0 10 >> 0123456789 >> STORED >> get hoge >> VALUE hoge 0 10 >> 0123456789 >> END >> delete hoge >> DELETED >> get hoge >> END >> quit >> Connection closed by foreign host. >> >> PHPでサンプルコードを書くとdeleteができないように見えて発見しました。tcpdumpしてみるとPHPのmemcachedクライアントは >> timeをつけて送信していました。結果的にPHPからdeleteを送った後は予期しない動きになってしまします。 >> >> ------------------------------------------------------------------------- >> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge >> Build the coolest Linux based applications with Moblin SDK & win great prizes >> Grand prize is a trip for two to an Open Source event anywhere in the world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Kai-users-ja mailing list >> Kai...@li... >> https://lists.sourceforge.net/lists/listinfo/kai-users-ja >> > > > > -- > Takeru INOUE <tak...@gm...> > |
From: Takeru I. <tak...@gm...> - 2008-12-03 14:56:12
|
いつもありがとうございます. > delete <key> [<time>] [noreply]\r\n time の存在を考慮していませんでしたので,修正しました. 最新の trunk/ をチェックしてください. time = 0 であれば正常に動作します. 0 以外のときには,エラーが返ります. 2008/12/3 Tomoya Hashimoto <tom...@gm...>: > 橋本です。 > > deleteの挙動について質問です。 > > memcachedのプロトコル仕様書ではdeleteは以下のように定義されています。 > > delete <key> [<time>] [noreply]\r\n > > ですが、kaiにこの様式で送るとコネクションを切られます。 > > [t-hashi@gtp301 work]$ telnet gtp205 11211 > Trying 172.20.31.205... > Connected to gtp205 (172.20.31.205). > Escape character is '^]'. > set hoge 0 0 10 > 0123456789 > STORED > get hoge > VALUE hoge 0 10 > 0123456789 > END > delete hoge 0 <- ここ > Connection closed by foreign host. > [t-hashi@gtp301 work]$ > > timeをつけると問答無用で切断されます。timeをつけないと期待通りに動きます。 > > [t-hashi@gtp301 work]$ telnet gtp205 11211 > Trying 172.20.31.205... > Connected to gtp205 (172.20.31.205). > Escape character is '^]'. > set hoge 0 0 10 > 0123456789 > STORED > get hoge > VALUE hoge 0 10 > 0123456789 > END > delete hoge > DELETED > get hoge > END > quit > Connection closed by foreign host. > > PHPでサンプルコードを書くとdeleteができないように見えて発見しました。tcpdumpしてみるとPHPのmemcachedクライアントは > timeをつけて送信していました。結果的にPHPからdeleteを送った後は予期しない動きになってしまします。 > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Kai-users-ja mailing list > Kai...@li... > https://lists.sourceforge.net/lists/listinfo/kai-users-ja > -- Takeru INOUE <tak...@gm...> |
From: Tomoya H. <tom...@gm...> - 2008-12-03 07:53:39
|
橋本です。 deleteの挙動について質問です。 memcachedのプロトコル仕様書ではdeleteは以下のように定義されています。 delete <key> [<time>] [noreply]\r\n ですが、kaiにこの様式で送るとコネクションを切られます。 [t-hashi@gtp301 work]$ telnet gtp205 11211 Trying 172.20.31.205... Connected to gtp205 (172.20.31.205). Escape character is '^]'. set hoge 0 0 10 0123456789 STORED get hoge VALUE hoge 0 10 0123456789 END delete hoge 0 <- ここ Connection closed by foreign host. [t-hashi@gtp301 work]$ timeをつけると問答無用で切断されます。timeをつけないと期待通りに動きます。 [t-hashi@gtp301 work]$ telnet gtp205 11211 Trying 172.20.31.205... Connected to gtp205 (172.20.31.205). Escape character is '^]'. set hoge 0 0 10 0123456789 STORED get hoge VALUE hoge 0 10 0123456789 END delete hoge DELETED get hoge END quit Connection closed by foreign host. PHPでサンプルコードを書くとdeleteができないように見えて発見しました。tcpdumpしてみるとPHPのmemcachedクライアントは timeをつけて送信していました。結果的にPHPからdeleteを送った後は予期しない動きになってしまします。 |
From: Takeru I. <tak...@gm...> - 2008-11-28 14:22:38
|
2008/11/28 shunichi shinohara <shi...@gm...>: > 2008/11/26 Takeru INOUE <tak...@gm...>: >> そろそろ trunk にマージします? > > trunk にマージしました。 > 中身はブランチのものそのままです。 > > ずいぶんおそくなってもうしわけないです。 おつかれっす. > # そろそろ、次のリリースになるのでしょうか? そうしようかなぁ. 新ノードの join を簡単にするコードを書いてからと思ってるんだけど,遅くなりそうだったらリリースしちゃいます. > --- > shino > -- Takeru INOUE <tak...@gm...> |
From: shunichi s. <shi...@gm...> - 2008-11-28 13:37:01
|
2008/11/26 Takeru INOUE <tak...@gm...>: > そろそろ trunk にマージします? trunk にマージしました。 中身はブランチのものそのままです。 ずいぶんおそくなってもうしわけないです。 # そろそろ、次のリリースになるのでしょうか? --- shino |
From: Takeru I. <tak...@gm...> - 2008-11-26 14:45:38
|
そろそろ trunk にマージします? 2008/11/16 Takeru INOUE <tak...@gm...>: >>> get で複数バージョンが返されていたかも未チェックです. >>> このチェックは,kai_coordinator でログを出力させるしかないですよね? >> >> いちおう、memcached クライアントで、返ってきたデータの数をチェックすること >> は可能だとおもいます。クライアントの実装に依存してしまうので、コード読む >> 必要がありますが... >> # Ruby のある実装(memcache-client)は、key のリストを渡して、 >> # get(s) が呼ばれて、戻りは、 key => value の Hash になっていたので、 >> # kai には合わない > > Perl で見たときには,コードを修正する必要がありました. > やはり,Kai にログを出力させた方が早いかな.. > >>> - coordinator では vclock を呼ばないほうが,依存関係を少なくできる? >> >> ええと、今のところ、 coordinator で vector clocks のインクレメントを >> して、store で新旧の衝突チェック、という雰囲気で実装していました。 >> coordinate_put(Data) -> >> [...] >> Data1 = >> case kai_store:get(Data#data{bucket=Bucket}) of >> PreviousData when is_record(PreviousData, data) -> >> PreviousData; >> undefined -> >> #data{key=Key, vector_clocks=vclock:fresh()} >> end, >> {ok, Data2} = kai_version:update(Data1), >> [...] >> このあたりを、kai_store:get_and_update_vector_clocks/1 みたいな >> 関数を作って、移動したほうがいいんじゃないか? ということでしょうか? > > 僕の中では,vclock.erl はモジュールの単位として細かすぎるかなと思っていて,提供してもらった経緯がなければ kai_version > にまとめて実装しただろうという考えがあるので,kai_version 以外から呼び出さない方がいいかなと感じてしまったまででした. > kai_version では,VectorClocks の初期化状態をチェックする必要がでてきますが. > > 大した話ではないので,今のままでもいいと思います. > 依存関係を考慮した設計などは皆さんの方が詳しいと思うので,参考程度に捉えてください. > > -- > Takeru INOUE <tak...@gm...> > -- Takeru INOUE <tak...@gm...> |
From: Takeru I. <tak...@gm...> - 2008-11-24 13:30:12
|
cooldaemon さんもいうように,Kademlia 以外のアルゴリズムを採用することで問題ないと思うのですが,参考までに,Kai に Kademlia を適用するときの注意点をまとめてみました. - 完全なノード一覧を得られない.2.4節にあるように,k 以上のノードを覚えることで解決できるかも. - FIND のメッセージ数が多く,latency が大きそう.ホップ数が log_2^b(n) であっても,各ホップでα以上のメッセージが送信されるわけだし,システム負荷がかなり高くなりそうだ.2.4節の方法で,1-hop DHT のように振る舞えるか? - 新参ノードがデータをコピーし終わる前に,その存在が知られてしまう. - パラメータの柔軟性に乏しく,k (デフォルト 20) の複製が作られてしまう. Erlang の Kademlia 実装は,それだけで存在価値があると思うので,仕上げてしまうのがいいかなと思います. 必要であれば,この ML を使ってください. ところで,完成した ermlia と ermdia の違いはどのへんになりそうでしょうか? -- Takeru INOUE <tak...@gm...> |
From: shunichi s. <shi...@gm...> - 2008-11-17 23:53:06
|
しのはらです。 2008/11/17 Takeru INOUE <tak...@gm...>: > # 開発の話になったので,kai-devel-ja のみで. > > 7月後半に,put でのバージョンチェックが議論になったけど,あれはクライアントが VectorClocks を送ってくるという前提になってました. > Kai の場合は,クライアントに VectorClocks が渡らないので,Dynamo とは状況が違ってますね. そうですね。下に書きますが、VC のマージをどこで実装するか / マージをおこなうかどうか? も話したいな、とおもっていました。 > 複数の checksum が混合されているときは,kai_coordinator で cas unique を分割してから > (実際の分割関数は kai_version に実装するんだろうけど),store に送るのかな? > checksum の比較と VectorClocks の更新のタイミングも厳密に考慮すると,cas の導入は kai_coordinator > の実装を複雑にしかねないかも… > 慎重に進めた方がいいかなぁ. vector clocks の比較/更新と(d)ets への更新はアトミックである必要があるので、 kai_store プロセスの中で行おうと考えていました。 gen_server は mutex を兼ねている(とも見れる)ので、ここで実装するのが自然だと 考えます。 問題は以下の 2 点くらいかな? 1. coordinator で VC の整合性をチェックしないとすると、kai_store の更新が 部分的に失敗する場合がある # (n,r,w)=(3,2,2) でいくと、一応問題はないはず 2. VC のマージをどこで実装するか? 実装するならば、coordinator でやるか? 実装イメージ - cas コマンドを受けとる - レプリカからデータを集める - VC と cas_unique の整合性チェック - VC のマージ - 格納(レプリカノードへのばらまき) このやりかたでも、kai_store での VC の比較/(d)ets への更新は必要 すごく処理が重そう :-< 場合によっては、memcached プロトコルをちょっと破るようなことも考えないと いけないかもしれません。 というわけで、cas の実装については、勉強会のときに話に入れるので議論させてください。 ちょっと蛇足 > put (set) の場合は,クライアントがバージョンに関する情報をまったく > 送ってこないので, memcached への、dynamo のコマンドの対応としては、以下を考えていました。 % DYNAMO -> memcached GET -> gets PUT -> cas memcached の set は付け足しくらいかなぁ、と f(--) -- shino |