使用服务中心

服务中心(servicecomb-service-center) 提供了完备的注册发现机制, 实现了所有 MicroserviceMicroserviceInstance 信息的注册和发现, 是 servicecomb 缺省使用的注册发现机制。

服务中心支持使用 PULLPUSH 两种模式通知实例变化, 开发者可以配置服务中心集群地址、连接参数以及心跳管理等。

  • 表1-1 访问服务中心常用的配置项
配置项默认值是否必选含义
servicecomb.service.registry.addresshttp://127.0.0.1:30100服务中心的地址信息,可以配置多个,用逗号分隔。
servicecomb.service.registry.instance.watchtrue是否采用PUSH模式监听实例变化。为false的时候表示使用PULL模式。
servicecomb.service.registry.autodiscoveryfalse是否自动发现服务中心的地址。当需要配置部分地址,其他地址由配置的服务中心实例发现的时候,开启这个配置。
servicecomb.service.registry.instance.healthCheck.interval30心跳间隔。
servicecomb.service.registry.instance.healthCheck.times3允许的心跳失败次数。当连续第times+1次心跳仍然失败时则实例被sc下线。即interval * (times + 1)决定了实例被自动注销的时间。如果服务中心等待这么长的时间没有收取到心跳,会注销实例。
servicecomb.service.registry.instance.empty.protectiontrue当从服务中心查询到的地址为空的时候,是否覆盖本地缓存。这个是一种可靠性保护机制,避免实例异常批量下线导致的请求失败。

servicecomb 与服务中心采用 HTTP 进行交互, HTTP client 相关配置可以参 考 Service Center Client 配置项

使用服务中心需要确保下面的软件包引入:

  <dependency>
    <groupId>org.apache.servicecomb</groupId>
    <artifactId>registry-service-center</artifactId>
  </dependency>

也可以直接依赖:

  <dependency>
    <groupId>org.apache.servicecomb</groupId>
    <artifactId>solution-basic</artifactId>
  </dependency>

使用 RBAC 认证

服务中心支持RBAC认证,服务中心开启RBAC认证之 后,客户端调用服务中心接口都需要先获取token,保证服务的安全可信。 使用 RBAC 认证, 需要使用 2.1.3 及其以上的版本。

  • 服务配置

    使用 RBAC 认证,需要在配置文件中增加如下配置项, 指定连接服务中心的用户名和密码:

      ```
      servicecomb:
        credentials:
          account:
            name: root   #服务中心支持的用户名
            password: your-password  #用户名对应的密码
          cipher: default #账号密码加解密用的算法实现类
      ```
    

    账号密码都是敏感信息,一般需要加密保存,使用的时候再解密,Java Chassis 提供了一个扩展机制,用户只需要实现接口 org.apache.servicecomb.foundation.auth.Cipher,并注册成Spring Bean,就会自动被使用,接口里面包含两个方法:

      ```java
        String name();
    
        char[] decrypt(char[] encrypted);
      ```
    

    name方法返回cipher的名称,对应 servicecomb.credentials.cipher 的配置,decrypt是解密接口,用户名、密码使用的时候都会调用这个方法进行解密。 下面给了一个最简单的base64编解码的实现示例,用户使用base64编码把账号密码配置到配置文件即可。

    注意: base64 并不是安全加密算法,请勿在生产环境使用。

      ```yaml
      servicecomb:
        credentials:
          account:
            name: cm9vdA==
            password: eW91ci1wYXNzd29yZCA=
          cipher: base64
      ```
    
      ```java
      import java.util.Base64;
    
      import org.apache.servicecomb.foundation.auth.Cipher;
      import org.springframework.stereotype.Component;
    
      /**
       * Base64解码实现
       */
      @Component
      public class Base64Cipher implements Cipher {
        @Override
        public String name() {
          return "base64";
        }
    
        @Override
        public char[] decrypt(char[] encrypted) {
          return new String(Base64.getDecoder().decode(new String(encrypted))).toCharArray();
        }
      }
      ```
    

使用 AK/SK 认证

华为云微服务引擎专业版的服务中心需要使用 AK/SK 认证, 使用 AK/SK 认证, 需要使用 2.1.3 及其以上的版本。 AK/SK 认证需要配置如下信息:

servciecomb:
  credentials:
    akskEnabled: true
    accessKey: your access key
    secretKey: your secrete key
    akskCustomCipher: default # 加密算法, 和 RBAC 一样
    project: cn-south-1 # 项目名称,根据实际情况填写

secreteKey 支持加密存储, 扩展方式同 RBAC 。

使用AK/SK 需要下面的软件包引入:

  <dependency>
    <groupId>org.apache.servicecomb</groupId>
    <artifactId>servicestage</artifactId>
  </dependency>

也可以直接依赖:

  <dependency>
    <groupId>org.apache.servicecomb</groupId>
    <artifactId>solution-basic</artifactId>
  </dependency>

连接多个服务中心

有些应用场景需要连接多个服务中心。比如一个应用系统会在不同的 region 部署,其中一个 region 的服务需要访问 另外一个 region 的服务, 这个时候,可以连接另外 region 的服务中心,发现服务信息。

注意: 连接多个服务中心指的是不同的服务中心集群,不是指一个集群内部的多个服务中心实例。

连接多个服务中心比较简单, 只需要在项目里面定义新的服务中心的配置信息,通过 spring bean 的方式注入:

@Configuration
public class ServerBServiceCenterConfiguration {
  @Bean("serverBServiceCenterConfig")
  public ServiceRegistryConfig serverBServiceCenterConfig() {
    ServiceRegistryConfig config = ServiceRegistryConfig.buildFromConfiguration();
    return ServiceRegistryConfigCustomizer.from(config)
        .addressListFromConfiguration("servicecomb.service.registry-serverB.address").get();
  }
}

上面的代码复用了缺省服务中心的配置信息,只修改了连接地址,代码指定了下面的配置项。如果需要自定义其他配置项,可以 通过继承 ServiceRegistryConfig 来实现。

servicecomb:
  service:
    registry:
      address: http://127.0.0.1:30100
    registry-serverB:
      address: http://127.0.0.1:40100

启用多个服务中心以后,会在不同的服务中心查找服务的实例,并对信息进行合并。