質問

一連のデータベーステーブルに構成が構成されている製品ストアの単一のインストール。

他のインストールについては、インストールのどれも「知っている」ものではありません。

顧客は、地理的にはるかに離れているさまざまなデータセンターに製品の複数のコピーをインストールすることが常に一般的でした。これは、構成情報を1回作成し、他のシステムにエクスポートする必要があることを意味します。構成の一部は、ローカル条件に合わせて変更されます。たとえば、IPアドレスの変更など。これは不格好なエラーが発生しやすいアプローチです。

現在、グローバルデータを共有するためのよりシームレスな戦略を持つ能力を要求していますが、それでもローカルの変更を許可しています。

ローカル変更ビットがなければ、Oracleのデータレプリケーション機能を使用できます。

HA要件により、1つのデータベースにすべての構成があるため、オプションではありません。

他の誰かがこの問題に遭遇しましたか?部分的または完全な解決策を説明する可能性のある良い論文を知っていますか?

私たちは *nixベースであり、Oracleを使用しています。変更は、すべてのノードに非常に迅速に複製する必要があります(2番目または2)。

役に立ちましたか?

解決

構成の処理方法を変更することがどれほど可能かはわかりませんが、ローカルオーバーライドのアイデアを使用して、これに似たものを実装しました。具体的には、同一の2つの構成テーブルがあります(CentralConfigとLocalConfigと呼びます)。 CentralConfigは中央の場所に維持され、衛星の場所に複製され、読み取り専用です。 LocalConfigは、ローカルサイトでセットアップできます。構成データを照会する手順は、最初にLocalConfigテーブルのデータを探し、見つかっていない場合はCentralConfigテーブルから取得します。

たとえば、v $パラメーターテーブルの値でこれを実行しようとしている場合、SQL Analyticsのfirst_value関数を使用して構成を照会できます。

  SELECT DISTINCT
         NAME
       , FIRST_VALUE(VALUE) OVER(PARTITION BY NAME 
                                     ORDER BY localsort
                                ) VALUE
    FROM (SELECT t.*
               , 0 localsort
            FROM local_parameter t
           UNION
          SELECT t.*
               , 1 localsort
            FROM v$parameter t
         )
ORDER BY NAME;

組合のlocalsort列は、local_parameter値がv $パラメーター値よりも優先されることを確認するためだけにあります。

私たちのシステムでは、実際にはこれよりもはるかに洗練されています。探しているパラメーターの「名前」に加えて、探しているコンテキストを説明する「コンテキスト」列もあります。たとえば、中央に設定されたパラメーター「タイムアウト」がある場合がありますが、局所的には、この値を使用する複数のコンポーネントがあります。それらはすべて同じかもしれませんが、私たちはそれらを別の方法で構成したいと思うかもしれません。そのため、ツールが「タイムアウト」値を検索すると、スコープによって制約されます。構成自体では、次のようなスコープに必要なものを定義するときにワイルドカードを使用する場合があります。

CONTEXT       NAME    VALUE
------------- ------- -----
Comp Engine A timeout    15
Comp Engine B timeout    10
Comp Engine % timeout     5
%             timeout    30

上記の構成によると、すべてのコンポーネントでは30のタイムアウトを使用しますが、あらゆるタイプのコンプエンジンでは5のタイムアウトを使用しますが、コンプエンジンA&Bにはそれぞれ15と10を使用します。最後の2つの構成はCentralConfigで維持される場合がありますが、他の2つはLocalConfigで維持される場合があり、この方法で設定を解決します。

  SELECT DISTINCT
         NAME
       , FIRST_VALUE(VALUE) OVER(PARTITION BY NAME 
                                     ORDER BY (TRANSLATE(Context
                                                        , '%_'
                                                        , CHR(1) || CHR(2)
                                              ) DESC
                                            , localsort
                                ) VALUE
    FROM (SELECT t.*
               , 0 localsort
            FROM LocalConfig t
           WHERE 'Comp Engine A' LIKE Context
           UNION
          SELECT t.*
               , 1 localsort
            FROM CentralConfig t
           WHERE 'Comp Engine A' LIKE Context
         )
ORDER BY NAME;

基本的には同じクエリですが、地元の前に式を翻訳し、コンテキストを制約していることを挿入しています。それがしているのは、%と_文字をChr(1)&Chr(2)に変換することです。このようにして、明示的に定義された「Comp Engine A」は、「Comp Engine%」の前に来ます。コンテキストが同じように定義されている場合、ローカル構成が中央の構成よりも優先されます。 Centralがよりしっかりとスコープされた場合でも、ローカルに常にTrump Centralをトランプすることを望んでいる場合、2つの並べ替えの条件の位置を逆にするだけです。

他のヒント

私たちがこれをしている方法は、スティーブのものと似ています。まず、分散環境に適用するすべての構成を保存するために、Central Configureサービスが必要です。構成を変更するたびに、Central Configureサービスで変更します。各生産ホストでは、ループスクリプトを記述して構成を更新できます。より洗練されたソリューションのために、すべてのサーバーへの間違った構成バッチを回避するためにいくつかの戦略を設定する必要があります。これは災害になります。たぶん、シンプルなロックまたはグレーのリリースプロセスが必要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top