JavaChassis3 해독: 여러 등록 센터에 대한 간편한 확장 지원

이 기사는 liubao68의 Huawei 클라우드 커뮤니티 " JavaChassis3 기술 암호 해독: 확장이 쉬운 다중 등록 센터 지원 " 에서 공유되었습니다 .

초기 버전의 Java Chassis는 Service Center에 의존하여 다양한 차별화된 경쟁력을 제공했습니다.

  • 인터페이스 수준 전달. 각 마이크로서비스 버전의 메타데이터, 특히 계약 데이터는 레지스트리를 통해 관리됩니다. 계약 데이터와 결합하여 버전 수준 라우팅 기능을 달성할 수 있습니다. 예를 들어, 마이크로서비스에는 v1과 v2의 두 가지 버전이 있습니다. v1 버전에는 인터페이스 op1과 op2가 있고, v2 버전에는 인터페이스 op1, op2, op3이 있습니다. 회색조 시나리오에서 Java 섀시는 op3의 액세스를 자동으로 다음으로 전달할 수 있습니다. v2 버전 op1 및 op2에 대한 액세스는 v1 및 v2 버전에서 로드 밸런싱됩니다.
  • 버전 규칙에 따른 인스턴스 선택. 클라이언트는 last, 2.0+ 등과 같은 버전 규칙을 구성할 수 있습니다. 이러한 방식으로 클라이언트는 실제 상황에 따라 인스턴스 버전을 필터링할 수 있습니다.

Java 섀시는 서비스 센터에 너무 많이 의존하므로 제품 개발에 병목 현상이 발생합니다. Java 섀시의 생태학적 홍보는 서비스 센터의 생태학적 홍보에 의존하므로 더 많은 사용자가 Java 섀시를 사용하는 데 도움이 되지 않습니다. 클라우드가 발전함에 따라 다양한 클라우드 환경에서 실행될 수 있는 코드 세트를 기대하는 고객도 늘어나고 있으며, 일부 클라우드 제공업체에서는 서비스 센터 운영 환경을 제공하지 않기 때문에 사용자는 Java 섀시를 선택할 때 고민을 하게 됩니다.

위의 이유를 바탕으로 Java Chassis는 등록 검색의 종속성을 단순화하고 간단하고 구현하기 쉬운 인터페이스를 정의하고 이를 기반으로 구현을 제공하며 향후 다른 구현도 제공될 예정입니다 . Java 섀시는 일련의 새로운 디자인 패턴을 채택하여 등록 센터에 대한 기능 의존도를 줄이지 않으면서 애플리케이션 자체의 신뢰성이 저하되지 않도록 합니다. Nacos  zookeeper 

인터페이스 수준 전달의 대안

Service Center를 사용하여 Java 섀시는 인터페이스 수준 전달을 제공합니다. Java Chassis 3의 첫 번째 변경 사항 중 하나는 인터페이스 수준 전달에 대한 지원이 제거된 것입니다. 이러한 방식으로 등록 센터에 대한 의존도를 70% 이상 줄일 수 있습니다. 그러나 그레이스케일 장면은 여전히 ​​많은 비즈니스에 중요하므로 Java Chassis 3에서는 그레이스케일 게시를 사용하여 이 문제를 해결합니다. 그레이스케일 게시를 사용하면 버전 메타데이터 관리 기능을 제공하기 위해 등록 센터에 의존할 필요가 없고 각 인스턴스에 버전 번호와 같은 간단한 메타데이터 정보만 있으면 된다는 장점이 있습니다.

servicecomb: 
  # 에지 서비스에 대해 라우터를 활성화합니다. 
  router: 
    유형: router 
  RouteRule: 
    비즈니스: | 
      - 우선순위: 2 
        일치: 
          apiPath: 
            접두사: "/business/v2" 
        경로: 
          - 가중치: 100 
            태그: 
              버전: 2.0.0 
      - 우선순위: 1 
        일치: 
          apiPath: 
            접두사: "/business/v1/dec" 
        경로: 
          - 무게: 50 
            태그: 
              버전: 1.1.0 
          - 무게: 50 
            태그: 
              버전: 2.0.0

등록 검색 인터페이스 및 구현

Java Chassis 3은 인터페이스 만 사용하여 새로운 등록 검색 지원을 제공합니다 . Java 섀시는 쿼리 인스턴스를 호출하며 , 후속 인스턴스가 변경되면 등록 센터 구현에서 Java 섀시에 알립니다. Discovery  findServiceInstances  InstanceChangedListener 

/** 
 * 핵심 서비스 검색 인터페이스입니다. <br/> 
 */ 
공용 인터페이스 Discovery<D 확장 DiscoveryInstance> 확장 SPIEnabled, SPIOrder, LifeCycle { 
  인터페이스 InstanceChangedListener<D 확장 DiscoveryInstance> { 
    /** 
     * 인스턴스 목록이 변경되면 검색 구현에 의해 호출됩니다. 
     * @param RegistryName 호출 검색 구현의 이름 
     * @param application 마이크로서비스 애플리케이션 
     * @param serviceName 마이크로서비스 이름 
     * @param updateInstances 최신 업데이트된 인스턴스입니다. 
     */ 
    void onInstanceChanged(StringregistryName, String application, String serviceName, List<D>updateInstances); 
  } 

  문자열 이름(); 

  /** 
   * 이 마이크로서비스에 대해 이 구현이 활성화된 경우. 
   */ 
  boolean 활성화됨(String application, String serviceName); 

  /** 
   * 모든 인스턴스를 찾습니다. 
   * 
   * 라이프 사이클: 이 메소드는 <code>run</code> 이후 언제든지 호출됩니다. 
   * 
   * @param 애플리케이션 애플리케이션 
   * @param serviceName 마이크로서비스 이름 
   * @return 모든 인스턴스가 기준과 일치합니다. 
   */ 
  List<D> findServiceInstances(String application, String serviceName); 

  /** 
   * Discovery는 인스턴스가 변경될 때 InstanceChangedListener를 호출할 수 있습니다. 
   */ 
  void setInstanceChangedListener(InstanceChangedListener<D> 인스턴스ChangedListener); 
}

Java Chassis 3에서는 등록을 관리하며, 등록 과정은 , , 단순 Life Cycle로 구분되어 있으며, 등록 데이터를 준비하고 등록을 실행할 수 있으며, 등록이 실패하거나 시스템이 정지되면 실행됩니다. Registration  initrundestroy init  run  destroy 

/** 
 * 핵심 서비스 등록 인터페이스입니다. <br/> 
 */ 
공용 인터페이스 Registration<R 확장 RegistrationInstance> 확장 SPIEnabled, SPIOrder, LifeCycle { 
  String name(); 

  /** 
   * get MicroserviceInstance </br> 
   * 
   * 수명 주기: 이 메서드는 <code>run</code> 이후 언제든지 호출됩니다. 
   */ 
  R getMicroserviceInstance(); 

  /** 
   * MicroserviceInstance 상태 업데이트 </br> 
   * 
   * 수명 주기: 이 메서드는 <code>run</code> 이후 언제든지 호출됩니다. 
   */ 
  boolean updateMicroserviceInstanceStatus(MicroserviceInstanceStatus status); 

  /** 
   * 마이크로서비스에 스키마 추가 </br> 
   * 
   * 수명 주기:이 메서드는 <code>init</code> 이후 및 <code>run</code> 이전에 호출됩니다. 
   */ 
  void addSchema(String SchemaId, String content); 

  /** 
   * MicroserviceInstance에 엔드포인트 추가 </br> 
   * 
   * 수명 주기:이 메서드는 <code>init</code> 이후 및 <code>run</code> 이전에 호출됩니다. 
   */ 
  void addEndpoint(String 엔드포인트); 

  /** 
   * MicroserviceInstance에 속성 추가 </br> 
   * 
   * 수명 주기:이 메서드는 <code>init</code> 이후 및 <code>run</code> 이전에 호출됩니다. 
   */ 
  void addProperty(String key, String value); 
}

발견된 조합 등록

Java Chassis 3은 여러 등록 센터에 등록하고 여러 등록 센터에서 인스턴스를 검색하기 위해 여러 합계를 독립적으로 구현할 수 있습니다. 각 인스턴스는 인스턴스 ID로 고유하게 식별됩니다. 인스턴스 ID가 동일하면 동일한 인스턴스로 간주되고, 다르면 다른 인스턴스로 간주됩니다. 기사 에서 언급했듯이 Java 섀시에서는 등록 파티션 격리로 인해 발생하는 잘못된 오프라인 인스턴스 문제를 해결하기 위해 고유한 인스턴스 ID를 생성하기 위해 각 인스턴스 등록(새 프로세스)이 필요합니다. 다 Java 섀시에서 정의한 기본 정보를 포함합니다. Discovery  Registration Java Chassis 3技术解密:注册中心分区隔离  Discovery  Registration 

/** 
 * 마이크로서비스 인스턴스 등록 및 검색에 사용되는 표준 정보입니다. 
 */ 
public interface MicroserviceInstance { 
  /** 
   * Environment(필수): 마이크로서비스 인스턴스의 논리적 분리에 사용됩니다. 동일한 환경의 * 마이크로서비스 인스턴스 
   서로 검색할 수 있습니다. 
   */ 
  문자열 getEnvironment(); 

  /** 
   * Application(필수): 마이크로서비스 인스턴스의 논리적 분리에 사용됩니다. 동일한 애플리케이션이 있는 * 마이크로서비스 인스턴스 
   서로 검색할 수 있습니다. 
   */ 
  문자열 getApplication(); 

  /** 
   * 서비스 이름(필수): 마이크로서비스의 고유 식별자입니다. 
   */ 
  문자열 getServiceName(); 

  /** 
   * 서비스 이름 별칭(선택 사항): 마이크로서비스의 고유 식별자입니다. * 이 별칭은 레지스트리 구현에서 
   마이크로서비스의 
   이름 변경을 지원하는 데 사용됩니다 . * 예를 들어 이전 소비자는 이전 서비스 이름을 사용하여 이름이 
   변경된 마이크로서비스 서비스를 * 찾을 수 있습니다. 
   */ 
  문자열 getAlias(); 
  /** 
   * 서비스 버전(필수): 이 마이크로서비스의 버전입니다. 
   */ 
  문자열 getVersion(); 
  /** 
   * 데이터 센터 정보(선택 사항). 
   */ 
  DataCenterInfo getDataCenterInfo(); 
  /** 
   * 서비스 설명(선택 사항) 
   */ 
  String getDescription(); 
  /** 
   * 서비스 속성(선택 사항) 
   */ 
  Map<String, String> getProperties(); 
  /** 
   * 서비스 스키마(선택): 오픈 API 정보입니다. 
   */ 
  Map<String, String> getSchemas(); 
  /** 
   * 서비스 엔드포인트(선택 사항). 
   */ 
  List<String> getEndpoints(); 
  /** 
   * 마이크로서비스 인스턴스 ID(필수). 이 ID는 마이크로서비스 인스턴스가 시작될 때 생성되거나 
   * 레지스트리 구현에 의해 할당될 수 있습니다. 
   * 
   * 마이크로서비스 인스턴스가 다시 시작되면 이 ID를 변경해야 합니다. 
   */ 
  문자열 getInstanceId(); 
  /** 
   * 마이크로서비스 서비스 ID(선택사항). 이는 서비스 센터에 사용되며 다른 구현에서는 
   서비스 ID를 지원하지 않을 수 있습니다. 
   */ 
  기본 String getServiceId() { 
    return ""; 
  } 
}







등록 검색을 구현할 때 인터페이스에서 정의한 기본 정보가 등록 센터에 등록될 수 있는지 확인하고, 인스턴스를 쿼리할 때 이 정보를 얻을 수 있는지 확인해야 합니다.

고객 사례: 모든 계란을 같은 바구니에 담지 않는 것은 기술 선택 시 매우 중요한 고려 사항입니다. 솔루션의 개방성과 대체성, 클라우드 서비스의 대체성은 많은 고객들이 우려하는 이슈입니다. 오픈 소스 기술 프레임워크의 경우 초기 버전의 Java Chassis는 다양한 등록 센터 확장을 지원하도록 설계되었지만 구현이 매우 어려웠고 무의식적으로 고객이 서비스 센터를 대체하기 위해 다른 등록 센터를 이용하는 것이 불가능했습니다. 보다 단순화된 등록 검색 구현을 제공하여 소수의 경쟁 기능을 줄이면서 고객의 선택에 대한 우려를 크게 줄여줍니다.

화웨이 클라우드의 신기술에 대해 빨리 알아보고 팔로우하려면 클릭하세요~

Tauri v2는 크로스 플랫폼 개발을 위한 새로운 선택인 Android 및 iOS를 지원합니다. FastGateway: Nginx를 대체하는 데 사용할 수 있는 게이트웨이 PostgreSQL. 새 코드의 90%는 단 50명이 완료하고 Tuoshupai가 주도합니다. Lenovo가 출시합니다 . 2024년 새로운 AI OS 운영 체제 Microsoft는 Redox OS를 지원하기 위해 Windows 11에 기본 Sudo 명령을 도입 하고 더 많은 Linux 소프트웨어를 포팅할 계획입니다. 10년 전 오늘 - Vue.js가 공식적으로 출시되었습니다. Google은 개선을 위해 Rust Foundation에 100만 달러를 기부했습니다. Rust와 C++의 상호 운용성 Mozilla가 한때 제안한 것 버려진 웹 엔진 프로젝트 "Servo"가 2024년에 다시 태어납니다 Zig 프로그래밍 언어 2024년 새로운 로드맵 출시
{{o.이름}}
{{이름}}

추천

출처my.oschina.net/u/4526289/blog/11032922