Azure Service Fabric 初めての開発 その1

Azure ServiceFabricがリリースされてからずっと実践投入する機会を伺っていたのですが、ようやく機会がありましたのでServiceFabricを使ったシステムを開発し、いよいよリリースを迎えることになりました。

ここではServiceFabricの学習から開発を始めるにあたって、どこから始めたらよいか、または躓いた点などを複数回にわたって公開していきたいと思います。

まず、ServiceFabricって何？とか、マイクロサービスに関して概要を確認しておきたいという方は、私が以前書いた記事となりますが、以下も参考にしていただければと思います。

[de:code「Microsoft Azure Service Fabric によるレジリエントなマイクロサービスの構築」セッションレポート](http://blog.nextscape.net/archives/Date/2015/06/0625decodeServiceFabric)

ちなみに、マイクロサービスアーキテクチャとはこうあるべき、と言った話題には触れるつもりはありません。（というか語れる自信はありません。）
それでも、Service Fabricの特性を学びながら開発を進めていくことで、自然と従来のモノリシックなアプリケーションモデルではなく、マイクロサービスの利点を生かしたシンプルでスケーラブルな設計が出来るようになっているはずですので、騙されたと思って試していきましょう。

#Service Fabricの学習ステップ
まずは、ServiceFabricを使って開発を始めるにあたり、参考にすべきドキュメントをまとめておきます。基本的にマイクロソフトのWebサイトにて、充実したドキュメントが既に日本語化されていますので、そちらを紹介しながらポイントをお伝えしていきます。

###概要とラーニングパス
[Service Fabricの概要](https://docs.microsoft.com/ja-jp/azure/service-fabric/service-fabric-overview)
ここでは概要から具体的な手順まで、左側にある目次から読んでいくことができます。
まずは、Overviewを読んでおくとよいでしょう。

そこから先、チュートリアルも含めて、どのように学習を進めていくかについては以下のページが道標になります。

[Service Fabricのラーニングパス](https://azure.microsoft.com/ja-jp/documentation/learning-paths/service-fabric/)
すべて読むのは大変ですので、技術的な関心や必要なトピックを掻い摘んで読んでいくとよいでしょう。

次に、実際に触ってみないと分からないと思いますので、以下のページを順に辿って試していきましょう。

###開発環境の準備と初めてのアプリケーション
[開発環境を準備する](https://docs.microsoft.com/ja-jp/azure/service-fabric/service-fabric-get-started)
ここでは特にポイントはありません。Visual Studioの他にSDKをインストールしておくくらいです。

[最初の Azure Service Fabric アプリケーションを作成する](https://docs.microsoft.com/ja-jp/azure/service-fabric/service-fabric-create-your-first-application-in-visual-studio)
Visual StudioのテンプレートからService Fabricのアプリケーションを作成し、ローカル環境でデバッグ実行します。Visual Studioを管理者として起動することを忘れずに、まずは深く考えずに試してみましょう。

[ローカル クラスターでアプリケーションのデプロイおよびアップグレードを開始する](https://docs.microsoft.com/ja-jp/azure/service-fabric/service-fabric-get-started-with-a-local-cluster)
開発を行う上で必須となるローカル環境でのデプロイ、アップグレードについて少し掘り下げていきます。「ローカルクラスターマネージャ」の使い方に慣れていきましょう。
ローカル環境ではデフォルトで1Nodeクラスタと5Nodeクラスタが用意されています。5Nodeではクラスタの構築もコード修正時のアップグレードも格段に時間が掛かるので、アプリケーションの完成度が上がるまでは、1Nodeで実行することをお勧めします。
この先でApplicationManifestやServiceManifestを弄っていくと、アップグレードが数十分経っても終わらない、環境が壊れたかもしれないという事態になることがあると思います。
その場合は、迷わず「Remove Local Cluster」⇒「Start Local Cluster」を行ってから新規デプロイした方が早いです。

[Service Fabric でのアプリケーションのモデル化](https://docs.microsoft.com/ja-jp/azure/service-fabric/service-fabric-application-model)
Service Fabricのアプリケーションモデルと具体的なファイル構成が説明されています。
Applicationには複数のServiceが含まれ、Serviceにはコードと設定が含まれるということを理解してください。このServiceがひとつの「マイクロサービス」に該当します。

###Web APIとバックグラウンド処理の開発
[OWIN 自己ホストによる Service Fabric Web API サービス](https://docs.microsoft.com/ja-jp/azure/service-fabric/service-fabric-reliable-services-communication-webapi)
具体的にWebAPIを提供するサービスを構成するチュートリアルです。Visual Studioのテンプレートで実行に最低限必要なコードは出来上がってきます。
WebAPIの実装に関しては、これまでのASP.NET Web APIの開発と全く変わりませんが、Service Fabricの場合、Webサービスをホストするプロセスが異なり、StatelessServiceを継承したクラスとOwinCommunicationListenerクラス内で構成されますので、コードをざっと理解しておきましょう。複数のWebサービスを個別のポートに割り当てたり、SSL対応などを行う際に修正することになります。

[Service Fabric の Reliable Services の概要](https://docs.microsoft.com/ja-jp/azure/service-fabric/service-fabric-reliable-services-quick-start)
ここではReliable Servicesによるステートレスサービスとステートフルサービスの作成方法と、それぞれの特徴を学ぶことができます。
RunAsyncメソッド内でwhileループを使い、繰り返し実行されるプロセスや処理時間の長いバックグラウド処理などを実装できることが分かります。ステートフルサービスを選択すると加えてReliable Collectionという仕組みを用いて、多数のサービス間で情報の受け渡しや状態の共有を簡単に行うことが可能になります。

Reliable Collectionについての詳細は以下のページを参照してください。
[Azure Service Fabric ステートフル サービスの Reliable Collection の概要](https://docs.microsoft.com/ja-jp/azure/service-fabric/service-fabric-reliable-services-reliable-collections)

ここまで読みながら実際にローカル環境で試していくことで、Service Fabricを使った開発が進められるようになるかと思いますが、まだ、肝心のAzureへのデプロイが行われていません。

次回は、Azure上でのService Fabric Clusterの構築とデプロイまわりについて、ご紹介していきたいと思います。
また、具体的な開発におけるポイントや注意事項についても別の回でお伝えする予定です。