网络连接

概述

北极星go sdk做为业务层代码调用北极星服务能力的中间层,为业务层抽象了服务、配置、限流相关的接口能力,使业务层不需要感知和管理与北极星服务端的连接。本文介绍北极星go sdk网络连接管理的内部实现机制和相关配置项,为业务研发和运维优化提供参考。

本文试图回答的场景问题:

  • 北极星SDK与北极星服务端有哪些连接
  • 这些连接断开或超时异常时,会触发什么问题和现象
  • 我们需要关注哪些连接相关的配置项,应该在哪些场景进行调整

连接分类

服务连接(Register)

服务注册反注册、路由规则、负载均衡、熔断、健康检查等业务能力使用服务连接

连接地址

配置项 global.serverConnector.address

连接分类

长连接

  • 客户端调用服务发现(Disover)接口发起长连接,并周期性发起针对某项数据的监听任务;当超过配置项 consumer.localCache.serviceExpireTime (默认24小时)后没有访问该项数据,则停止该周期性监听任务;当长连接中没有任何监听任务,超过 global.serverConnector.connectionIdleTimeout(默认3s)时长没有访问流量后,长连接会断开,由下一次查询重新发起;

短链接

  • 非周期性:服务注册(Register)/反注册(DeRegister)发起,调用结束后关闭
  • 周期性:上报客户端(ReportClient)接口定时向服务端上报客户端信息,上报动作发起的定时周期由 global.api.reportInterval (默认2分钟) 配置项规定,;每个SDKContext运行一个周期性上报客户端协程,通常使用场景下每个业务客户端运行一个全局SDKContext
  • 周期性:服务注册后,需要周期性向Server端发起心跳(HeartBeat),更新Server端记录的服务实例的心跳时间;心跳动作会发起短链接,更新完成后关闭;心跳动作发起的周期为服务注册参数中的TTL时间,默认为5秒

配置连接(Configuration)

客户端对配置文件、配置分组相关的操作使用配置连接

连接地址

配置项 config.configConnector.address

连接分类

短连接

  • 非周期性:客户端对配置的增删改成接口均会发起短链接,在接口操作完成后关闭

限流连接(RateLimiter)

客户端对限流接口的调用使用限流连接

连接地址

配置项 provider.rateLimit.limiterNamespace(默认为Polaris) 和 provider.rateLimit.limiterService(默认为polaris.limiter) 注册的后端服务

连接分类

长连接

  • 客户端调用限流接口(GetQuota)查询发起长连接,超过配置项 provider.rateLimit.purgeInterval(默认1分钟)时长没有调用访问Quota数据时,会发起闲置检查;闲置连接检查超过 global.serverConnector.connectionIdleTimeout(默认3秒)时长没有访问流量后,长连接会断开,由下一次查询重新发起

监控连接(StatReporter)

客户端上报服务调用结果相关的监控数据

连接地址

配置项 global.statReporter.plugin.prometheus.address

连接分类

短连接

  • 周期性:客户端启动后,定时间隔上报服务调用、路由、限流结果等监控数据。

连接信息汇总



相关配置汇总

配置项:global.serverConnector.connectTimeout

说明:服务客户端连接服务端同步请求超时时间

默认值:500毫秒

配置项:global.serverConnector.messageTimeout

说明:服务客户端接受服务端异步消息超时时间

默认值:1500毫秒

配置项:global.serverConnector.connectionIdelTimeout

说明:服务连接闲置连接超时时间

默认值:3秒

配置项:global.serverConnector.reconnectInterval

说明:服务客户端重连时间间隔

默认值:500毫秒

配置项:global.api.reportInterval

说明:客户端定时上报周期

默认值:2分钟

配置项:consumer.localCache.serviceExpireTime

说明:客户端缓存失效时间

默认值:24小时

配置项:config.configConnector.connectTimeout

说明:配置客户端连接服务端同步请求超时时间

默认值:500毫秒

配置项:config.configConnector.messageTimeout

说明:配置客户端接受服务端异步消息超时时间

默认值:1500毫秒

配置项:config.configConnector.connectionIdelTimeout

说明:配置连接闲置连接超时时间

默认值:3秒

配置项:config.configConnector.reconnectInterval

说明:配置客户端重连时间间隔

默认值:500毫秒

配置项:provider.ratelimit.purgeInterval

说明:限流查询任务超时检查周期

默认值:1分钟

配置项:global.statReporter.plugin.prometheus.interval

说明:监控数据定时上报周期

默认值:1分钟

业务场景Q&A

Q:北极星SDK与北极星服务端有哪些连接

A:正常业务运行情况下,1个服务发现长连接 + 1个限流长连接 + 若干实时打开关闭的短连接,例如:注册一个服务,TTL设置为2秒,操作系统默认TCP MSL 30秒(net.ipv4.tcp_fin_timeout=60) ,则通过 netstat -ano |grep 8091 预期看到 2 个 ESTABLISHED 状态连接 和 30个左右 TIMEOUT 状态连接

Q:这些连接断开或超时异常时,会触发什么问题和现象

A:重点关注:服务发现长连接异常断开后,调用SDK负载均衡、路由等接口不受影响,临时使用缓存数据,直到serviceExpireTime触发缓存数据失效或连接恢复;限流长连接断开后,调用SDK限流接口不受影响,临时退化到单机限流能力直到连接恢复

Q:我们需要关注哪些连接相关的配置项,应该在哪些场景进行调整

A:当客户端与服务端网络条件不稳定时,应适度调整增加以下参数提高容错性: consumer.localCache.serviceExpireTime (服务发现连接断开后缓存可用时间) global.serverConnector.connectTimeout (服务发现同步gRPC请求超时时间) global.serverConnector.messageTimeout (服务发现异步gRPC请求回包超时时间) config.configConnector.connectTimeout (配置同步gRPC请求超时时间) config.configConnector.messageTimeout (配置异步gRPC请求回包超时时间)