まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:xpages

とうとう IBM Bluemix 上のランタイムとして Domino サーバーが登場しました。詳しくはこちらを参照ください:
Domino on Bluemix


IBM Notes/Domino は IBM が開発/販売しているコラボレーションプラットフォームです。多くの企業でエンドユーザーコンピューティングやグループウェアの基盤として使われ、多くのビジネスパートナー様による関連製品/サービスもリリースされています:
2015081202



今回リリースされた XPages(Domino) ランタイムは、パブリッククラウドである Bluemix 上で、サーバー機能である Domino が稼働する環境を提供するものです。そこだけを見ると嬉しいニュースなのですが、ではこの Domino は Bluemix とどこまで親和性があるのでしょうか? たとえば Bluemix では Java や PHP などのアプリサーバーと、DB2 や MySQL などのデータベースサーバーは分離されています。そのため、アプリサーバー部分だけを負荷に合わせて手動でスケールアウトさせることもできますし、そのスケールイン/アウトを自動化させる、いわゆる「オートスケール」の設定を組み込むことも可能です。

一方、Domino サーバーは「オールインワン」型でした。アプリサーバーもデータストアもその中で動くアプリケーションも、更にはユーザーディレクトリや HTTP, タスクスケジューラといったサブタスクも全て一元化されたサーバーを使っていました。考え方としては1つのサーバーが全ての機能を持ち、負荷分散でサーバーを複数台対応させる場合にはデータも複製して対応する、というアプローチでした。

ある意味で相反する考え方を持つ Bluemix のランタイムと Domino ですが、ではこの Domino ランタイムが Bluemix 上で動く場合に、Bluemix のスケーリングの考えは適用できるのかどうか?という疑問が生じます。

具体的には Bluemix 上の Domino は Java や PHP アプリサーバーのように簡単に複数台対応できるのか?同様にオートスケール設定ができるのか?その場合のデータの整合性はどのようにして保つのか/保たれるのか? といった疑問です。


結論を先に言うと、Bluemix 上の Domino は(条件付きで)スケール対応します。Java や PHP と同様のインターフェースやオートスケールサービスを使って、動的に Domino サーバーを複数台対応させることができます。その際に Domino 固有のデータ複製設定などは必要ありません。

でも「なぜそんなことが可能なのか?」という疑問が生じるはずです。それについて正確に表現すると「Bluemix 上で .nsf ファイルを XPages 設計要素と、ビュー/フォーム/文書の要素に分けてプッシュする形でデータベースアプリケーションをデプロイすればスケーリングに対応できる、ということになります。つまり .nsf ファイルを設計とデータとに分離します。そして前者をランタイムで、後者をサービスで運用する形を取り、更にランタイムから分離先のデータサービスを正しく参照して文書データをデータサービス内だけに保存するような設計にするという条件を付けることでスケーリングが可能になる、ということです(ランタイム側にもサービス側にも .nsf ファイルが必要です):
2015081201


これを実現するには XPages の仕組みが必要になり、加えて既存 XPages アプリの設計を少し改良する必要もあります。具体的には、例えば XPages の設計要素でデータベースファイルを指定する箇所を以下のように指定します:
<xp:dominoView databaseName="myapp_data.nsf"> 
  ↓
<xp:dominoView databaseName="#{javascript:bluemixContext.isRunningOnBluemix()? bluemixContext.getDataService().findDatabaseName() : 'myapp_data.nsf'}"> 


この処理内容は XPages 内で JavaScript を使って「Bluemix 環境であればバインドされているデータベースを使う、Bluemix 環境でなければ myapp_data.nsf を使う」という処理を記述しています。つまり Bluemix 環境上で動いている時とそうでない時に分けてデータベースファイルを指定しています。Bluemix 向けに拡張された Domino Designer ではこのような記述も可能になります。このような仕組みによって Bluemix 上でスケールできるよう対応させる必要があるとも言えます。それが "(Domino on Bluemix ではなく)XPages on Bluemix" という名称にも現れているのだと思います。


というわけで、エントリ冒頭の疑問に対する答はこちらです: 
IBM Domino はスケールイン/アウトできます。Bluemix と XPages があればね♪


なお、Bluemix 上の XPages 関連ランタイムやサービスは2015年8月12日現在ではまだ「試験提供」のステータスです。上記内容は試験提供内容を元に記述しています。正式提供に向けて今後仕様変更があるかもしれないことはご了承ください。


ついにこの日がやってきました!

まだ試験版という位置付けですが、IBM Domino のランタイムである "IBM XPages" が IBM Bluemix 上で公開されました。簡単に言えばノーツ/ドミノの .nsf ファイルが IBM のパブリックな PaaS クラウド上に用意された Domino HTTP サーバー上で動かすことができるようになった、ということです。PaaS なので Domino サーバーを構築する必要はありません。"IBM XPages" ランタイムのインスタンスを選んで起動するだけです:
2015071101


インスタンス作成後の画面がこちらです。作成した XPages(Domino) インスタンス上で自分の .nsf アプリケーションを動かすための手順が紹介されています。一般的なウェブアプリは DevOps サービスを使ったウェブ IDE でコーディングすることもできますが、.nsf の場合はそうはいきません。この手順の中にかかれているように「cf コマンドラインインターフェースツール」をインストールし、「スターターコード」をダウンロードしておきましょう:
2015071102


スターターコードは (インスタンス作成時に指定したアプリ名).zip というファイル名でダウンロードできます。この例ではインスタンス作成時の名前を dotnsf-xpages にしていたので、dotnsf-xpages.zip というファイルでダウンロードすることになります:
2015071103


インスタンス作成後の概要画面です。このインスタンスにはデフォルトで (インスタンス作成時に指定したアプリ名).mybluemix.net というホスト名が付与され、もうアクセス可能な状態になっています。XPages ランタイムの場合はデフォルトで 512MB のメモリが割り当てられるみたいですね:
2015071104


まだアプリケーションの中身には手を付けていませんが、デフォルトアプリケーションのままでホスト名(この例では dotnsf-xpages.mybluemix.net)を指定してブラウザでアクセスすると、このようなウェルカムページが表示されるはずです。後で確認しますが、この中身は .nsf ファイルの XPages で、その .nsf ファイルが Bluemix 上の Domino HTTP タスクを使って動いています:
2015071105


実際に動いているコードを確認してみましょう。先程ダウンロードしたスターターコード(dotnsf-xpages.zip)を展開すると、中に application.nsf と manifest.yml という2ファイルが含まれていることが分かります。application.nsf が Bluemix の Domino 上で動いている nsf ファイルで、manifest.yml はその application.nsf を dotnsf-xpages.mybluemix.net 上で動かすための設定が記述されたファイルです。この2ファイルをどこか専用のフォルダ(下図では c:\tmp\docroot\)を作って保存しておきます:
2015071106


application.nsf をノーツクライアントのデスクトップから開くとこんな感じです:
2015071107


この .nsf ファイルのアクセス権を確認します。現状、Bluemix 上で動かす .nsf ファイルは匿名アクセスができる必要がありそうです。自分の手元にある nsf ファイルを Bluemix にアップロードして試す場合は、匿名アクセスができるように -Default- や anonymous でのアクセス権があること、データベースの暗号化などが無効になっていることを確認してください:
2015071115


また application.nsf をドミノデザイナーで開くとこんな感じです。XPage 要素の中に先程ブラウザで表示したページが含まれています。先ほどの画面はやはりこの .nsf ファイルだったことが分かります:
2015071108


次に manifest.yml ファイルをテキストエディタで開いてみると、このような内容になっていることが確認できます(青字はコメント):
applications:
- disk_quota: 1024M
  buildpack: xpages_buildpack
  host: dotnsf-xpages ホスト名
  name: dotnsf-xpages Bluemix上のアプリ名
  path: .
  domain: mybluemix.net デプロイ先のドメイン名
  env:
    APP_HOME_URL: /application.nsf '/'でアクセスした時の実際のアクセス先
    APP_PRELOAD_DB: application.nsf 転送するNSFファイル
  instances: 1 インスタンス数
  memory: 512M メモリサイズ

この中身を書き換えると、異なる設定にしたり、異なるNSFファイルをアップロードすることもできるようになります。試しに匿名アクセス可能な updatesite.nsf というNSFファイルを用意しました(ノーツ8から対応した、Eclipse プラグインのアップデートサイト用のファイルです)。このNSFファイルは HTTP アクセスを想定して作られていますが、いわゆる XPages 対応はしていないものです:
2015071116


このファイルを Bluemix 上の Domino で動かしてみます。まずは manifest.yml を書き換えて、新しい NSF ファイルをアップロードし、またドキュメントルートにアクセスがあった場合にはこの NSF ファイルにアクセスするよう変更します:
applications:
- disk_quota: 1024M
  buildpack: xpages_buildpack
  host: dotnsf-xpages
  name: dotnsf-xpages
  path: .
  domain: mybluemix.net
  env:
    APP_HOME_URL: /updatesite.nsf
    APP_PRELOAD_DB: updatesite.nsf 
  instances: 1
  memory: 512M

次にこのアップロードする updatesite.nsf を先程のスターターコードを展開したディレクトリにコピーします。application.nsf はもう使わないので削除しても構いませんが、残しておいても構いません:
2015071117


ではこの updatesite.nsf を Bluemix 上の Domino アプリにデプロイしてみます。最初にインストールした cf コマンドラインツールを使います。Windows であればコマンドプロンプトを開いて、スターターコードを展開したフォルダに移動して、"cf login -a https://api.ng.bluemix.net" コマンドでログインします。メールアドレスとパスワードを聞かれるので、Bluemix アカウントに使っているメールアドレスとパスワードを入力します:

※データセンターとして英国を使っている場合、cf login コマンドのパラメータは https://api.ng.bluemix.net ではなく https://api.eu-gb.bluemix.net を指定します
2015071109

 
ログイン後に "cf push (アプリ名)" コマンドでデプロイします。manifest.yml に書かれた情報を元にデプロイ先やデプロイ対象、デプロイ先サーバーの設定などを識別して実行されます:
2015071110
 

無事に(エラーなく)デプロイが終了することを確認します。成功すると最後に稼働中となった Domino サーバーのステータスが表示されます:
2015071111
 

これで自分が用意した updatesite.nsf が Bluemix 上に転送されました。試しにブラウザでホスト名を指定してアクセスすると、先ほどのスターターコードのデフォルトアプリ(application.nsf)の画面ではなく、自分が用意した .nsf ファイルのデフォルトページ/デフォルトビューが表示されるはずです:
2015071112


・・・思い返してほしいのですが、ここまで Domino サーバーのインストールやインストール指示は行っていませんよね。Bluemix 側で最初から用意されたものを使っただけです。つまり Domino サーバーの用意までは IBM Bluemix が全て行ってくれて、利用者(管理者)は .nsf ファイルだけ用意して転送するだけでパブリックに公開された状態の Domino サーバー上で稼働させることができた、ということになるのです。これってすごくない!?

「うわ~、もしかしてノーツクライアントからもアクセスできちゃう!?」と期待したのですが、残念ながら現状は 1352 ポートは閉じられているようで、ノーツクライアントからこの Domino サーバーにアクセスすることはできないようです。つまり HTTP アクセスか XPages のページにアクセスできる、ということになります:
2015071113


気になるお値段ですが、どうやら他の Bluemix ランタイムと全く同じ模様です。つまり、こんな感じ:
 ・1GB時間あたり 7.35 円(メモリ1GBのインスタンス1つを1時間使うと7.35円)
 ・1ヶ月あたり 375GB時間までは無料枠、IBM XPages にも適用される
 ・無料枠を超えた分のGB時間が課金対象となる
2015071114
 
これも XPages 以外のランタイムと共通ですが一応注意点を。無料枠はアカウント1つに対する無料枠です。例えばこの XPages ランタイムのインスタンス1つだけを 512MB メモリで運用するのであれば無料枠内です。ただしこれ以外に Java ランタイムのインスタンス1つを 512MB メモリで運用する場合、どちらか1つは無料枠で運用できますが、もう1つはほぼ丸々課金対象となるので注意してください。

この XPages on Bluemix はまだ試験運転中で、今後仕様が変更になる可能性もあります。ただ少なくとも(メモリ512MBの条件があるとはいえ)無料でも試せて、自分が作った .nsf データベースが使えるパブリックな Domino が提供された、と考えると非常に大きなインパクトがあるように感じています。


ちなみに、上記で作成した dotnsf-xpages.mybluemix.net で動いている updatesite.nsf には、ボクが個人的に開発したノーツ用のプラグインアプリケーションがいくつか含まれていて、その中には時間が余った時たまにデモするテトリスなどのエンターテイメントアプリも含まれています:
2015071118

興味ある人はこちらを参照してインストールしてみてくださいませ:
ノーツに Eclipse プラグインを導入する


うーん、これでノーツアプリが Bluemix 上の Domino (のHTTPタスク) 上で動くようになったわけで、ということはノーツアプリで Bluemix Challenge 2015 に参加できるようになったとも言えるよな。。。

 

このページのトップヘ