其他
Dubbo-go-Mesh 开启新一代 Go 微服务形态
一 什么是 Proxyless Service-Mesh (无代理服务网格) ?
1 Service Mesh 简析
2 Proxyless Service-Mesh
对接控制平面,监听配置资源。 对接应用,为开发者提供方便的接口。 对接网络,根据资源变动,响应流量规则。
3 Proxyless 的优缺点
性能:无代理模式的网络调用为点对点的直接通信,网络时延会比代理模式小很多。
稳定性:proxyless 的模式是单进程,拓扑简单,便于调试,稳定性高。
框架集成:市面上已有众多 sdk 模式的服务框架,切换至 mesh 后便于复用框架已有能力
资源消耗:没有 sidecar,资源消耗低。
语言绑定:需要开发多种语言的 sdk
可迁移性低:无法通过切换 sidecar 的形式来无侵入地升级基础设施。
二 Dubbo-go 与 Proxyless Service-Mesh
1 Dubbo-go 的能力
2 Dubbo-go 在 Proxyless Service-Mesh 场景的设计
服务注册发现
关于应用级服务发现与接口级服务发现的区别和 dubbo 生态的解决方案,本文中不多赘述,可以参考刘军前辈写的文章文章《Dubbo 迈出云原生重要一步 应用级服务发现解析》 简单来说,应用级服务发现需要开发者关心接口之外还要关心应用名,注册中心的冗余信息较少;接口级服务发现开发者只需要引入接口名,但注册中心的冗余信息较多。
开发人员使用 dubbogo-cli 工具创建应用模板,发布 Deployment / Service pair 到集群中。 服务端拉取全量 CDS 和 EDS 数据,比对本机 IP,拿到当前应用的的主机名。并将本应用的所有接口名到主机名的映射,注册在 Istiod 上面。 客户端从 istiod 拉取全量接口名到主机名的映射,缓存在本地。当需要发起调用时,查询本地缓存,将接口名转换为主机名,再通过CDS 和 EDS 拉取到当前 cluster 所对应的全量端点。 全量端点经过 Dubbo-go 内置的 Mesh Router,筛选出最终的端点子集,并按照配置的负载均衡策略进行请求。 开发人员或者第三方组件,通过操作 K8S 资源,控制 Dubbo-go 流量。
流量治理
云原生脚手架
go install github.com/dubbogo/dubbogo-cli@latest
应用模板创建 Demo 创建 编译、调试工具安装 查看 dubbo-go 应用注册信息 调试 dubbo-go 应用接口
通过 dubbogo-cli 生成模板 修改api/api.proto make proto-gen 开发接口 修改 makefile 内镜像名和发布名 打镜像并推送 修改chart/app/values 内与部署相关的value配置 make deploy, 使用 helm 发布应用。
三 Dubbo-go-Mesh 的优势
1 接口级服务发现
2 高性能
3 跨生态
mesh 生态 开发人员可以使用 Dubbo-go 进行应用开发的同时,使用 Istio 生态所提供的强大能力。
gRPC 生态
Dubbo-go 支持与 gRPC 服务互通,HTTP2 协议栈。 Dubbo-go 默认使用 pb 序列化方式,高性能。
Dubbo 生态
多语言优势,可以实现 go-java 应用互通。 兼容 pixiu 网关,方便地进行服务的暴露和协议转换。 使用 Dubbo-go 生态组件。
四 动手体验 Dubbo-go-Mesh
您可参考文档 【Dubbo-go 文档 - Mesh 任务】[2],动手搭建一组 Dubbo-go Mesh 应用。
在这组任务中,开发者会从部署 Istio 环境开始,到创建应用模板、构建应用、发布应用、实现服务发现和 RPC、到最终完成流量规则动态配置,观察流量切换。对框架用户有较高的参考意义。
五 展望
Serverless 架构在软件研发工程实践方面的价值
点击阅读原文查看详情!