うな(。・ε・。)

Android, iOS, AppEngine まわりのめもめも

Azure が未来過ぎたので色々調べてみた

登場当時は 「AWS でいいじゃん(笑)」と無視してしまっていたけれど、今見るとめちゃくちゃ気合いを入れてサービスを拡張していた。

AWS と比較して優れていると感じるのは、非常にモジュラー指向なところ。

AWS も SQS や SNS など「モジュール」といえるサービスを出してはいるけれど、依然として EC2 万歳なクラウドであるように感じる。 特に cron とかやろうとすると、生 cron を必ず触る事になるし、冗長性の確保がめちゃくちゃ大変。デプロイの方法論も cron のために特別に考えるハメになったりする。

対して Azure は、クラウド cron であるところの "Scheduler" というサービスが存在する。 機能は非常にシンプル。管理画面上で "Schedule" を作るだけ。あとは勝手に指定した時間間隔で、指定した HTTP Request を発行してくれる。(API もあります)

こういった細かい機能を、冗長性を保った形でインフラ層で吸収してくれています。 アプリはこれらをつまみ食いすればよい。というのは冗長性を確保しながらも、効率の良い開発をするには理想的な形と言えると思います。

まあ、といったわけで、気になるサービスをちょっと調べてみようかと。

API Management Service

azure.microsoft.com

  • API を管理するサービス
  • ドキュメントと、リクエストを試せるコンソール、開発者ポータルを提供出来る
  • ヘルスチェック機能
  • 利用回数等のアナリティクス
  • レスポンスのキャッシュ
  • API コールのログ
  • Rate limit, Throttle が出来る(API Provider として)
  • 様々なバックエンドからデータを取得して一本化、などということが出来る
    • XML -> JSON にしたり、プロパティの名前変えたり、パラメータ付与したりとか
  • ドキュメント機能以外は、要は高性能プロキシです

このへん真面目にやろうと思えば本当に大変なのですごく良い。

「開発者ポータル」という単語から、公開 API を持っているサービスでの用途が想起されますが、通常のサービス内 API で用いても十分使えます。

たとえばの利用ケースとしては、モバイル用の API. REST 厨な API があったとして、クライアント側でたくさんの Entity が必要なとき、困りますね。API Management Service 側でバッチリクエストを行なう API を定義すれば、クライアント側は 1 リクエストで済みます。

Event Hubs

azure.microsoft.com

  • PubSub なメッセージキューです(おわり)

Multi Factor Authentication

azure.microsoft.com

  • MFA as a Service

Media Services

azure.microsoft.com

  • エンコーディングとストリーミングが出来ます
  • iOS への HLS 配信とか一発です
  • ライブストリーミングも対応(!)
  • メディアファイルを検索可能にするための Indexing 機能(!?)
  • 音声や動画を扱う際にめんどうくさいインフラ的なアレコレが提供されています
  • Amazon Elastic Transcoder と違うのはエンコーディングだけではなく、配信系の機能も統合されていることです

DocumentDB

azure.microsoft.com

クエリを下のリンクで試す事が出来ます。基本的なのが色々揃ってる。

DocumentDB Query Playground

他の NoSQL と比べて、制約が緩過ぎて逆に怖い。

App Service

azure.microsoft.com

  • App は Web App, Mobile App, API App, Logic App に分類され、それぞれに向いた機能が提供されます
  • いわゆる PaaS です
  • Heroku が最も近いと思います。
  • git push してデプロイなどということが出来ます
  • もちろんオートスケールします
  • 対応言語はおおむね ASP.NET (C#), Java, node.js
    • ASP.NET がマネージドインフラで動くのは、嬉しい人多そう
  • Mobile App はモバイルに必要な全て(認証、同期、通知)が同梱されており、もはやカオスでよくわかりません

Scheduler

  • 上述の通り

Notification Hubs

azure.microsoft.com

  • Amazon SNS です
  • ターゲティングの機能(多言語対応とか)が強化されています
  • (どうでもいいけど Safari にも対応しててすごい)
  • Email の配信は出来なくて、SendGrid 推しっぽい。

Managed Cache

azure.microsoft.com

  • Redis を運用しなくて済みます(おわり)

Machine Learning

azure.microsoft.com

  • 「関連するアイテム」とかの計算をイイ感じにやってくれて、結果を API にして公開したり出来ます
  • 機械学習が必要になるアプリ(リコメンドとか)は、どう学習基盤を統合するかで悩むことが多いと思いますが、Azure ML に行動データをぶん投げて、API で予測結果を取得する形にすれば良いと思います。

かんそう

Azure Virtual Machine というサービスが、AWS での EC2 に相当するのですが、あまり目立たない。むしろ、PaaS であるところの App Service 推しです。

Docker とかつべこべ言わずに PaaS に載せとけ!俺たちが面倒みてやるから!ということでしょうか。

とにかくインフラの管理をさせない、という一貫したメッセージを感じました。 AWS は EC2 万歳すぎると思います。インフラ管理がインスタンス管理に置き換わっているだけで、まだまだ運用感は拭いきれません。OS を直接触るのも忌避する時代になってくると思います。

また、API 関係への力の入れよう。API Schema を使って API を管理していこうという姿勢が垣間見えます。 API Schema を用いた透過的なバックエンド間通信が一般人レベルでイイ感じに出来るようになるのも、未来の話ではないかもしれません。

モジュラー指向の強さや、API への関心の高さ、インフラ管理からの解放、あたりのキーワードを見ると、Azure というクラウドプラットフォームはかなり未来を見据えています。