クラウドネイティブ
高尾山でビールが飲みたい
クラウドネイティブ
クラウドネイティブという言葉を初めて聞いたので少しだけ調べる
VM ではなく,高密度で構成できるコンテナを基本にする. これにより,高速なスケーリングであったり,高速なデプロイが可能になる
- マイクロサービス
- システムを細かいサービスに分解し,そのそれぞれを連携させることでシステムを機能させる.局所的案機能追加・修正などが可能
- サービスメッシュ
- 細かいサービスを管理するのがコンテナで,このコンテナ間の通信などを管理する
- 宣言型 API
- コンテナ間の通信は API を介して行われるが,この API の定義を宣言すれば使えるようになる(生成される?)ような API
- イミュータブルインフラストラクチャ
- インフラの更新をコンテナに影響せず行うことができる
マイクロサービス
-
システムを細かいサービスに分解し,それぞれで連携させることでシステムを機能させる
-
サービスごとにチームが存在するので,チームそれぞれで自律的に開発・運用ができる
-
仕様の自由度が高い
-
スケーリングがしやすい
-
サービスが大きくなると attack surface が増える
-
アクセス制御・通信保護の負担が大きくなる
-
サービス個々が頻繁に変化するので依存は危険
サービスメッシュ
- サービスレベルの通信をサービスに制御させるのではなく,インフラで制御するようにする
- ログのフォーマットやタイムアウトなど統一させるべき機能が減る
- 言語の多様性に振り回されない
- サービスの前にプロキシコンテナを配置し,通信処理の役割を担わせる
- サービスのコンテナに付随するのでサイドカーコンテナともいわれる
- プロキシ側で認証や暗号化,出力の管理などをする
- 通信の保護:暗号化,認証,アクセス制御
- 耐障害性:ロードバランサ,サーキットブレーカー
- 監視:メトリクス,ログ,トレース収集
- 権限管理:コンテナの特権排除など
宣言型 API
- サービス同士を接続する API として使われるのが宣言型 API
- kubernetes が pod の数を自動制御するようなこと
- サービスがダウンしたときに自動的に回復したり,負荷が高まった時に自動的にノードを増やせる
イミュータブルインフラストラクチャ
- インフラのアップデートに伴って動かなくなることはよくある
- アップデートが必要な場合は,アップデート後の OS を用いた環境を立ち上げて古い環境を破壊する
- 問題があった場合のロールバックも簡単