문제

단일 설치의 우리의 제품을 상점의 구성을 설정 데이터베이스의 테이블이 있습니다.

도의 설치'know'에 대해 다른 설치.

그것은 항상 일반적인 고객을 위한 여러 개 설치의 사본에서 우리의 제품의 다른 데이터 센터는 지리적으로 멀리 떨어져 있습니다.즉,설정 정보될 필요가 생성되면,그 수출을 다른 시스템입니다.의 일부를 구성한 다음 변경하면 현장 조건입니다.예:변화하는 IP 주소,등등.이것은 어설픈,오류가 발생하기 쉬운 접근 방식이다.

우리는 이제 점점에 대한 요청이 있는 능력이 더 원활한 전략에 대한 공유의 글로벌 데이터,하지만 여전히 수 있도록 현지 수정할 수 있습니다.

지 않은 경우에 현지 수정 조금 다음 우리가 사용할 수 있는 Oracle 의 데이터 복제 기능입니다.

인 HA 요구사항을 갖는 모든 구성에 하나의 데이터베이스는 옵션이 아닙니다.

다른 사람이 이 문제가 발생하고 당신은 이제까지 파악이 좋은 프로그래밍 방식의 솔루션을 위한 이?알고 좋은 논문에 대해 설명할 수 있는 부분 또는 전체 솔루션?

우리는*유닉스 기반으로 사용하고,Oracle.변화에 복제해야 하는 모든 노드를 매우 빠르게(두 번째 또는 2).

도움이 되었습니까?

해결책

나는 확실하지 않는 방법 가능한 그것은 당신을 위해 방법을 변경하려면 당신은 구성,하지만 우리는 구현에 비슷한 이해의 아이디어를 사용하여 로컬 무시합니다.특히,당신은 두 개의 구성하는 테이블과 동일(들 CentralConfig 및 LocalConfig).CentralConfig 유지에 중앙에 위치하며,복제으면 위성의 위치,그것을 읽기 전용입니다.LocalConfig 설정할 수 있습니다에서 지역 사이트입니다.당신의 절차는 쿼리를 구성한 데이터는 먼저의 데이터에 대한 LocalConfig 테이블,그리고 찾지 못한 경우,그것을 검색에서 CentralConfig 테이블.

예를 들어,만약 당신이 작업을 수행하기 위해 노력하고 값으로 v$매개 변수 테이블을 쿼리할 수 있습니다 당신의 구성을 사용하여 FIRST_VALUE 함수에서 SQL 분석:

  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"열을 설명하는 컨텍스트에 우리가 찾고 있습니다.예를 들어,우리가 매개 변수"timeout"설정을 중심으로,그러나 심지어는 로컬로,우리는 여러 구성품을 사용하는 이 값을 지정해야 합니다.그들은 모두 동일한지만 우리는 구성을 수행할 수도 있습니다 그들을 다르게한다.그래서 때의 도구를 보고"시간 제한을"값,그것은 또한 제한 의 범위가 있습니다.에서 자체 구성할 수 있습 와일드카드를 사용할 때 우리가 우리가 무엇을 원하는 범위에 대한 같은:

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 각각합니다.마지막 두 가지 구성이 유지될 수 있에 CentralConfig,하지만 다른 두관될 수 있 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;

그것은 기본적으로 동일한 쿼리를 제외하고,나는 삽입하는 번역하는 식기 전에 내 localsort 고 나 제한 상황에.그것이 무엇을 변환하%고_캐릭터를 chr(1)&chr(2),는 것입니다 그들에게 정렬한 후 영숫자 문자가에서 내림차순으로 정렬 할 수 있습니다.이 방식에서 명시적으로 정의된"Comp 엔진 것"오기 전에"Comp 엔진%",는 것이 오기 전에"%".는 경우에는 컨텍스트가 정의된 동일하게,지역 config 보다 우선한 중앙 사람;당신이 원하는 지역을 항상 트럼프 중앙,는 경우에도 중부의 범위는 더 단단히 당신의 위치를 반대로 두 개의 정렬을 용어입니다.

다른 팁

우리가하는 방식은 Steve 's와 비슷합니다. 먼저 분산 환경에 적용하려는 모든 구성을 저장하려면 중앙 구성 서비스가 필요합니다. 구성을 수정할 때마다 중앙 구성 서비스에서 구성을 수정하십시오. 각 프로덕션 호스트에서는 루프 스크립트를 작성하여 구성을 업데이트 할 수 있습니다. 보다 정교한 솔루션의 경우 모든 서버로의 배치를 잘못 구성하지 않도록 전략을 설정해야합니다. 아마도 간단한 잠금 장치 또는 회색 릴리스 프로세스가 필요할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top