BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Kubernetsの開発者Brendan Burns氏に聞く - コンテナと分散システムパターン

Kubernetsの開発者Brendan Burns氏に聞く - コンテナと分散システムパターン

原文(投稿日:2018/02/14)へのリンク

読者の皆様へ: 皆様のご要望にお応えすべく、ノイズを削減する機能セットを開発しました。皆様が関心をお持ちのトピックを、EメールとWeb通知で受け取ることができます。新機能をぜひお試しください。

分散システムプログラミングは気弱な人には向いていない。COMやCORBA,RMI,Java EE,Webサービス,サービス志向アーキテクチャ(SOA)など,プラットフォームやツールが進化したにも関わらず,いまだ科学というよりも芸術の分野なのだ。

Brendan Burns氏が2015年に書いたブログ記事では,分散システムプログラミングを可能にする,さまざまなパターンが概説されている。氏とDavid Oppenheimer氏 — いずれもKubernetesの開発当初からのコントリビュータ — はUsenixで,デザインパターンと,続いてコンテナを基本とする論文を発表した。

InfoQでは,先頃“Designing Distributed Systems, Patterns and Paradigms for Scaleable Microservices”というタイトルのeブックを著したBurns氏に話を聞くことができた。氏は分散システムパターンと,コンテナを用いてそれを実現する方法について語ってくれた。

InfoQ: 本題から入りましょう。分散システムは数十年前から存在していますが,今回の本の新しい部分は何でしょう?私が企業のプログラマあるいはアーキテクトであったとして,無償の資料が数ある中で,この本を選ぶべき理由について教えて頂けますか?

Brendan Burns: ご存知の通り,私たちが何年にもわたって目にしてきたパターンがコード化されて,書籍として出版されるまでには,相応の時間を必要とします。一般的にその鍵を握るのは,パターンを抽象的に説明しやすくするような,ある種の技術変革です。例えばGang of Fourなどは,オブジェクト指向プログラミングの開発から10 年近く経った後で世に現れましたが,この書籍(に限らず,1990年代に出版されたすべてのパターンブック)は明らかに,オブジェクト指向プログラミングの影響を受けています。

私にとって,この本の執筆を思い立った転機となったのは,コンテナオーケストレーションでした。“パターンを議論することができる共通言語とボキャブラリがついに現れた”,と思ったのです。これら新参者はいずれもクラウドと分散システムを基盤としていますから,当然ながらそれらも動機の一部です。システム構築の失敗からではなく,書籍から学ぶべきなのです。

InfoQ: Kubecon 2017の基調講演では,分散システムプログラミングを,CS101クラスを修了するのと同じくらい簡単にする方法について話していましたが,それについて2つ疑問があります。まずひとつは,Kubeconが証明したように,Kubernetesがこれほど広範囲に普及するということを予想していましたか?第2には,コンテナやKubernetesは,分散システムのプログラミングをどの程度支援してくれるのでしょう?

 

Burns: プロジェクトを立ち上げた当事者として,JoeとCraigと私は,Kubernetesへの関心の高さや普及のレベルに恐縮する思いでいます。クラウドネイティブのパターンやプラクティスが採用される上で何らかの力になれれば,とは常々思っていましたが,それが実現したのは本当に素晴らしいことだと思っています。Kubernetesに自身のビジネスやアプリケーションを賭けているすべての人々を前にして,その信頼の大きさに驚くとともに,Kubernetesのコミュニティとエコシステム全体が持つ品質とコミットメントを語らずにはいられません。それはまさに,世界規模のコミュニティによる努力の結果なのです。私たちを分かつものすべてに想いを馳せる時,このソフトウェアを中心として集結することができたというのは,感動的でさえあります。

Kubernetesの最終的な目標は分散システムのための自律システムにある,と私は考えています。要するにこれは,人が操縦する飛行機とクアッドコプタ(ドローン)の違いです。クアッドコプタで飛行するのは簡単です。水平を保つオンボードコントローラがあるので,どこへ行きたいかを告げるだけでよいからです。Kubernetesもこれと同じです — 何を実現したいかを伝えれば,適切な数のレプリカを保持して,アプリケーションのクラッシュやマシンの障害に対処してくれます。分散アプリケーションのためのアンチロックブレーキのようなもので,ループ内のコンピュータが自動的に反応して,安全を確保してくれるのです。さらに,ロードバランサのようなサービスを備えることで,“成功のツボ”を簡単に押さえることが可能になり,分離した,スケーラブルな方法でアプリケーションを実装できるようになります。

InfoQ: Kubecon 2017での基調講演では,MetaParticleというクラウドネイティブなランタイムを使った分散システム開発の一般化について説明されていましたが,これはどのようなものなのでしょう?Istioのようなものなのですか?

Burns: Metaparticleはまさに,システムの設計と構築の方法を見直すためのものです。現在の開発では,それぞれのマシン用にコードを書いた上で,YAMLファイルを使って個々のプログラムをどのように組み合わせるのかを記述しています。この方法では,複数の異なるアプリケーションやファイル形式,アプリケーションを記述するための言語を学ばなくてはなりません。非常に複雑で,経験の少ない開発者が習得するには難しい作業です。“これらすべてを,ひとつのプログラミング言語でできないか?”,という試みがMetaparticleです。経験の浅い開発者が自身のスキルをクラウドネイティブなパターンに転換できるようになれば,それ自体がひとつの経験になります。Istioは違うと思います — 既存のシステムをより監視しやすい,ダイナミックなものにするのがIstioなのです。クラウドネイティブなシステムをすでに知っている人たちに対して,監視と適用をより簡単にするためのツールなのです。

InfoQ: 講演の中で,クラウドネイティブな開発を容易にするためにプログラム言語毎にバインディングを提供する必要がるのならば,それが標準化されるのは何年も先になってしまうだろう,という示唆がありました。これが実現するのは,単に時間だけの問題なのでしょうか?その間,エコシステムは,分散システム開発に関わる課題を解決するためのツールやプラットフォームを提供し続けるのでしょうか?

Burns: そうですね,実際には2つのクラスのソリューションがあると思います。既存のエクスペリエンスを円滑にして問題点を取り除く,というものがひとつ。HelmDraftといったツールに加えて,私たちが行っているVS Code Integrationもすべてこれに当てはまります。すでにクラウドネイティブな開発者である人たちにとって,この種のツールは着実に進化しており,Kubernetesをより簡単なものにしてくれています。

それらとは別に,別分野の開発者たちを新たにクラウドネイティブにするような,まったく違う種類のものが存在する,と私は思っています。C++用のよくできたIDEを思い浮かべてみてください。IDEは優れたC++プログラマを生み出すことはできませんが,優れたC++を幸せにすることはできます。それとは別に,まったく新しい開発者グループを支援する,JavaやC#のような言語があります。どちらも存在する意義がある,と私は思うのです。

InfoQ: 分散システムをプログラムする人のほとんどが,“eight fallacies of distributed computing(分散コンピューティングの8つの嘘)”として有名になった,誤った仮定の餌食になっています。あなたの著書で解説されている分散デザインパターンは,この問題を軽減する上で役に立つのでしょうか,だとすれば,それはなぜですか?

Burns パターンの適用が堅牢なシステム構築に有効であると同時に,システムを構築する上で考慮すべき設計上の重要な事柄がすべて網羅されるからです。その他にも,システムを話す上で共通の言語となることも期待できると思います。共通のパターンをお互いに教え合うことができれば,皆が同じ道を何度も何度も通る必要はなくなります。とは言っても魔法ではありませんから,実践的な経験を積んで多くのことを学ぶ必要はあります。

InfoQ: Kubeconでの講演の多くは,開発を(うまくいって当然の)退屈なものにすることを目的としていました。コミュニティはどうなってしまったのでしょう?少し想像を逞しくしてみた場合,現在の状況と比較して,5年後はどのようになっているのでしょうか?

Burns: そうですね,Kubernetesについて話すことが,Posix,あるいはx86の命令セットについて話すのと同じようになればよいと思っています。話をする価値はありますし,仕事をする上で誰もが学ばなくてはならないものですが,興奮を覚えるようなものではありません。ガベージコレクションや,あるいはオブジェクト指向プログラミングのようなものになるとよいですね。仕事に役立つ重要なツールですが,目新しくはなく,ファンがいるというようなものでもないのです。

開発を振り返った時に,“ああ,こんな素晴らしい抽象レイヤをベースにできたおかげで,すばらしいものが完成した”,と思えることを願っています。Kubernetesは目的地ではなく,優れた基盤だからです。その上に構築できるものがたくさんあります。

本書で解説されているコードのサンプルは,GutHubリポジトリからダウンロードできる。

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

BT