Solon

问题:在 ip 漂移时更安全的服务注册与注销?

</> markdown

比如 k8s 或 docker bridge 运行环境下,每次重新部署后 ip 都可能会变化。在这种环境下,使用外部的注册与发现服务时,需要用到以下两点。

1、增加参数,申明当前为漂移环境

或者用启动参数

java -jar demoapi.jar --drift=1

或者用jvm参数

java -Dsolon.drift=1 -jar demoapi.jar

或者用 container 的环境变量

services:
  demoapi:
    image: demo/demoapi:1.0.0
    container_name: demoapi
    environment:
      - solon.drift=1
      - TZ=Asia/Shanghai
    ports:
      - 8080:8080	

这个申明的作用,是告诉注册与发现服务:服务ip挂了,不用告警,并自动摘除。否则,可能会不断增加失效ip。

2、启用安全停止

参考:《问题:如何安全的停止服务?》 ,使用时记得把漂移配置加上。

补充:发现服务最好能有个代理配置

比如发现接口,输出这样的数据:

{
    "service":"demo-api",
    "policy": "default",
    "agent": "http://demo-api.demo:8031", //将代理指向 k8s sev name
    "cluster":[
        {"service":"demo-api", "protocol":"http", "address":"10.12.12.1:8031"},
        {"service":"demo-api", "protocol":"http", "address":"10.12.12.3:8031"}
    ]
}

当有代理时,客户端就可以直接请求代理,而不依赖集群节点的注册信息。(k8s内部的响应与数据,更为及时与准确)