7/29に開催された「Japan Tour in Summer: Java & k8s on Azure まつり」 に裏方として参加してました。
50分でお届けする Java on Azure 2019のいま
「Microsoft Azureの今」をJava視点に50分で伝えていただきました。
Azureの耐障害性について
Azureは日本だけで2つのリージョン(東日本リージョンと西日本リージョン)を持っているため、DR構成を国内で構築することが可能になっています。また、Traffic Managerを使用することでDNSレベルでトラフィックの切替が可能になります。Traffic Managerはグローバルリージョンで提供されているため、1つのリージョンが使用不可になっても利用できます。
つまり、例えば西日本リージョンが利用不可になっても断なしで東日本リージョンに通信を切り替えることも可能です。
Azureなら、ミッションクリティカルな構成をより手軽に構成することが可能になります。
Java on Azureについて
IaaS(Infrastructure as Service)なアプローチでは、Azure Market PlaceにてJavaの各種実行環境のイメージからVMを作成することが出来ます。
例えば、WebLogic ServerやIBM WebSphereの環境が構築済みのVMをすぐ利用することが出来ます。
またPaaS的なアプローチでは、AppServiceを使用することでTomcat/Java SE/WildFly環境をフルマネジドされた状態で利用することも可能です。
サーバレスな話
AzureにはAzure Functionsとその拡張機能であるDurable Functionsというものがあります。
Azure Functionsはサーバレスアーキテクチャを実装するための機能で、C#、Java、JavaScript、Python、PHPのコードを実行出来るものになっています。
Azure Functionsを使用するシナリオとして、リアルタイムなストリーミング処理や、タイマーベースによる実行、バッチ処理的な実行などがありますが、これらの実装にJavaを使用することが出来ます。
また、Real-time bot messagingでのbot実装も可能で、Kubernetesクラスターの操作をSlack bot上で行うといったことも実装することも出来ます。
マイクロ・サービスシナリオ
AzureではAzure Kubernetes Service(AKS)を使用することで、フルマネジドなKubernetes環境を構築することが出来ますが、「Kubernetesはどれぐらいの規模になったら使えば良いのか?」という疑問が出てくると思います。その場合、まずは寺田さんのブログ記事「Kubernetes の導入時に考えるべきこと」をまず参考にして下さい。
Kubernetesをうまく使うことで、古いリクエストは古いコンテナに通信をさせながら、新しいコンテナをデプロイすることが出来ます。
また、futureフラグを使うことで、特定のHTTPヘッダを付与したリクエストに対してのみ特定のコンテナに通信を誘導させることも可能です。これにより、テスター用のリリースコンテナを用意することも可能です。
Kubernetesはどんな会社が導入しているの?
日本での導入事例は少ないのですが、米国では金融機関や自動車メーカー・航空会社などで本番導入されています。
Azureの場合、アメリカ国内にも東・中央・西でリージョンが用意されているため、各社は東西にAKSでコンテナを展開することでサービスを展開しています。
JDK、どれ使う?
Oracle JDK11から商用利用が有償となり、これからどのJDKを使うか? という問題に直面しているエンジニアは多いのではないでしょうか。
Azureの場合だと、AZUL SYSTEMSが提供しているOpenJDK “Zulu” を無料で利用することが出来ます。要するに、Azure上にJavaアプリをデプロイすれば無料でサポートされたOpenJDKを使い続けることが出来るという話になります。
寺田さんのエモい話
このブログに細かく書こうと思ったのですが、あまりにも内容が深いのと、これから他の会場でもこのお話があると思いますので、あえて割愛にしようかなと思います。
その代わり、幾つか撮影したスライドを貼っておきます。