Azure が未来過ぎたので色々調べてみた
登場当時は 「AWS でいいじゃん(笑)」と無視してしまっていたけれど、今見るとめちゃくちゃ気合いを入れてサービスを拡張していた。
AWS と比較して優れていると感じるのは、非常にモジュラー指向なところ。
AWS も SQS や SNS など「モジュール」といえるサービスを出してはいるけれど、依然として EC2 万歳なクラウドであるように感じる。 特に cron とかやろうとすると、生 cron を必ず触る事になるし、冗長性の確保がめちゃくちゃ大変。デプロイの方法論も cron のために特別に考えるハメになったりする。
対して Azure は、クラウド cron であるところの "Scheduler" というサービスが存在する。 機能は非常にシンプル。管理画面上で "Schedule" を作るだけ。あとは勝手に指定した時間間隔で、指定した HTTP Request を発行してくれる。(API もあります)
こういった細かい機能を、冗長性を保った形でインフラ層で吸収してくれています。 アプリはこれらをつまみ食いすればよい。というのは冗長性を確保しながらも、効率の良い開発をするには理想的な形と言えると思います。
まあ、といったわけで、気になるサービスをちょっと調べてみようかと。
API Management Service
- API を管理するサービス
- ドキュメントと、リクエストを試せるコンソール、開発者ポータルを提供出来る
- ヘルスチェック機能
- 利用回数等のアナリティクス
- レスポンスのキャッシュ
- API コールのログ
- Rate limit, Throttle が出来る(API Provider として)
- 様々なバックエンドからデータを取得して一本化、などということが出来る
- ドキュメント機能以外は、要は高性能プロキシです
- API の話題的には、「オーケストレーション層」と呼ばれることが多いと思います
このへん真面目にやろうと思えば本当に大変なのですごく良い。
「開発者ポータル」という単語から、公開 API を持っているサービスでの用途が想起されますが、通常のサービス内 API で用いても十分使えます。
たとえばの利用ケースとしては、モバイル用の API. REST 厨な API があったとして、クライアント側でたくさんの Entity が必要なとき、困りますね。API Management Service 側でバッチリクエストを行なう API を定義すれば、クライアント側は 1 リクエストで済みます。
Event Hubs
- PubSub なメッセージキューです(おわり)
Multi Factor Authentication
- MFA as a Service
Media Services
- エンコーディングとストリーミングが出来ます
- iOS への HLS 配信とか一発です
- ライブストリーミングも対応(!)
- メディアファイルを検索可能にするための Indexing 機能(!?)
- 音声や動画を扱う際にめんどうくさいインフラ的なアレコレが提供されています
- Amazon Elastic Transcoder と違うのはエンコーディングだけではなく、配信系の機能も統合されていることです
DocumentDB
- NoSQL as a Service
- フルマネージドでイイ感じにスケールする DB を使えます
- 課金は容量とスループットで計算されます
- DynamoDB より扱いやすそうな NoSQL と考えるとよいかと
- トランザクションサポート
- SQL シンタックスのサポート
- 他強力なクエリ機能多数(調べてない)
- 整合性レベルを選べます(!)
クエリを下のリンクで試す事が出来ます。基本的なのが色々揃ってる。
他の NoSQL と比べて、制約が緩過ぎて逆に怖い。
App Service
- 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
- Amazon SNS です
- ターゲティングの機能(多言語対応とか)が強化されています
- (どうでもいいけど Safari にも対応しててすごい)
- Email の配信は出来なくて、SendGrid 推しっぽい。
Managed Cache
- Redis を運用しなくて済みます(おわり)
Machine Learning
- 「関連するアイテム」とかの計算をイイ感じにやってくれて、結果を 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 というクラウドプラットフォームはかなり未来を見据えています。