21世紀型アプリケーションのあるべき姿

米アマゾンCTOのヴァーナー・ヴォーゲルズ氏の講演を紹介します。

21世紀型アプリケーションのあるべき姿

http://www.atmarkit.co.jp/ait/articles/1212/03/news125.html

私もこの講演を生で見たかったのですが、結局行けず。来年の誓いとして、自己管理を徹底し、そういった時間を作り出せるようにします!

さて、

クラウドコンピューティングでは、ITリソースに関する制約が取り払われるとともに、これらのリソースすべてがプログラマブルになる。このため、アプリケーション設計手法は本質的に変化し、開発者は、ビジネスに対して価値を与えることに集中できるようになる。」

ということで、クラウドコンピューティングで採用すべきシステムの指針を以下のように説明しています。

controllable ステートレス化、自動化、ビジネスとの融合

「ステートレス化を進めればオートスケールもしやすい」。

「ビジネスルールに基づいてアプリケーションをコントロールしたいなら、人間はそのループに介在する余地がない」。

「sshやrdpでEC2インスタンスにログインすることがあるなら、あなたの自動化はそこで途切れている」。

resilient 強靭なシステムにはちょっとの努力だけ

「原則として、すべてのデータと通信を暗号化すべきだ。リソースに制約がない新たな世界では、暗号化プロセスのために1、2のインスタンスが増えても、大勢に影響はない。」

「どうか、Availability Zone(AZ)を使ってもらいたい。本番運用に移行する際に、最低2つのAZを活用してほしい。これほど簡単なことはない。追加的な作業は必要ない」

リーン・スタートアップを実現できるプラットフォームとして、「従来は、要件変更に答えることがほとんど不可能だった。次回のリリースで実現すると答えるしかなかった」

「サーバ1台ごとに段階的にアップデートをしていくような方法は、ワークフローとして複雑すぎ、エラーの原因にもなる」

新しいやり方として採用すべきなのは、アップデート対象となるアプリケーションについて、稼働中の全サーバの複製を別途立ち上げ、アップデート後に確認を終えたら、Elastic Load Balancerの設定を新サーバ群に切り替えるといった方法だ。これなら、いままで不可能だったロールバックも、容易に行うことができる。

adaptive アプリケーションへの制約を減らせ

物事を不要に複雑化せず、できるだけ制約から自由であることを心掛けよ。自分のやることになるべく前提を付けないようにすることは、障害の最少化にもつながる。

例えば利用するEC2インスタンスのタイプを決めるのは、できるだけ後の工程にすべきだ。特定のインスタンスタイプを前提とせずに開発することで、適応性が生まれる。運用開始後に考えが変わったとしても、いつでも対応できるからだ。

data driven データを最大限に活用せよ

新世代のシステムは、現実のデータに基づいて制御されるべきだ。システム、アプリケーション、ビジネスといったあらゆるレベルの、現実のデータを活用してフィードバック・ループをつくるべきだ。すべてを常時計測することを考えよ。データを収集することなくしては、何の行動もできないからだ。計測データをCloudWatchにプッシュして、十分に活用すべきだ。

Amazon.comで、痛い経験から学んだことの1つは、こうしたデータの平均値ばかり見ていてはいけないという点だ。「平均遅延」は、顧客の半数が、その値に劣るユーザー体験をしているということしか示してくれない。分布曲線の全体を見て、エッジのユーザーの環境改善に努めれば、多くの場合、全体の分布曲線も改善する。

Apacheやユーザーエージェントだけでなく、あらゆるシステムやビジネスのデータを取得しておくべきだ。事後にアナリティクスを活用し、アプリケーションがどんな条件でどんなパフォーマンスを発揮するかを分析し、フィードバック・ループをつくることができる。

AWSが新たに発表した「AWS Data Pipeline」は、こうした作業の大幅な省力化を実現するためのツールだ。

 

いかがでしたでしょうか?これらを意識して設計を見直す事で、 システムの設計、開発が即「ビジネスに対して価値を与えることに集中」する作業にしようではありませんか。

 

Posted in

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="">