アカウントキャッシュの仕組み
アカウントキャッシュによる高速化
ユーザ・グループ情報はアカウントキャッシュとして、組織階層情報はアカウントリストキャッシュとして保持しており、Sm@rtDBでアカウント情報を取得する際はこのキャッシュから取得しています。
キャッシュに情報がない場合は、ユーザ・グループ情報と組織階層情報をもつアカウント一次キャッシュにアクセスします。アカウントキャッシュとアカウントリストキャッシュは二次キャッシュとして扱われます。
アカウント情報取得時に、まず二次キャッシュを確認し、ない場合は一次キャッシュから取得し、DBアクセスは発生しません。これにより、DBへの負荷が軽減され、パフォーマンスが向上します。
一次キャッシュはtomcat起動時に作成されます。アカウント一次キャッシュの再作成時には、二次キャッシュであるアカウントキャッシュ、アカウントリストキャッシュも再作成します。再作成のタイミングは後述する設定に基づきます。
- アカウント一次キャッシュの設定(Sm@rtDB Ver.2.0.1以降では変更不可)
アカウント一次キャッシュはdefault.xmlで有効/無効を設定できます。デフォルトは有効です。
※ 無効“false”に設定すると、アカウント一次キャッシュは作成されません。Sm@rtDB Ver.2.0.1以降ではアカウント一次キャッシュが必須となっていますので無効にしないでください。
- default.xmlの設定例
<!—-アカウント一次キャッシュの設定-->
<system.account>
<fast-cache-enabled>true</fast-cache-enabled>
</system.account>
名称 | 初期値 | 説明 |
---|---|---|
default-values.system.account | ||
fast-cache-enabled | true | アカウント一次キャッシュの有効・無効を設定します。 true:有効。一次キャッシュを作成する。 false:無効。一次キャッシュを作成しない。 (Ver.1.3.2以前の動作と同様) |
- アカウント二次キャッシュ作成の設定
一次キャッシュが有効の場合には、一次キャッシュの再作成時に二次キャッシュであるアカウントキャッシュとアカウントリストキャッシュも再作成されます。しかし存在するアカウント数によっては、起動に時間がかかるため、これを無効にすることも可能です。※サーバで無効に設定されている場合、アクセス集中時にレスポンス遅延が発生する事が予想されるため、推奨できません。
無効にした場合は、アカウント情報取得時には一次キャッシュが参照され、その際に随時二次キャッシュが生成されていきます。
※ アカウントキャッシュはアカウントリストキャッシュ生成時に作成されます。そのため、以下の設定はアカウントリストキャッシュの設定のみになります。
- default.xmlの設定例
<!—-アカウントリストキャッシュの先読み設定-->
<system.account>
<enable-account-list-preload>true</enable-account-list-preload>
</system.account>
名称 | 初期値 | 説明 |
---|---|---|
default-values.system.account | ||
enable-account-list-preload | true | アカウント二次キャッシュ再作成の有効・無効を設定します。 true:有効。起動時に二次キャッシュも作成する false:無効。起動時に二次キャッシュを作成しない ※ アクセスが集中するようなサーバでの無効設定は推奨できません。 |
アカウント一次キャッシュの自動更新のタイミング
一次キャッシュが有効の場合のキャッシュの更新タイミングには、以下があります。
① tomcatの再起動時
② アカウントキャッシュ更新情報ファイルが更新されている場合
③ 一次キャッシュ再作成の間隔が設定されている場合
存在しているアカウント数によってキャッシュの生成時間には差があります。どの方法を選択するかは、環境に応じて選択してください。
- ①のtomcatの再起動時について
tomcatを再起動する際は、一次キャッシュの再作成が行われます。
- ②のアカウントキャッシュ更新情報ファイルについて
アカウント一次キャッシュが有効の時、一次キャッシュを再作成する基準となるファイルが用意されています。このファイルの更新日時をチェックして更新されていれば、アカウント一次キャッシュが再作成されます。このファイルをチェックする間隔はdefault.xmlで設定できます。
- default.xmlの設定例
<!--キャッシュの更新情報ファイルをチェックする時間の設定-->
<system.account>
<expiration-check-interval>5</expiration-check-interval>
</system.account>
名称 | 初期値 | 説明 |
---|---|---|
default-values.system.account | ||
expiration-check-interval | 5 | キャッシュ更新情報ファイルをチェックする間隔を指定します。(単位は秒) |
一次キャッシュを再作成する基準となるキャッシュ更新情報ファイルは、デフォルトで以下のファイルに設定されています。
/home/DreamArts/data/system/.hibiki_account_expiration
また任意のファイルを指定することも可能です。その場合はdefault.xmlで設定します。
- default.xmlの設定例
<!—一次キャッシュ更新情報ファイル-->
<system.account>
<expiration-file>
/home/DreamArts/data/system/.hibiki_account_expiration
</expiration-file>
</system.account>
名称 | 初期値 | 説明 |
---|---|---|
default-values.system.account | ||
expiration-file | /home/DreamArts/data/system/ .hibiki_account_expiration |
任意のファイルを指定することも可能。 |
デフォルトの設定では、キャッシュ更新情報ファイルは更新されません。キャッシュ更新情報ファイルを定期的に更新するcronを設定することにより、一次キャッシュファイルを更新することも可能です。
キャッシュ更新情報ファイルを使用してアカウントキャッシュを更新する場合の注意
キャッシュ更新情報ファイルを使用してアカウントキャッシュを更新する場合、キャッシュ更新情報ファイルがSm@rtDBサーバ上のhibikiユーザから参照可能である必要があります。
- ③の一次キャッシュ再作成が設定されている場合
一次キャッシュ再作成の間隔を指定することも可能です。
アカウント一次キャッシュが有効の時、一次キャッシュを再作成する間隔をdefault.xmlで設定できます。
- default.xmlの設定例
<!—一次キャッシュを作り直す時間の設定-->
<system.account>
<fast-cache-recycle-time>0</fast-cache-recycle-time>
</system.account>
名称 | 初期値 | 説明 |
---|---|---|
default-values.system.account | ||
fast-cache-recycle-time | 0 | 一次キャッシュを再作成する間隔を指定します。0の場合は時間経過によるキャッシュの再作成はしません。(単位は秒) |
デフォルトでは、時間経過によるアカウント一次キャッシュの再作成は行われません。
アカウント一次キャッシュを使用しない場合の動作
アカウント一次キャッシュを使用しない場合(fast-cache-enabled=false)も直接二次キャッシュを作成する方式でアカウントキャッシュは作成されます。
-
一次キャッシュを使用しない場合に有効となる設定
-
アカウントキャッシュに関する設定
名称 | 初期値 | 説明 |
---|---|---|
default-values.system.account | ||
account-cache-age | 600000 | アカウントキャッシュの有効時間。単位は「ミリ秒」。(※1) |
cache-expiration-check-interval | 1000 | トリガーファイルの更新チェック間隔。単位は「ミリ秒」。 |
cache-expiration-check-max-trigger-size | 1000 | アカウントキャッシュの更新契機とするトリガーファイル内のアカウント更新数。 |
※1:一次キャッシュが有効の場合で一度もtomcatの再起動がなかった場合は1年毎に再作成されます。ここでの1年とは、86400(1日の秒数)*365.242222(1年)=31556927.9808(秒)を設定しています。
- アカウントリストキャッシュに関する設定
名称 | 初期値 | 説明 |
---|---|---|
default-values.system.account | ||
list-cache-age | 3600000 | アカウントリストキャッシュの有効時間。単位は「ミリ秒」(※1) |
list-cache-preload | 設定なし | 初回起動時の読み込み対象とするユーザ・グループのMIDもしくはGID。・・・※複数指定する場合はカンマ区切りで列挙してください。 |
list-cache-preload-wait | 10 | アカウントリストキャッシュ先読み処理実施時のスリープ時間。単位は「ミリ秒」。 |
※1:一次キャッシュが有効の場合で一度もtomcatの再起動がなかった場合は1年毎に再作成されます。
ここでの1年とは、86400(1日の秒数)*365.242222(1年)=31556927.9808(秒)を設定しています。
アカウントキャッシュの即時更新
アカウントキャッシュを更新するには前述の 【アカウント一次キャッシュの自動更新のタイミング】がありますが、別にアカウントキャッシュ更新のURLにアクセスする方法があります。この方法は即時反映させたい場合に向いています。以下詳細について説明します。
1. INSUITE®の管理権限ユーザでログインし、Sm@rtDBのトップ画面をひらく
INSUITE®の管理権限ユーザに指定されているユーザでログインし、Sm@rtDBのトップ画面をひらきます。
2. 以下のURLを実行する。
前項で開いた画面で以下のURLを指定します。
http://servername.dreamarts.co.jp /hibiki/NotifyAccountCacheExpiration.do
ご使用の環境のURLに 部分を追加してください。
上記を実施することで、アカウントキャッシュを即時更新することができます。
また、“expire=”の後にMIDを指定する事で、特定アカウントのみ更新も可能です。
http://servername.dreamarts.co.jp /hibiki/NotifyAccountCacheExpiration.do?expire=1000001
※ INSUITE®の組織世代管理機能をご利用の場合
INSUITE®の組織世代管理機能を使用しており、且つSm@rtDBの決裁ルート自動生成機能を使用している場合で、現在世代以外のアカウントキャッシュの更新を行う場合は、下記の通り "?msid=0&force=true" のオプションを付けたURLを指定して、更新を行ってください。(以下のURLでは現在世代は更新対象になりません。)
http://servername.dreamarts.co.jp /hibiki/NotifyAccountCacheExpiration.do?msid=0&force=true
- 実行例
結果にtrueと表示されれば成功です。
アカウントキャッシュを即時更新した場合、直接リクエストを受け取ったサーバ以外のサーバでは、ファイルサーバ上のトリガーファイルの更新をチェックすることでキャッシュを更新します。この場合、一次キャッシュの有効/無効に関わらず、cache-expiration-check-interval の値に従ってチェックされます。
- 即時更新実施時に使用される設定
名称 | 初期値 | 説明 |
---|---|---|
default-values.system.account | ||
cache-expiration-check-interval | 1000 | トリガーファイルの更新チェック間隔。単位は「ミリ秒」。 |
Alice機能(新アカウントキャッシュ機能)によるTomcat起動の高速化
Sm@rtDB Ver.3.2.4から、Tomcatの起動の高速化を図るため、アカウントキャッシュの構造を見直し新しいアカウントキャッシュ機能が追加されました。Alice機能が有効な場合には一旦DB上にアカウントキャッシュデータを保持するように変更されたことで従来よりTomcatの起動時間が大幅に短縮されます。
- 新機能はデフォルトでは無効になっており、利用するには初期化・設定が必要です。(初期化・設定方法は下記を参照)
- 新しいアカウントキャッシュ機能をAlice(Account List Cacheの略)機能と称し、従来の機能はAliceをオフにすることで利用可能です。(デフォルトはAliceはオフ)
- Alice機能はINSUITEのバージョンとして Ver.3.3.1以降のみサポートされ、それより前のバージョンでは動作しません。
- Alice機能を有効にした場合、Tomcat起動時にDB上のキャシュの内容は更新されませんので、INSUITEのアカウント更新及び上長・上長代行情報の更新を反映するにはアカウントキャッシュデータの更新(同期処理)が必要です。
-
アカウントキャッシュデータの更新(同期処理)には以下の方法があります。
-
即時更新(URL経由):
/hibiki/NotifyAccountCacheExpiration.do
→INSUITE側のアカウント情報に更新があれば同期処理を実行します。
※上長・上長代行情報のみの更新ではアカウント情報の更新とはみなされません。
/hibiki/NotifyAccountCacheExpiration.do?force=true (強制同期)
→強制的に同期処理を実行します。
- 即時更新(コマンド経由):
Sm@rtDBツールの "sync alice" コマンドで同期処理を実行します。
(強制同期のNotifyAccountCacheExpiration.doと同じ動作)
- 定期更新:
決まった時間など、定期的に更新処理が実行します。機能を有効にするには
定期更新を実行させるAPサーバで "alice.quartz-sync.enable"及び
"alice.quartz-sync.cron-expression" パラメータの設定が必要です。
※定期更新は強制同期ではありません。
設定ファイル
機能を有効にするには設定を追加する必要があります。
表 Alice機能利用設定
ファイル | default.xml | ||
---|---|---|---|
親要素 | default-values.system.account | ||
要素 | 名称 | 既定値 | 説明 |
enable-alice | false | [ false | true ] false: Alice機能を無効にする true : Alice機能を有効にする |
|
要素 | 名称 | 既定値 | 説明 |
alice.quartz-sync.enable | false | [ false | true ] trueに設定するとアカウントキャッシュデータの定期更新が有効になります。(毎日決まった時間に自動的に同期処理を実行) |
|
要素 | 名称 | 既定値 | 説明 |
alice.quartz-sync.cron-expression | 0 55 5 * * ? | [ cronに類似の形式(既定値は"毎日AM5:55") ] 自動更新を実行する時間を設定します。 秒 分 時 日 月 曜日” ※cronと類似の設定方式です。詳細は以下のURLを参照してください。* http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger |
|
要素 | 名称 | 既定値 | 説明 |
alice.list-cache-size | 1000000 | [ 1 ~ 2147483647 の整数値 ] リストキャッシュの最大サイズです。最大値を超えると古いキャッシュから無効化されますが、性能劣化を防止するため原則として最大値を超えないように設定してください。 |
|
要素 | 名称 | 既定値 | 説明 |
alice.account-cache-size | 100000 | [ 1 ~ 2147483647 の整数値 ] アカウントキャッシュの最大サイズです。最大値を超えると古いキャッシュから無効化されますが、性能劣化を防止するため原則として最大値を超えないように設定してください。 |
|
要素 | 名称 | 既定値 | 説明 |
superior-column-name | TEXTAREA09 | [ INSUITE上長・上長代行情報を保存するグループ詳細情報の項目名 ] * INSUITE上長・上長代行情報が保存されるテーブル(IS_GROUP_EXT)上の項目名です。 | |
初期化・設定方法
Alice機能を利用するためには最初に初期化・設定を行う必要があります。
※この手順を実施する前に既存機能でSm@rtDBのバージョンアップが正常に完了
していることを確認してください。
①hibiki.xmlへ「ユーザ・グループの最終更新日時を取得するAPI」を呼び出す
設定 hibiki.serviceClient.insuiteapi を追加(各APサーバで実施)
※user, passパラメータの値はINSUITE側の
/home/DreamArts/data/custom/api.dat
の cert_api_user, cert_api_pass の設定値と合わせる必要があります。
なお、上記INSUITE側設定ファイルでは、enable_cert_apiの設定値がデフォルトで「off」となっています。 Alice機能を利用する際は「on」に変更してください。
詳細は、INSUITEのアドミニストレーションガイドを参照してください。
※endPointパラメータはSm@rtDB APサーバから INSUITE APサーバへの直接
アクセス用URLであり、ドメイン名部分は soapEndPointのドメインと同じ
設定です。
設定例:
<serviceClient>
<insuiteapi>
<property name="endPoint" value="http://ドメイン名/restapi/Common/"/>
<property name="user" value="insuite"/>
<property name="password" value="apipass"/>
</insuiteapi>
</serviceClient>
②default.xmlにAlice機能を有効にする設定を追加(各APサーバで実施)
<system.account>
<enable-alice>true</enable-alice>
<alice.quartz-sync.enable>true</alice.quartz-sync.enable>
<alice.quartz-sync.cron-expression>0 55 5 * * ?</alice.quartz-sync.cron-expression>
<alice.list-cache-size>1000000</alice.list-cache-size>
<alice.account-cache-size>100000</alice.account-cache-size>
<superior-column-name>TEXTAREA09</superior-column-name>
<system.account>
③Alice機能の初期化を実行(いずれかのAPサーバで1回のみ実施)
※シェルからhibikiユーザでSm@rtDBツールを起動し下記のアカウントキャッシュ
データの更新(同期処理)コマンド "sync alice" を実行します。
実行例:
# su - hibiki
$ cd bin
$ sh smartdb_tool.sh
> sync alice
※コマンドを実行するとAlice機能用テーブルが無ければ作成され、INSUITEの
DBからアカウントデータをSm@rtDBのDBへ同期します。
※上記コマンドを実行する際、hibiki.logを監視しエラーがない事を確認します。
※③を実行する前の段階ではまだテーブルが作成されてないので②でAlice機能を
有効にしてから初期化を実行するまではTomcatを起動したりSm@rtDBツールで
sync以外のコマンドを実行しないでください。
④tomcatサービスの起動(各APサーバで実施)
※再起動後にAlice機能が有効となります。
※Alice機能を無効にする場合はsystem.account.enable-alice=falseに変更して
tomcatを再起動します。