[안정성] 비밀무기 기능 스위치 기술 | 제이디로지스틱스 기술팀

1. 배경

이전 기사 [안정성: MTTR 단축 탐색]에 이어 일부 온라인 문제 비상 계획에서 롤백 솔루션을 채택하는 것을 보았는데, 코드와 관련된 대부분의 시나리오에서는 기술 전환이 온라인 문제의 출혈을 신속하게 멈추는 가장 좋은 방법입니다. . 예를 들어 주문 이행 플랫폼 그룹의 Promise는 주문을 위한 골든 링크 역할을 합니다. 온라인 문제가 있는 경우 일반적인 롤백 방법은 5~10분 이상(500개 이상의 시스템)이 소요되며 롤백이 문제를 악화시키는 경우 제대로 작동하지 않습니다.그러나 스위칭 기술을 사용하는 것은 몇 초 정도입니다 . 동시에 Promise의 기능 스위치 기술은 일일 반복 요구 사항을 처리하고 안정성을 보장하는 데에도 중요한 역할을 합니다. 변경 범위가 크고 영향이 큰 요구 사항의 경우 일반적으로 온라인 상태가 된 후 최악의 시나리오가 무엇인지 묻습니다. 비상 계획은 무엇입니까? 스위치를 가져왔나요? . 물론 스위치에도 비용이 발생합니다.다음으로 이 기사에서는 고주파 릴리스가 지원하는 기능 스위치 기술의 이론과 실제를 결합한 세부 사항을 공유하겠습니다.

2. 기능스위치란 무엇인가요?

함수 스위치는 실제로 코드의 구성 항목을 동적으로 관리하는 데 도움이 되는 경량 동적 구성 프레임워크입니다(코드의 논리적 방향에 동적으로 개입할 수 있다는 점을 이해하면 됩니다). 기능 스위치를 사용하면 필요에 따라 앱의 일부 기능을 켜거나 끌 수 있습니다. 이 방법은 일반적으로 블랙리스트 및 화이트리스트 설정, 비즈니스 기능 다운그레이드, 트래픽 차단, 주요 프로모션 중 로그 수준 동적으로 조정 등의 시나리오에 적합합니다.

从代码的角度来讲,每个开关的本质就是一个"if......else"条件语句块。

3. 스위치 사용

고주파 릴리스 및 출시의 경우 스위칭 기술은 합리적인 기술적 수단이며 두 가지 새로운 용도가 부여되었습니다.

1. 신속한 출혈 중지 : 제작 환경에 문제가 발생하면 해당 기능의 스위치 옵션을 직접 찾아 '끄기'로 설정하세요.
2. 격리: 기능 코드는 온라인 실행 경로에서 격리되어 사용자에게 영향을 주지 않습니다.

4. 스위치 비용

스위칭 기술을 사용하면 비용도 발생합니다.

1. 첫째, 각 스위치 옵션에는 "켜짐"과 "닫힘"이라는 두 가지 이상의 상태가 있습니다. 출시 전 소프트웨어의 기능 검증을 수행할 때 시스템의 각 스위치 상태를 고려해야 하며 때로는 조합 테스트도 수행해야 하는데, 스위치 수가 많을수록 조합 테스트 비용이 더 많이 발생할 수 있습니다.
2. 둘째, 모든 스위치 코드가 우아한 방식으로 구현될 수는 없으므로 코드 작성 및 유지 관리가 어느 정도 복잡해지고 신중한 설계가 필요합니다.
3. 마지막으로, 스위치가 시스템에 오래 있을수록 유지 관리 비용이 더 많이 듭니다. 예를 들어, Promise 시스템에는 역사적인 이유로 인해 스위치가 200개 이상 있는데, 제때에 정리되지 않았고 지금은 감히 건드릴 수도 없습니다.

5. 스위치 관리

스위치가 가져오는 이익을 극대화하고 비용을 최소화하기 위해서는 스위치를 체계적으로 관리해야 하며, 다음과 같은 원칙을 최대한 준수해야 합니다.

1. 비즈니스 요구 사항 충족과 안정성을 전제로 스위칭 기술을 최대한 적게 사용합니다 . 스위치는 본질적으로 if...else... 문이므로 프로그램이 복잡해지며, 특히 코드 설계가 혼란스럽고 코드 모듈의 책임이 불분명한 경우 오류가 발생할 가능성이 더 높습니다.
2. 관리 용이성: 소프트웨어 팀은 스위치 구성의 통합 관리를 수행하여 상태 검색 및 보기를 용이하게 해야 합니다.
3. 스위치 전략 표준화: 스위치 전략은 스위치의 정의, 이름 지정 및 구성을 나타냅니다. 기능 스위치는 서로 다른 팀 간의 원활한 협업과 의사소통을 촉진하기 위해 통합 표준 및 사양을 따라야 합니다. 현재 그룹 스위치의 명칭은 표준화되어 있지 않으며 표준화 작업을 진행 중이다.
4. 확장성: 기능 스위치는 필요할 때 새로운 기능을 쉽게 추가하거나 기존 기능을 수정할 수 있도록 확장 가능해야 합니다. 이는 모듈식 설계와 개방형 인터페이스를 통해 달성할 수 있습니다.
5. 안정성 확보를 전제로 스위치의 불필요한 부분을 정기적으로 점검하고 청소해 주십시오. Promise의 새로운 기능 스위치는 점차 정리되고 있습니다.

6. 보안: 기능 스위치에는 승인된 사용자만 스위치 상태를 수정하고 구성할 수 있도록 적절한 보안 조치가 있어야 합니다. 또한 기능 스위치는 무단 액세스 및 공격을 방지해야 합니다. DUCC 권한 관리, XBP 승인 관리 등이 있습니다.

즉, 지속적인 전달에 기능 스위치 기술을 사용하는 원칙은 시스템이 다양한 환경과 요구 사항에서 안정적이고 효율적으로 유지될 수 있도록 유연성, 신뢰성, 보안, 표준화, 자동화, 추적성 및 확장성을 포괄적으로 반영해야 합니다.

6. 일반적인 애플리케이션 시나리오

스위치는 해제 스위치, 작동 및 유지 관리 스위치, A/B 실험 스위치, 권한 스위치로 구분할 수 있습니다. 구체적인 적용 시나리오는 다음과 같습니다.

기능 릴리스가 더욱 유연해졌습니다 . 이러한 스위치를 사용하면 코드 기능을 프로덕션 환경에 미리 배포할 수 있지만 기능이 적용되지는 않습니다. 예를 들어 주문을 위한 Promise 시스템의 골든 링크는 다운스트림입니다. 많은 요구 사항에 따라 시스템이 먼저 온라인 상태가 되어야 합니다. 모든 업스트림이 온라인 상태가 된 후 비즈니스 확인을 위해 스위치를 켤 수 있습니다. 아래와 같이 DUCC 구성:
capactiySwitch.enable=true
블랙 앤 화이트 리스트 기능 : 블랙 앤 화이트 리스트는 일반적으로 사용되는 접근 제어 규칙으로, 블랙 앤 화이트 리스트 기능은 기능 스위치를 통해 신속하게 구현될 수 있습니다. 예를 들어 Promise의 KA 에이징 화이트리스트 스위치가 있습니다. 아래와 같이 DUCC 구성:
kaPromiseSwitch.whiteList=010***,011***,012***
온라인 검증 : 시스템이 온라인 상태가 된 후, 비즈니스는 생산 환경에서 테스트 및 검증되어야 하며, 생산 환경에서 테스트 및 검증에는 특정 위험이 있으므로 관련 검증 매개변수 조합으로 기능 스위치를 구성할 수 있습니다. 예를 들어 주문 전, 주문 후 주문 번호, 창고 ID 등 사용자 핀에 따라 다른 사용자의 경험에 영향을 주지 않고 생산 환경에서 기능을 테스트하고 문제를 발견할 수 있습니다. 더 일찍. 아래와 같이 DUCC 구성:
jitSwitch.storeId=1-1,1-2,1-3,1-4,****
런타임 시 로그 레벨을 동적으로 조정 : 애플리케이션이 실행되는 동안 로그 레벨을 동적으로 수정하는 기능이다. 예를 들어 Promise는 618&Double 11 프로모션 피크 기간 동안 로그를 다운그레이드하고(수신 및 발신 매개변수와 다운스트림 종속 수신 및 발신 매개변수만 인쇄) TP99는 30ms에서 13ms로 감소합니다. 문제 해결을 촉진합니다. 아래와 같이 DUCC 구성:
log4j.logger=info
비즈니스 기능 다운그레이드 : 예를 들어 대규모 프로모션이 있을 경우 스위치를 통해 비핵심 비즈니스 로직을 다운그레이드하여 불필요한 리소스 소비를 줄일 수 있습니다. 또는 다운스트림 JSF 문제에 따라 비즈니스 손실이 허용되는 경우 스위치도 다운그레이드될 수 있으며, 스위치가 닫히면 다운스트림 JSF가 호출되지 않습니다. 아래와 같이 DUCC 구성:
commonSwith.fence=true
수량 검증 : 리팩토링된 신규 기능 출시 후, 온라인 검증을 위해 주문 번호 또는 핀 비율을 기준으로 수량이 점차 감소됩니다. 아래와 같이 DUCC 구성:
commonSwith.percent=10
클라이언트 동작 제어 기능 : APP의 경우 이 제어는 클라이언트가 동기화 빈도, 재시도 빈도, 하트비트 시간 등과 같이 주기적으로 서버에 연결하는 것을 의미할 수 있습니다.

7. 전환 연습

7.1 다중 스위치

예를 들어, 여러 시나리오에서 MQ를 보낼 때 현재 멀티플렉싱 스위치를 사용하여 MQ를 비동기식으로 보낼지 아니면 동기식으로 보낼지 구성할 수 있습니다. 주제별로 스위치를 구성하는 대신 동일한 장면을 공통 스위치로 설정하세요. 다만, 범용 스위치는 절연성이 좋지 않아 구성 검증을 수행하지 않을 경우 다른 스위치 기능에 영향을 미칠 수 있다는 점에 유의해야 한다.

jmqUtil.asyncTopics=topic1,topic2,topic3,topic4,....

예를 들어 다운스트림 JSF 타사 인터페이스에 대한 종속성이 많은 경우 재사용 가능한 스위치를 설계하여 다운그레이드해야 하는지 여부를 결정해야 합니다.

7.2 특정 시간에 적용되는 스위치

스위치 특성: 스위치는 여러 속성 값으로 구성할 수 있으며 해당 값은 지정된 시간에 따라 적용됩니다.

사용 시나리오: 예를 들어 창고 용량 승인, 이전 사업에서는 해당 버전에서 0점 전환이 적용되어야 했고, R&D에서는 이를 0점으로 구성해야 했는데, 이렇게 오랫동안 구성하면 R&D 효율성이 떨어집니다. 낮을 것이며 DUC 스위치도 시간에 맞춰 포인트별로 수정해야 합니다. 따라서 유효시간과 유효값을 미리 설정할 수 있는 스위치로 설계되었습니다. 예를 들어, 다음은 생산능력 승인을 위한 ducc ​​스위치인데 EffectiveTime은 유효일자를 나타내고, version은 해당 유효버전을 나타낸다.

[
  {
    "effectiveTime": "2023-03-09 12:00",
    "version": "76"
  },
  {
    "effectiveTime": "2023-04-20 12:00",
    "version": "77"
  },
  {
    "effectiveTime": "2023-05-14 00:00",
    "version": "78"
  }
]

8. 요약

전반적으로 기능 토글은 기술 팀이 보다 효율적으로 작업하는 동시에 사용자 경험을 개선하고 새로운 기능 출시 위험을 줄이는 데 도움이 될 수 있습니다.

참고:

Continuous Delivery 2.0 비즈니스가 주도하는 DevOps의 본질

 

저자: JD Logistics Feng Zhiwen

출처: JD Cloud 개발자 커뮤니티 Ziyuanqishuo Tech 재인쇄 시 출처를 명시해 주세요.

벌금 200위안 및 100만 위안 이상 압수 You Yuxi: 고품질 중국어 문서의 중요성 Musk의 하드 코어 마이그레이션 서버 JDK 21용 Solon, 가상 스레드는 놀랍습니다! ! ! TCP 혼잡 제어로 인터넷 Flutter를 절약한 OpenHarmony 출시 Linux 커널 LTS 기간이 6년에서 2년으로 복원 Go 1.22에서 for 루프 변수 오류 수정 Svelte가 "새 휠" 구축 - Google이 창립 25주년을 기념함
{{o.이름}}
{{이름}}

Supongo que te gusta

Origin my.oschina.net/u/4090830/blog/10114761
Recomendado
Clasificación