データとしての構成
(セクション: アーキテクチャとプロトコル)
1) 「configuration as code」との考え方と違い"
Configuration as Data (CaD)は、バージョン、スキーマ、移行、監査、テストなど、実行可能コードに依存せず、ビジネスデータとして管理されるタイプ、宣言、検証済みモデルとしての構成の表現です。
「configuration as code」とは異なり、コンフィギュレーションを生成するロジックがテンプレート/スクリプト内に存在する場合、CaDは真実のソースから命令を除外します。すべて-クリーンデータ+厳密なスキーム+ポリシー。
主な目標:予測可能性、差分能力、変更安全性、高速ロールバック、段階的かつ自動的にコンプライアンスを制御する能力。
2) 「config as data」の原則"
1.宣言性とあいまいさ:私たちは、達成のステップではなく、所望の状態を記述します。
2.タイプ安全性とスキーム:厳格な契約のためのJSON スキーマ/Protobuf/Avro/OpenAPI。
3.アーティファクトの不変性:設定ショットはバージョン管理され、署名されます(出所)。
4.Validation and policy: in pipeline-syntax→semantics→policy-as-code (OPA、 rules)。
5.configsの可視性:logs/metrics/tracesのバージョン指紋。
6.責任共有:データ(構成)、スキーマ(契約)、ポリシー(制限)、コントローラ(実装)。
7.モジュール性とレイヤー:グローバル、地域、テナント、製品、フィーチャーレベル、予測可能なマージと優先度。
3)構成シミュレーション: 契約としてのスキーマ
エンティティファミリー:ルーティング、リミット、フィッシュフラグ、関税、ABセグメント、クォータ、リスクルール、財務設定など。
型:explicit enum/one Of、 range、 regex、 referential integrity (ref/ID)。
スキーマバージョニング:'v1→v1beta2→v2'(拒絶計画、マイグレーション)。
Defaulting/Mutation:検証段階での安全なデフォルト;適用の決定論的な順序。
制約:ビジネス制約(テナントの'rateLimit<=2000 rps'など)。
yaml apiVersion: config. example. io/v1 kind: RateLimitPolicy metadata:
scope: tenant:acme spec:
targets:
- service: checkout endpoint: /api/pay method: POST limit:
unit: second value: 500 burst: 200 strategy: tokenBucket
4)レイヤー、継承、紛争解決
Иерархия: 'global→region→environment→tenant→product→cohort→user'。
マージルール:宣言-「最後のウォン」(オーバーライド)または戦略(フィールドごとにマージ/パッチ/置換)。
交点での検証:競合するキーを禁止し、明示的にオーバーライドする必要があります。
最終的な有効な構成の可視化が必要です(決定論的拡散)。
5)構成ライフサイクル(GitOpsパラダイム)
1.真実のソース:データ+スキーマ+ポリシーを持つリポジトリ。
2.パイプライン:- 構文チェック(lint)、
- スキームに応じた検証、
- セマンティックチェック/テスト、
- policy-as-code(例)OPA/Rego)、
- 安全な移行(第7条を参照)、
- スナップショットの署名と公開。
- 3.プロモーション:ディレクトリ'dev/qa/staging/prod'またはリング'ring-0/.../ring-N'間のPR。
- 4.配信:コントローラ/オペレータは、新しいスナップショットをプルアップし、調整サイクルを介して適用されます。
- 5.監査とリバーシビリティ:すべての変更が追跡されます。rollback-コミット/ロールバックのスナップショットを元に戻します。
6)構成の配達そして配分
Static (pull-on-start):スナップショットを最初にロードし、再起動して更新します。
動的(watch/stream): etcd/Consul/ZooKeeper、 Kubernetes API/CRD、独自のConfig Service。
プロトコル:gRPC/REST with ETag/If-None-Match、 long-poll/watch、スナップショット+増分拡散。
キャッシュ:TTLと署名を使用したローカルスナップショット;原子の変更(二重緩衝)。
Sequence: strong (leader/quorum)とeventual (edge/IoT)。重要なシステムの場合-quorum+RA。
グローバルローリング:リージョン/リング(リングデプロイ)で、同時帯の制限があります。
7)構成データの移行
データベースについては、expand→migrate→contractが動作します:- 拡張:私たちは、消費者を壊すことなく、デフォルトで新しいフィールドを導入します。
- マイグレート:バックフィル/コンバータ(マイグレーションプロバイダスクリプト、idempotency)。
- Contract:すべてのコントローラがスキーマの新しいバージョンにある場合、廃止されたものを削除します。
- 互換性ルール:古いロジックは新しい、新しい-古いトランジションを理解します。
8)ポリシー、コンプライアンス、セキュリティ
Policy-as-code: Rego/Conftest/OPA Gatekeeper-危険な値の禁止(例えば、'timeout=0'、 TLSの無効化、無制限のクォータ)。
RBAC/ABAC:どのセクションとレイヤーを変更できるか。
敏感なセグメント(支払い/限度)のための4つの目。
秘密:一般的な設定(KMS、 Vault、 SOPS)を設定しないでください。リンク/参照のみです。
署名と信頼:配達の検証(証言)、署名されていないスナップショットの禁止。
消毒:テンプレートおよびレンダリング中の注入に対する保護。
9)観測可能性、SLO、リスク管理
テレメトリーの設定タグ:'{config_digest、 config_version、 ring、 scope}' in logs/metrics/tracks。
コンフィグガンのゴールデンメトリクス:アプリケーションの時間、成功率、ロールバック数、一貫性の時間。
ローリング時のゲート設定:コードについては、カナリアステップとSLO劣化の自動停止を行います。
Dogfooting:内部/ベータコホート最初。
10)アプリケーションのホットリロード、トランザクション性、セキュリティ
原子スイッチ:メモリ→単一の原子スイッチに新しい構成が用意されています。
Dry-run:アプリケーション(フィールド/ポリシーの競合を含む)の検証とシミュレーションを行います。
部分的な失敗:関連するコンポーネントのすべてまたは何もない戦略または劣化の明確な説明。
バックオフ/再試行:アプリケーションエラー-安全なロールバックと指数遅延で繰り返す。
11) configsのサブセットとしてのficheflags
Ficheflagsは、セグメントターゲティング、インクルージョン半径制限、キルスイッチという特殊なポリシーを持つ設定データです。
要件:決定的なターゲティングセマンティクス、監査、セキュアなデフォルト、クライアント/サーババージョンの互換性。
12)ツールとメディア
メディア:JSON/YAML/TOML/Protobuf/Avro(ネットワーク配信用-より頻繁にProtobuf/JSON)。
レンダリング/コンポジション:Kustomize/Helm/Jsonnet(ジェネレータのように、結果はクリーンデータです)。
ストレージ/バス:Git、 OCIレジスタ(アーティファクトとして)、S3-compatibleストレージ、etcd/Consul/KV。
コントローラ:独自の演算子、GitOpsエージェント、Sidecar設定プロバイダ。
ポリシー:OPA/Rego、 Kyvernoのようなメカニズム。
13)チェックリスト
デザイン・デザイン
- スキームが最初に来る(JSON Schema/Proto)、タイプ/制限/デフォルトが記述されています。
- スキーマバージョニングとマイグレーションがドキュメント化されています。
- レイヤー階層とマージ戦略が定義され、テストされました。
パイプライン
- Lint→schema-validate→semantic tests→policy-check→sign→publish。
- レビュアーのためのドライランおよび効果的な構成の視覚化。
- SLOによる自動ゲートによるコンフィギュレーションのカナリア圧延。
Prod
- logs/metricsに'config_digest'があります。
- 設定ロールバック-コードデポジットと同じボタン。
- スナップショット/バックアップと監査履歴の構成が利用可能であることを確認。
14)頻繁なアンチパターン
config: conditions/scripts/templates with logicの必須条件は検証されておらず、予測不可能です。
秘密と共有設定を1つのファイル/リポジトリにミックスします。
不透明なマージ:ボトムラインがどこから来たのかは不明です。
スキームの欠如:「すべてが有効です」-販売中のバグ。
Global Ring/Canary Free Edits: Instant Degradation for All。
周囲のドリフト:真実のソースを過ぎて実行時に手動で編集します。
強制的に無効化されたメカニズムのない設定キャッシュ内の長いTTL。
15)シナリオ(スケッチ)
A。地域別のトラフィック制限の微調整
1.「RateLimitPolicy」を「ring-0」に変更したPR(内部クライアント)。
2.AutoChecksスキーマ/ポリシー(2k rps ≤ limit)。
3.「ring-1」(ユーザーの5%)のプロモーション、p95/エラー率の監視。
4.'ring-N'に展開し、スナップショットを修正し、タスクを閉じます。
B。関税スケジュールの更新(財務設定)
強力な意味論とビジネスポリシー:ダブルレビュー、2段階プロモーション、タイムウィンドウエントリ、監査、インスタントロールバック機能。
C。 Global payment fifflag config flag with kill-switch:ターゲット「従業員→ベータ→10%→100%」、成功した支払い率がしきい値を下回ると自動停止します。
16)ゼロダウンタイムとプログレッシブデリバリーとの統合
Config canariesはリリースリングと同期します。
バージョン互換性:最初にフィールドを展開し、次にコード、そして締め付けを行います。
Shadow configs:戦闘との比較のためのソリューションの並列計算(例えば、制限)。
17)概要
configuration-as-dataアプローチは、明確な契約、検証、ポリシーを持つ堅牢なドメインモデルに、脆弱なファイルから設定を変換します。これは、予測可能なローリング、安全な実験、およびインシデントへの迅速な反応の基礎です。スキームを形式化し、秘密を分離し、GitOpsとcanary構成プーチを実装します。そして、構成はリスクではなくなり、管理されたプラットフォーム資産になります。