우리의 그레이스케일 발표 방안

2374 단어

1 배경과 해결 방향


그레이스케일 발표는 주로 두 가지 큰 방향이 있다
  • 코드에서 합니다.온라인 환경, 코드에서 스위치를 하고 사용자에 따라 논리가 다르다
  • 접속층에서 합니다.다중 (격리된) 온라인 환경, 접속층이 서로 다른 사용자를 대상으로 서로 다른 환경으로 전송
  • 이 두 가지 방안의 장단점을 따로따로 살펴보다
    시나리오
    장점
    결점
    코드에서 만들기
    유연하고 입도가 가늘다.코드 한 세트(환경) 운영 원가가 낮다
    그레이스케일 논리 침입 코드
    접속층에서 해요.
    코드를 침입할 필요가 없음(적음);위험이 적다
    다중 온라인 환경, 운영 원가가 높다
    구체적인 응용 장면에서 벗어나 해결 방안을 이야기하는 것은 모두 깡패들이다.구체적인 비즈니스 시나리오:
  • 온라인의 품질에 대한 요구가 높습니다. 현재 단일 테스트가 없고 QA 블랙박스 테스트, 자동화 없음
  • 변경 주기가 길고 (수용 가능), 1회 교체 기능점이 많다
  • 유량 저봉기는 22시 이후 전체 회귀 시간이 길고 측정 누락 상황이 존재한다
  • 우리가 그레이스케일 발표를 해야 하는 주요 요구는 온라인의 질을 확보하고 교체로 인한 서비스 문제를 최대한 낮추는 것이다.다른 사용자에 대한 AB Test가 아니라만약에 그레이스케일의 방안이 코드 수정과 관련이 있다면 다른 불확실한 위험을 도입할 수 있음을 감안하여 우리는 두 번째, 즉 접속층에서 분류하는 전략을 채택한다.

    2 구체적 실현 방안


    2.1 액세스 계층 - > 웹 계층


    접속층은nginx를 사용하여 IP나 쿠키를 바탕으로 분류할 수 있다. 우리는 비즈니스 ERP 시스템이기 때문에 사용자가 로그인하는 논리가 있기 때문에 쿠키를 바탕으로 하는 전략을 자연히 선택할 수 있다.쿠키의 분류 전략을 바탕으로 두 가지 실현 방안이 있다
  • nginx는 쿠키 명단 파일을 유지하고 요청할 때마다 쿠키가 명단에 있는지 다른 전송을 한다
  • nginx는 쿠키 리스트 파일을 유지하지 않고 쿠키의 특징에 따라 전송
  • 첫 번째 방안의 단점은 뚜렷하다. 매번 그레이스케일 사용자의 시간 복잡도가 O(N)인지 판단을 요청할 때마다또한 명단을 변경하려면 접속층 서비스를 조작해야 한다.우리는 두 번째 방안을 채택하여 구체적인 실현 전략을 채택한다
  • 업무 중 유지보수 백명단 파일(데이터베이스에 저장)
  • 로그인할 때 사용자가 명단에 있으면 set의 특정한 표지를 가진 쿠키를 준다.종료 또는 세션 만료 후 쿠키 무효
  • nginx가 특정 쿠키와 일치하여 전달
  • 이렇게 하면 그레이스케일의 범위를 조정하고 데이터베이스만 조작하면 되며 서비스를 다시 시작할 필요가 없다.

    2.2 웹 계층 - > 핵심 계층 모듈


    현재 두 층 모듈 간의 결합 방식은 Zookeeper를 통해 이 부분의 그레이스케일 발표를 실현하는 것이고,caller,callee를 통해 고정된 노드 이름(구체적인 버전 번호를 쓸 수 있음)을 약정하여 실현하는 것이다.

    3차원에서의 승급


    3.1 그레이스케일 유지 관리 시스템


    ${index}. ${platform}.${module} 모듈과 기계의 대응 관계를 관리하기 위해 그레이스케일이 많은 기계를 ${platform}에 스테이지 플랫폼 이름을 추가하여 실험 환경을 나타냅니다.
    실험 환경도 온라인 환경에 속하기 때문에 대응하는 모니터링을 늘려야 한다.
    전체 유량의 기계는 실험 환경을 포함하지 않는 기계로 독립적으로 배치하고 전체 유량의 유량도 스테이지 기계에 떨어지지 않는다(nginx의upstream.conf 파일은 움직이지 않는다)

    3.2 그레이스케일 컴파일 패키지 구축, 작업 배치


    전체 데이터의 컴파일 패키지는 그레이스케일로 만들어진 패키지와 같고 버전 번호도 같다.
    그레이스케일에만 배치된 작업 중 등록 노드 이름을 자동으로 업데이트합니다.
    caller, callee의 ZK 노드 이름을 고정시키기 때문에 그레이스케일 배치 작업에 스테이지의 태그 논리를 추가하도록 강제합니다.

    3.3nginx의 전송 논리


    쿠키 요청 전달 증가
    location / {
        # ...
        if ($http_cookie ~* "SPECIALID.*|$") {
            proxy_pass http://stage-cluster;
        }
    
        proxy_pass http://default-cluster;
    }
    

    좋은 웹페이지 즐겨찾기