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日志浏览和查询