二重化機能

概要

x-Servletを複数台のサーバで運用するような大~中規模のサイトにおいては、ロードバランサ(負荷分散機)を用いて負荷分散するようなケースが多々あります。この場合、x-Servletのセッションを維持するために端末からのリクエストはセッションを生成したx-Servletと再接続するようにロードバランサを設定する必要があります。x-Servlet二重化機能はこのようなロードバランサの動作をサポートするためにURLリライトによる二重化機能を提供します。

設定

設定はxproxy.propertiesのserverIDrequestExchanger.serverIDPrefixrequestExchanger.serverIDSuffixを変更することで行います。

形式

※x-Servlet Version2.9.0 以降では background-image のリンク変換に対応しましたが、サーバIDに「(」「)」が含まれていると iPhone で画像が表示できない問題が確認されたため、初期設定値が変更されました。

xproxy.properties(Version2.8.3まで)

## 負荷分散機の背後にx-Servletをおく場合に設定する
serverID=xServlet
requestExchanger.serverIDPrefix=(_
requestExchanger.serverIDSuffix=_)

xproxy.properties(Version2.9.0以降)

## 負荷分散機の背後にx-Servletをおく場合に設定する
serverID=xServlet
requestExchanger.serverIDPrefix=_-
requestExchanger.serverIDSuffix=-_

xproxy.propertiesにserverIDの設定がされていた場合、x-Servletは端末に出力するリンクURLをxproxy.propertiesの設定に従って書き換えます。

serverID=A
requestExchanger.serverIDPrefix=_-
requestExchanger.serverIDSuffix=-_

というようにxproxy.propertiesに設定されている場合、通常

<a href="/contents/login.jsp?_xpxi=xxxx">

というように出力されるリンクは

<a href="/_-A-_/contents/login.jsp?_xpxi=xxxx">

というように書き換えられて出力されます。相対PATHで出力されるような

<img src="img/top.gif?_xpxi=xxxx">

というようなリンクも

<img src="/_-A-_/contents/img/top.gif?_xpxi=xxxx">

というように絶対PATHに変換・書き換えを行なうことでロードバランサの動作設定をサポートします。

同様に

serverID=B
requestExchanger.serverIDPrefix=_-
requestExchanger.serverIDSuffix=-_

と設定されている場合

<a href="/_-B-_/contents/login.jsp?_xpxi=xxxx">

のようにリンクは出力されます。
ロードバランサ側はリクエストURLの先頭の"/_-A-_","/_-B-_"を目安にしてx-Servletとの接続を維持するように設定することでx-Servletと端末間での接続維持が可能になります。

ロードバランサから振り分けられたリクエストを受け取ると x-Servlet はURLから付加された serverID とセッションパラメータを除去してWebサーバ側にリクエストします。

x-Servlet受け取り時

/_-A-_/contents/login.jsp?_xpxi=xxxx

Webサーバリクエスト時

/contents/login.jsp

注意点

  • サーバIDおよび、プレフィックスとサフィックスに文字長の制限はありませんが、全体のURLの長さに影響するため、できるだけ少ない文字数を使用することを推奨します。
  • 端末によってはサーバIDの文字列にURIの予約文字が使用されているとURLエンコードしてリクエストするものがあります。
    リクエストが正常に処理されない場合がありますので以下の文字はサーバIDに使用しないことを推奨します。
    URI予約文字 : / ? # [ ] @ ! $ & ' ( ) * + , ; =
  • 元コンテンツのリンクが絶対URIで表記されていた場合、その絶対URIがcontentsRule.xmlに登録されているいずれかの ContentsRule に一致しなければx-Servletはその絶対URIに対してサーバ識別文字列を付与しません。
    また、元コンテンツに <base> タグを使用している場合、x-Servletは相対パスや絶対パスで記述されたリンクを絶対URIに変換しますので、絶対URI使用時と同じ条件でサーバ識別文字列を付与しません。
  • x-Servletの二重化機能は、URLリライトを使用しているため、フェイルオーバーやハートビート、障害時などでのセッションの引継ぎは行われません。
  • URLリライトによる二重化機能を使用しているため、レイヤー7に対応したロードバランサが必要です。
  • x-Servletの冗長化を行っていて片系に障害が発生した場合、障害サーバ上で保持していたx-Servletのセッション情報が失われますがエラーにはなりません。しかし、元コンテンツ側に想定外のパラメータが送信される可能性があります。
  • Version2.9.0 以降ではサーバIDの初期設定値が変更されていますので contentsRule.xml にサーバIDを含めた URL を識別するルールを設定している場合は注意が必要です。
TOP