云原生中间件的下一站
导读
于雨(github @AlexStocks),dubbogo 社区负责人,一个有十多年服务端做着基础架构和中间件研发一线工作经验的程序员,陆续参与和改进过 Redis/Pika/Muduo/dubbo-go/Sentinel-go 等知名项目,目前在蚂蚁金服可信原生部从事容器编排和 service mesh 工作。
本文源自 2020 年 12 月 20 日作者在云原生社区 meetup 第二期北京站演讲 《Apache Dubbo-go 在云原生时代的实践与探索》的部分内容。
云原生时代的中间件,包含了不可变的缓存、通信、消息、事件(event) 等基础通信设施,本文从微服务架构不同通信框架特性、sidecar与中间件的关系,以及Service Mesh技术对云原生中间件进行了深入的解读。
未来,云原生应用只需通过本地代理即可调用所需的服务,无需关心服务能力来源,即云原生时代的中间件,与语言无关、与云平台无关。减轻了业务开发人员的负担,使其只需专注于业务逻辑,做到真正的快速迭代与平滑升级,提升研发效率的同时降低开发成本。
01 微服务架构
—服务框架的向后兼容性
—多框架之间的互通性
—多语言框架之间的互联
— 打通打平不同的技术体系
— 通信代理的必要性
—Service Mesh
服务框架 SDK 会变的非常轻量,甚至完全沉淀到 sidecar 中。
多语言、多协议和多种通信方式之间的差异将被磨平。
统一流量控制,提升系统的弹性。
统一监控设施,提高可观测性。
统一安全可信认证,提升安全性。
升级过程业务无感,做到平滑升级,提升可靠性。
提升业务版本迭代速度。
快速打通不同技术治理体系之间的差异。
在 Mesh 和 非 Mesh 模式之间快速切换。
02 Sidecar与中间件
—Sidecar 的能力
-
流量控制
-
序列化协议转换
-
通信协议转换
-
数据路由控制
—协议下沉
—有状态的应用
—复杂性守恒
-
不同序列化协议转换
-
不同通信协议之间的转换
-
同一序列化协议多版本之间的转换
-
私有和公开通用的序列化协议之间的转换
-
对单体时代或者微服务时代的业务进行改造升级
-
业务应用和 sidecar 同时升级带来的额外运营维护
-
有状态的 Sidecar 的开发测试与维护
-
应用和代理的优雅退出和平滑升级
-
不同技术体系之间的互通
-
Mesh 模式和非 Mesh 模式之间的切换
03 另一种Mesh
— 协议标准化
—Service Proxy
-
RPC,其代表是 Dubbo/Spring Cloud/gRPC 等。
-
限流熔断等流控,如 hystrix/sentinel 等。
-
Cache,其代表是 Redis。
-
MQ,其代表有 kafka/rocketmq 等。
-
服务跟踪,如兼容 Opentracing 标准的各种框架。
-
日志收集,如 Flume/Logtail 等。
-
指标收集,如 prometheus。
-
事务框架,如阿里的 seata。
-
配置下发,如 apollo/nacos。
服务注册,如 zookeeper/etcd 等。
流量控制,如 hystrix/sentinel 等。
搜索,如 ElasticSearch。
流式计算,如 spark/flink。
-
统一定义各服务的标准模型
-
定义这些标准模型的可适配多种语言的 API
-
一个具备通信和中间件标准模型 API 的 Proxy
-
适配这些 API 的业务
—Application Mesh
仍然以现有的以劫持网络流量的 sidecar 形式存在的 Local Proxy。
另一个专门提供各个 Service API 的 Application Proxy。
-
更好的扩展性与向后兼容性
-
与语言无关
-
与云平台无关
-
应用与中间件更彻底地解耦
-
应用开发更简单
-
更快的启动速度
04 未来的收益