동적 데이터 원본 디자인 사고방식

디자인 사고방식


핵심 문제


1. 데이터 소스 정보의 저장
2, 데이터 소스 정보의 동적 동기화, 로드 및 캐시
3. 데이터 소스 정보의 전환
4. 데이터 소스 대상의 주입
 

2. 문제 분석


1. 데이터 소스 정보의 저장


(1) 라이브러리 리스트를 토대로 DBConnection의 설정 정보를 단독으로 유지한 다음에 DataSource(DruidDataSource를 예로 들면) 대상으로 조립하여 캐시해야 한다.
(2) 캐시 디자인.통상적으로 동적 데이터 원본 전환은 하나의 표지를 사용하여 대응하는 데이터 원본 대상을 선택한다.또한 스레드 보안 문제를 고려하여currentHashMap을 추천합니다.
 

2. 데이터 소스 정보의 동기화 및 로드


(1) 동기화 문제: 분포식 전제에서 데이터의 일치성을 고려해야 한다.low를 비교하면 캐시를 사용할 수 있고 캐시를 사용하는 경우 캐시 데이터의 일치성에 주의해야 한다.LocalCache+ZooKeeper의 경우
  • ZK를 사용하여 데이터 원본의 변화를 감청하고 분포식 시스템 데이터의 일치성을 유지한다.

  • (2) 데이터 원본의 불러오기: 스프링 용기의 도움말에 따라 이 조작은 비교적 자유로워진다.몇 개의 주해를 통해 실현할 수 있다.주로 절차의 사고방식을 묘사하다.
  • 일반적으로 DB에 액세스하기 전에 데이터 소스 객체를 만듭니다.

  • (3) 캐시 문제
  • 로컬 캐시를 사용한 리셋 문제: 구독-발표 모델을 바탕으로 하는 감청(방송) 메커니즘.ZK, MQ, Redis 모두 가능합니다.만약 하고 싶은 것이 조금이라면, 냉열 데이터의 문제를 고려할 수 있다.메모리 공간을 충분히 이용하다.LRU 메모리 폐기 알고리즘을 참조할 수 있습니다.
  • Redis 캐시:
  • 이 방안을 사용하면 분포식 시스템 데이터의 일치성을 고려할 필요가 없다.그러나 캐시 관통과 캐시 데이터의 일치성을 고려해야 한다.통상적으로 DB 루트 데이터의 변경 빈도가 크지 않기 때문에 Redis의 QPS로 빈번한 데이터 접근 요청을 지탱할 수 있을 것이다.DB 라우트가 변경되면 캐시를 업데이트해야 합니다
  • .
  • 캐시 관통 문제: 병발량이 높은 상황에서 키가 삭제되면 캐시 관통 문제를 일으킬 수 있습니다.

  • (1) 분포식 잠금 정책: 분포식 잠금을 사용하여 DB에 접근하는 스레드 수를 제한한다. 그러면 스레드를 막아서 시간 초과를 초래할 것이다.통상 이런 방안은 업무상 취할 수 없는 것이다.
    (2) 데이터 일치성 전략: DB가 방문의 압력을 견딜 수 있도록 보증한다(사실 다행이다. 누가 DB가 수백 개의 절대적인 합병을 견딜 수 없겠는가?).데이터 버전 메커니즘을 도입한다. 즉, 캐시를 업데이트할 때 현재 데이터의 버전 번호와 캐시 데이터의 버전 번호가 일치하는지 판단한다.
    3. 데이터 소스의 전환
  • 우선 고려해야 할 것은 라인 안전의 문제이다.이곳은 간단하고 거친 수단을 사용할 수 있다. ThreadLocal
  • public class DataSourceContextHolder {
    
        private static final ThreadLocal contextHolder= new ThreadLocal();
    
        public static void setDataSourceType(String groupId){
            contextHolder.set(groupId);
        }
    
        public static String getDataSourceType(){
            log.info("Service get datasource currently is : [" + contextHolder.get() + "]");
            return contextHolder.get();
        }
    
        public static void clearDataSourceType(){
            contextHolder.remove();
        }
    
    }

    4. 데이터 소스 대상의 주입
    사고방식: 동적 데이터 원본 도구에서 DataSource 표시를 얻고 표시에 따라 DataSrouce 대상을 얻는다.Spring 컨테이너에서는 이 점이 더 잘 구현됩니다.DB에 액세스하기 전에 데이터 소스를 전환하는 것이 원리입니다.
     
     
     
     
     

    좋은 웹페이지 즐겨찾기