REST over Vertx

配置说明

REST over Vertx通信通道对应使用standalone部署运行模式,可直接通过main函数拉起。main函数中需要初始化日志和加载服务配置,代码如下:

  1. public class MainServer {
  2. public static void main(String[] args) throws Exception {
  3. Log4jUtils.init();//日志初始化
  4. BeanUtils.init(); // Spring bean初始化
  5. }
  6. }

使用REST over Vertx网络通道需要在maven pom文件中添加如下依赖:

  1. <dependency>
  2. <groupId>org.apache.servicecomb</groupId>
  3. <artifactId>transport-rest-vertx</artifactId>
  4. </dependency>

REST over Vertx通道在microservice.yaml文件中有以下配置项:

表1-1 REST over Vertx配置项说明

配置项默认值含义
servicecomb.rest.address服务监听地址,不配置表示不监听
servicecomb.rest.server.thread-countverticle-countrest server verticle实例数(Deprecated)
servicecomb.rest.server.verticle-countverticle-countrest server verticle实例数
servicecomb.rest.server.connection-limitInteger.MAX_VALUE允许客户端最大连接数
servicecomb.rest.server.connection.idleTimeoutInSeconds60服务端连接闲置超时时间,超时连接会被释放
servicecomb.rest.client.thread-countverticle-countrest client verticle实例数(Deprecated)
servicecomb.rest.client.verticle-countverticle-countrest client verticle实例数
servicecomb.rest.client.connection.maxPoolSize5对一个IP:port组合,在每个连接池中的最大连接数
servicecomb.rest.client.connection.idleTimeoutInSeconds30连接闲置时间,超时连接会被释放
servicecomb.rest.client.connection.keepAlivetrue是否使用长连接

补充说明

  • 极限连接数计算假设:

    • servicecomb.rest.client.thread-count配置为8
    • servicecomb.rest.client.connection.maxPoolSize配置为5
    • 微服务A有10个实例
      站在client的角度,在极限情况下:

    • 一个client调用微服务A,最多会建立400条连接。(8 5 10 = 400)

    • 假设该client还需要调用微服务B,微服务B,也有10个实例,则最多再建立400条连接,共800条连接
      站在server的角度,在极限情况下:

    • 一个client最多向一个server建立40条连接。(8 * 5 = 40)

    • n个client最多会向一个server建立40 * n条连接
      为了提高性能,需要尽量使用更大的连接池,但是更大的连接池又可能会导致连接数暴涨,当微服务实例规模达到百级别时,有的进程可能需要管理几万条连接,业务需要根据实际业务规模进行合理的规划。http1.1的规划相对复杂,并且有的场景几乎无解,建议切换为http2

示例代码

microservice.yaml文件中的配置示例:

  1. servicecomb:
  2. rest:
  3. address: 0.0.0.0:8080
  4. server:
  5. verticle-count: 8
  6. references:
  7. hello:
  8. transport: rest
  9. version-rule: 0.0.1