跳到主要内容

Taurus服务网格

服务网格(Service Mesh)是处理服务间通信的基础设施层。它负责构成现代云原生应用程序的复杂服务拓扑来可靠地交付请求。在实践中,Service Mesh 通常以轻量级网络代理阵列的形式实现,这些代理与应用程序代码部署在一起,对应用程序来说无需感知代理的存在。

Taurus采用RSocket作为服务间通讯协议,因此采用了不同的服务网格实现。

  • 现有的服务网格产品和技术基本都是针对http和gRPC优化的
  • RSocket和响应式开发与传统的REST,gRPC等阻塞式开发非常不同
  • 需要更精细的控制,实现性能最大化。例如请求和响应报文中的哪些部分需要用作元数据,哪些部分需要进行端到端的零拷贝,现存的服务网格技术无法实现。
  • Taurus需要通过网关实现更细致的流量路由
  • Taurus不需要平台级的Mesh;但随时可以和平台级Mesh融合工作

Broker Cluster​

Taurus的服务网格设计为以Broker Cluster为核心的中心化结构。由于全面使用零拷贝传输技术,以及Broker Cluster的水平扩展能力,从而无须担心中心化会为Broker带来过多负载,相反,基于长连接和中心化,可让服务发现变得更加高效和及时,提升整个微服务集群的稳定性。

  • Bitmap高性能路由表
  • 路由表复制

配置中心​

Taurus中,将配置中心定义为一个独立的基础服务,与其他应用不同,它跨越SIT,UAT这些环境而独立存在。例如,SIT和UAT需要各自的Broker Cluster,但配置中心始终只有一个,SIT和UAT共用一个配置中心。

这样对配置中心的可靠性要求很高,应用启动前,要求配置中心必须是就绪的,否则应用无法启动。

但配置中的部署仍然是灵活的,可部署在Kubernetes集群,也可部署在独立主机上。针对PROD这种为网络有严苛要求的环境,也可考虑部署冗余的配置中心服务集群。

  • 集群化高可用
  • 敏感数据加密
  • Spring Cloud Config / K8S ConfigMap/Secret
  • 加密,配置安全

服务发现​

  • 基于长连接的服务发现,原理图展示上线和断线两个场景,通过broker通知到所有服务实例
  • Broker通知应用服务清单版本更新,应用主动拉取新的服务清单
  • 服务清单采用应用端拉取机制,因为逻辑重心在应用这一端。

负载均衡​

  • 基于Tag的负载均衡
    • 服务注册自己实现的若干Tag
    • 客户端请求时携带Tag

背压限流​

  • Reactive Stream:响应式框架
  • RSocket:Reactive Stream语义之上的进程间通讯
  • 与TCP,HTTP/2的流控对比,前者无法阻止发送端新数据的产生;而RSocket协议可以确保发送端根据响应端的处理能力来生成新的数据帧,可以从源头上杜绝压力的产生

断路与隔离​

关于响应式开发​

响应式开发是相对于传统命令式开发的全新开发模式,采用函数式编程,是高性能非阻塞系统所必须的开发模式。

关于RSocket协议​

  • 多级流控:
    • Reactive Stream 语义级,控制数据包数量
    • LEASE 协议级,控制请求数
    • QoS,策略级场景化精准流控
  • 背压机制
    • 端到端的背压机制,从请求源头控制压力
  • 基于Reactive实现的高吞吐,低延时
  • 二进制协议

可观察​

RSocket的优势之一:尽管RSocket时一个高效的二进制协议,但提供机制,将消息体分为metadata和data,在保证二进制高效传输的同时,暴露体积较小的少量元数据该网络中间件,为应用可观察提供前提。

指标监控​

  • 采集请求匹配的route,输出到Prometheus或者es,可以据此统计黄金指标:成功率、流量、延迟
  • 通过自定义图表或Grafana进行可视化监控
  • 灵活,可视化的报警规则配置,多通道报警通知,包含但不限于短信,企业微信等通道

链路追踪​

  • Micrometer Tracing:链路信息采集
  • Open Zipkin:链路数据存储和报告
  • 通过日志中的埋点标记,查询相关请求的链路信息

日志​

  • logback代码日志输出
  • filebeat日志收集
  • loki/kibana日志浏览和查询