[Ultramonkey-l7-develop 715] Re: ultramonkey-l7 V3 の新規モジュール開発について

Back to archive index

TATEISHI Katsuyuki tatei****@oss*****
2011年 8月 8日 (月) 12:00:35 JST


立石です。

Shinya TAKEBAYASHI <omoik****@gmail*****>-san wrote:

>> > 1. キーワードはリクエストのどこを捜査するのか(リクエスト行
>> >     (PATH, パラメータ) or ヘッダ全体 or (POSTなどの)ボディを含
>> >     む)。
>> > 
>> >     マニュアルを見る限りではv2ではヘッダの「リクエスト行」と
>> >     「Host フィールド」それぞれに専用のオプションが用意されて
>> >     います。
>> > 
>> >     いただいた図においても、www.YYY.com という文字列で振り分け
>> >     るのであれば、Hostフィールドを見なければなりませんし、図に
>> >     はありませんが、たとえば
>> >     「http://www.YYY.com/path/to/contents.html」というリクエス
>> >     トの /path 部分で振り分けたいのであればリクエスト行を見な
>> >     ければなりません。
>> 
>> ボディ見るのは、厳しいかもね〜。
>> HTML解析しないといけないし。

ボディを見るとして、の話ですが、HTML解析は不要だと思います。

>> V2みたいにリクエストとホストで分けるほうがいいかな。利用者も
>> これまでと同じ設定方法のほうがわかりやすいだろうし。
> 
>   リクエストと HOST を見るのが良いと思います.
>   ボディを見ないといけない場合って・・・なんでしょう.

私も強く必要だと思っているわけではありませんが、以下のような
場合が考えられないでしょうか:

 1. あるフォームでGETにパラメータを渡すページがあり、そのパラ
    メータを URL モジュールでマッチさせて振り分けていた
 2. そのフォームで大きなデータを送ることになり(ファイルアップ
    ロード等)、GET から POST に変更する必要が生じた
 3. しかし URL モジュールはリクエストボディを見て振り分けでき
    ない。困った。

> 
> 
>> > 2. 複数の VirtualService のキーワードにマッチした場合、どの
>> >     Virtual Service にいくのか。(設定ファイルに書かれた上のほ
>> >     うだけに振り分けられる、とか)
>> 
>> V2だと一番最初にヒットしたやつ(一番上にかかれたやつ)のルールに従う
>> だったかな。とりあえず、それでいいとおもう。

l7directord.cf に書いた順番がよさそうですね。

あと URL モジュールを使った Virtual Service しか存在せず、か
つどの Virtula Service にもマッチしなかった場合はどうします
か?

>> > 3. 継続的HTTPコネクション(HTTP KeepAlive)における連続したリク
>> >     エストをどう扱うか。
>> > 
>> >     v2 は HTTP リクエスト単位を意識していないので、HTTP
>> >     KeepAliveが有効な環境では、一度 URL モジュールでリアルサー
>> >     バが決定してしまうと、同一の TCP セッション内のリクエスト
>> >     はすべて同一のサーバに振られていたように記憶しています。こ
>> >     れは望ましい動作ではないと思いますので、v3 ではリクエスト
>> >     ごとに正しい宛先に振るようにすべきだと思います。
>> 
>> この3番の状況が、うまくイメージできなかったw
>> KeepAliveが有効だとソケットをcloseしないから、その間おなじ
>> サーバに振られるってことかな?

そうです。

>> 
>> リアルサーバのApacheがKeepAlive有効だと・・・そか、UltraMonkeyと
>> リアルサーバの間の接続がクローズされずにつなぎっぱになるのか。
>> その場合、UltraMonkeyとクライアントの間は、1リクエスト終わると
>> すぐクローズするのかな?それともKeepAlive的にクローズしないのかな?
> 
>   猿とリアルサーバの間も繋ぎっぱなしです.
>   一番最初のリアルサーバ未定のときを除いて,どちらかのコネクションが
> TCP レイヤで切断されない限りは,片方だけ生き残っていることは
> 無いと認識しています.

竹林さんと同じ認識です。

UltraMonkey-L7 はリアルサーバあるいはクライアントからのクロー
ズをそのまま他方に伝えるだけで、コネクションプーリングしたり
はできないはず。

> 
> 
>> URLモジュールに関係なく、その辺の仕様の整理が必要かも。
> 
>   そうですね.

クライアント:リアルサーバの接続が1:nになるような状況では、い
くつか考えないといけないことがありそうです。

・あるリアルサーバからのコネクションクローズ時に、別のリアル
  サーバとのコネクションが生きている場合がある

・通常ではなさそうなレスポンスをサーバが返すことになる。

  たとえば、サーバはレスポンスヘッダの Keep-Alive フィールド
  にあと何回リクエストを受け付けられるかを入れて返してきます
  が(max=100 など)、これがリクエストのたびに変わる可能性があ
  ります。これがプロトコル仕様上問題があるかどうかはわかりま
  せん=対応しなくていいかも

とか。

もちろん、UltraMonkey-L7 が
・クライアント-UML7間におけるHTTPサーバとしての動作
・UML7-リアルサーバ間におけるHTTPクライアントとしての動作
についてそれぞれ正しいHTTPを喋るというのが、あるべき姿だと思
います。


> 
> 
>> > あと、これはURLモジュールというよりも本体側の仕様なのですが、
>> > モジュールを単体でビルドできるようにしておくと、独自のモジュー
>> > ルを作りたい人が嬉しいのではないかと思います。
>> 
>> さらに、Firefoxの拡張機能のように、動的にロード・アンロードできると
>> 嬉しいと思いま〜す('∇')ノ
>> 
>> ・・・まあ、難しいと思いますけどw
>> # 単に動的ロードとアンロードは、dlopen系の関数で出来ますが
>> # (C++/Boostだとどうやるのかは知んないw)、「安全に」「通信中
>> # データに影響を与えないように」動的ロード・アンロードできる
>> # 仕組みを実装するのが大変。
> 
>   既存のコネクションを救済する必要はないと思います.
>   あっても困ることはないのですが,設変はメンテナンスウィンドウで
> 実施するもの = サービスを閉塞した状態で実施するものと
> 割り切ってしまってもいいと思います.

竹林さんと同じ意見です。

サーバプログラムという用途を考えると、コスト効果は低いかなと
思います。ないと困る or あると大変便利な機能かといわれるとそ
うでもない気がしますし。

> 
> 
>> > 具体的にはモジュールのビルドに必要なヘッダファイル、ライブラ
>> > リをシステムにインストールするように変更することを意図してい
>> > ます。
>> > 
>> > 現状ではヘッダファイルや(スケジューラ/プロトコルモジュール以
>> > 外の)ライブラリはインストールされないので、モジュールのビルド
>> > には展開したソースコード(とビルドしたライブラリ)が必要です。
>> 
>> まあ、libuml7proto.soのライブラリとヘッダをセットにした、
>> devパッケージはあるといいかもですねぇ。
> 
>   これは必要ですね.
>   v2 だとプロトコルモジュール/スケジューラモジュールを
> ビルドするのに必要なヘッダファイルを切り出すくらいなら
> すぐにできそうですが,v3 だとどうなんでしょう.

これは共有ライブラリ化 && ヘッダといっしょにインストールとい
う方向でよさそうですね。

--
TATEISHI Katsuyuki <tatei****@oss*****>




Ultramonkey-l7-develop メーリングリストの案内
Back to archive index