SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2018】セッションレポート(AD)

サービスメッシュの「Istio」や、OSSで構成されたマネージドサービス――ミッションクリティカルなシステムをKubernetesで実現するカギはツールにあり!【デブサミ2018】

【16-C-4】Kubernetesでミッションクリティカル・システムを実現するための設計/実装ノウハウ

  • このエントリーをはてなブックマークに追加

 コンテナ・オーケストレーション技術のデファクトとなりつつあるKubernetesは、エンタープライズ領域においても急速に導入が進んでおり、とりわけBtoCビジネスを展開する企業での需要が目立つ。一方でKubernetesの利用を前提とした場合、どのように設計/実装すればいいか、ベストプラクティスはいまだ出そろっていない。そうした課題に応えるべく、Oracleでは「高可用性」の観点からKubernetesにおけるアーキテクチャ設計/実装手法の研究に力を注いできたという。本セッションでは日本オラクルの早川博氏が、高可用性を実現する上で押さえるべき実装面での必須ポイントと、それらを前提に実現されるミッションクリティカルKubernetesのありかたを紹介。大規模かつ高可用性が求められるシステムを実現するには具体的にどうすればいいか、最新のノウハウが語られた。

  • このエントリーをはてなブックマークに追加
日本オラクル株式会社 クラウド・テクノロジー事業統括 セールスコンサルタント Cloud Native Developers JP 早川博氏
日本オラクル株式会社 クラウド・テクノロジー事業統括 セールスコンサルタント Cloud Native Developers JP 早川博氏

Kubernetesの可用性の要となる2つの重要ポイントとは?

 早川氏は、Kubernetesで可用性を考えるポイントとして、「サービス境界」と「サービス単体」の2つの観点を挙げる。ご承知の通りKubernetesは個々のサービスを連携させるオーケストレーションツールだ。したがって、今回ミッションクリティカルの実装における可用性を考えるにあたっても、マイクロサービス・アーキテクチャを前提としていく。

 そもそもサービス境界の問題とは、どういうことだろうか。マイクロサービスは、互いに疎結合なサービス同士が連携して全体を構成している。この連携の境界地点で発生する問題が「サービス境界の問題」である。ここが重要なのは、サービス同士の依存関係によっては、1カ所の障害が広範囲に波及する可能性もあるからだ。

 例えば、サービスAとサービスBの2つが連携している場合、(1)サービスBで障害が発生→(2)サービスA側に、サービスBからの応答待ちのリクエストが累積→(3)応答待ちリクエストがAのリソースを占有してAも停止→(4)Bがアクセス集中で復旧困難に陥り、Bに依存する他のサービスもA同様に次々に停止……といった障害の連鎖があっという間に広がっていく。サービス単体の機能が担保されるのはもちろん大事だが、それらをつなぐサービス境界も同様に、マイクロサービス全体の可用性を担っていることがわかる。

サービス境界の障害はサービス全体に波及する可能性が
サービス境界の障害はサービス全体に波及する可能性が

 ではサービス境界の障害の連鎖が広範囲に広がるのを防ぐには、どうするべきなのだろうか。

 「有効な対策の一つが、サーキットブレーカーです。このサーキットブレーカーを2つのサービス間に置いて、サービス呼び出しに対する応答に異常を発見すると、それ以降の呼び出しを遮断する仕組みです」

 こうすれば、異常発生時には呼び出し元のサービスに早期にエラーが返されるため、呼び出し元のリソースの占有を回避して、システムの稼働を維持しながら障害発生部分のサービス復旧を進めることが可能になる。

サービス境界の障害解消にサービスメッシュ=「Istio」が有効

 では実際に、サーキットブレーカーを導入する場合はどのように進めたらいいだろうか。早川氏は「境界に配置するだけなら簡単に見えるが、実際にはかなりの手間とスキルを要求されるため、自力で実装・運用するには工数もコストも相応にかかります」と語る。

 また、サービス境界の問題と対処法は、上記の例(サーキットブレーカー)以外にも多くの項目があり、すべてに自力で対処するのは困難だ。サービス境界の問題の代表的なものとして早川氏は下の4つの項目を挙げており、これらを含むすべてに自社で的確に処置するのは困難を伴う。

  • (1)サービス間通信の一時的な障害に対する再試行
  • (2)正常に可動していないサービスの応答をムダに待ってしまうことでリソースを浪費することを防止
  • (3)障害の影響がサービス機能全体に波及しないように、サービス群を適切に隔離
  • (4)複数サービスにまたがるデータ更新の結果整合性の保証

 これを解決するのが「サービスメッシュ」の考え方だと早川氏は話す。

 サービスメッシュとは、個々のサービス間の通信を仲介するネットワークインフラストラクチャのレイヤだ。これを置くことで、数多くのサービス間の通信における、セキュリティの適用、ポリシー管理、さらにフェイルオーバーといった処理を統合的に実⾏し、サービス全体の運用を最適化しながら維持する。

 サービスメッシュ機能を提供するソフトウェアの中でも、最近多くの注目を集めているのが「Istio」だ。これはGoogle、IBM、Lyftによって開発され、2017年5月にオープンソース化されている。

 「Istioは、サービスメッシュのツールとして、サービス境界の問題の多くを解決できることが知られています。上で挙げた4つの「対処すべき課題」の(1)~(3)までは、Istioによって的確に対処できます」

 Istioの特長の一つが「アプリケーションに影響なく、サービス境界の障害対策を導入できる」点だ。IstioではEnvoyと呼ばれるプロキシソフトウェアをそれぞれのマイクロサービス上に配置し、これらのEnvoyがネットワークトラフィックを仲介してサーキットブレーカーなどの機能を担う。

 「Istioを導入する際には、Kubernetesと組み合わせる場合の制約やバージョン選択、その他コンフィギュレーションや構成要素の管理・監視設定など、専門のスキルと工数を要する作業が必要になります。このため十分に知見のある技術者を確保することが必要です」

Istioを導入する上で考慮するべきポイントとは?
Istioを導入する上で考慮するべきポイントとは?

サービス単体の可用性を確保するのに有効な2つのパターン

 続いて早川氏は、Kubernetesでの可用性を考える上で必要な2つ目のポイント、「サービス単体の可用性の確保」に触れた。個々のサービスの観点では、モノリシックなアプリケーションに適用していた従来型の障害対策が有効だが、さらにKubernetesの機能を組み合わせることで、より高度な可用性構成が実現できる。

 「まずは従来どおり、SPOF(Single Point of Failure)を生じさせないためにサービス内の構成要素を冗長化し、障害からの回復性を念頭に置いて設計します。そしてこれらを、Kubernetesの自律回復の機能を活用して実装していきます」

 それらの実装例として、早川氏は以下の2つのパターンを紹介する。

【Replicated Database】MySQLの冗長構成+自動再起動

  • Kubernetesの「Service」オブジェクトの使い分けで、マスターおよびリードレプリカへのアクセスを適切にルーティングする。
  • Kubernetesの「StatefulSet」を使って、データベースの自動再起動を実装する。

【死なないKafka】透過的に自律回復するクラスター

  • オープンソースの分散メッセージングシステム「Apache Kafka」のBrokerをKubernetesに分散配置。
  • Kubernetesの「Statefulset」とKafkaクラスターの自律調整機能を組み合わせて、障害時にもクライアントから見て透過的に自律回復する。

 さらに早川氏は、「Kafka Brokerを使った構成は有効だが、本番運用を考えるとまだまだ克服すべき課題があります。例えば復旧時の負荷を考慮したサイジングが必要であることや、ノードやデータセンターごと停止するケースを想定して、ミッションクリティカルのシステムではインフラレベルの可用性を考慮しなくてはなりません」と付け加える。

Kubernetesの機能を活用してサービス単体の可用性を確保
Kubernetesの機能を活用してサービス単体の可用性を確保

ほとんどの機能がOSSで構成されているOracleのKubernetesマネージドサービス

 さらに早川氏は、OracleがミッションクリティカルシステムにおけるKubernetes活用への解として、現在急ピッチで開発を進めている「Container Native Application Development Platform(CNP)」を紹介する。

 CNPとは、Kubernetesと周辺ツールおよびフレームワークを一括提供するマネージドサービスだ。その特徴として、大きく以下の2つが挙げられる。

安全な運用と開発への専念を実現するマネージドサービス

 CNPはKubernetesを中心としたコンテナベースの開発に必要な機能を網羅している。さらにそれらをアウト・オブ・ボックスで利用可能であり、開発者は基盤の構築管理から開放されてアプリケーションの可用性設計に専念できる。

 また、ほとんどの機能をオープンソースソフトウェア(OSS)で構成しているため、ベンダーロックインを回避できる。

ミッションクリティカルな可用性を実現する基盤

 障害復旧時の負荷に耐えるには、安定したパフォーマンスが必須要件となる。CNPはその実行基盤として、パフォーマンスと可用性に優れた、Oracleの第2世代IaaS(Oracle Cloud Infrastructure:OCI)を採用している。

 OCIは高速SSDを搭載したベアメタル(非仮想)サーバーを採用しており、サーバー単体のパフォーマンスが非常に高い。さらに、3つのAvailability Domains(AD)によるデータセンターの冗長化と、AD間およびAD内のホスト間をつなぐ高速ネットワークにより、高い可用性と性能を両立する設計となっている。

 CNPはこの次世代IaaSの力を生かして、大規模障害に耐える高可用性Kubernetesクラスターを提供する。

 Oracleでは正式リリースに先立ち、すでにCNPの一部クラスターを公開しており、今すぐに体験できる環境が用意されているという。

 「『Container Pipelines(Wercker)』『Apiary』『OCI(Oracle Cloud Infrastructure=IaaS)』は、今すぐに使うことができます。またTerraformベースのKubernetesインストーラも公開済みです。ぜひ、Oracleの新しいプラットフォームを体験して、自社へのミッションクリティカルKubernetes導入に役立ててください」

 最後に早川氏はこう語り、セッションを終えた。

OracleのCNPはクラスターをすでに現在一部公開中
OracleのCNPはクラスターをすでに現在一部公開中

お問い合わせ

 日本オラクル株式会社

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10713 2018/03/20 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング