Istio 是当今最流行的开源服务网格。它由控制平面和数据平面构成,其架构如下(图片摘自 Istio官网)。
位于图中下半部分的控制平面负责配置、服务信息、证书等资源的下发。位于上半部分的数据平面关注业务之间的通信流量;传统服务网格通过代理的方式拦截所有的业务网络流量,代理需要感知到控制平面下发的配置资源,从而按照要求控制网络流量的走向。
在 Istio 环境中,其控制平面是一个名为 istiod 的进程,网络代理是 envoy 。istiod 通过监听 K8S 资源 例如Service、Endpoint 等,获取服务信息,并将这些资源统一通过 XDS 协议下发给位于数据平面的网络代理。envoy 是一个独立的进程,以 sidecar(边车)的形式伴随业务应用 Pod 运行,他与应用进程共用同一个主机网络,并通过修改路由表的方式,劫持业务应用的网络流量。
Service Mesh 可以解决微服务场景下的众多问题,随着集群规模的扩大与业务复杂度的增长,基于原生 k8s 的容器编排方案将会难以应付,开发人员不得不面对巨大的服务治理挑战。而 Service Mesh 很好地解决了这一问题,它将服务治理需求封装在了控制平面与代理中,业务开发人员只需要关注于业务逻辑。在应用部署之后,只需要运维人员通过修改配置,即可实现例如故障恢复、负载均衡、灰度发布等功能,这极大地提高了研发和迭代效率。
Istio 的 sidecar 通过容器注入的形式伴随业务应用进程的整个生命周期,对于业务应用是毫无侵入的,这解决了业务应用可迁移、多语言、基础架构耦合等问题。但这也带来了高资源消耗、请求时延增长的问题。
Service 为服务治理提供了一个很好的思路,将基础架构与业务逻辑解耦,让应用开发人员只需关注业务。另一方面,由于 sidecar 的弊端,我们可以考虑使用 sdk 的形式,来替代 sidecar 支撑起数据平面。
无代理服务网格,是2018年谷歌提出的一个新的概念,Isito、gRPC、brpc 等开源社区都在这一方向进行了探索和实践。无代理服务网格框架以 SDK 的形式被业务应用引入,负责服务之间的通信、治理。来自控制平面的配置直接下发至服务框架,由服务框架代替上述 sidecar 的功能。
在无代理服务网格场景下,服务框架(SDK)的主要能力可以概括为以下三点:
我认为优点如下:
性能:无代理模式的网络调用为点对点的直接通信,网络时延会比代理模式小很多。
稳定性:proxyless 的模式是单进程,拓扑简单,便于调试,稳定性高。
框架集成:市面上已有众多 sdk 模式的服务框架,切换至 mesh 后便于复用框架已有能力
资源消耗:没有 sidecar,资源消耗低。
当然,缺点也有很多:
语言绑定:需要开发多种语言的 sdk
可迁移性低:无法通过切换 sidecar 的形式来无侵入地升级基础设施。
总体来讲,我认为 Proxyless 架构以其高性能、高稳定性的特点,更适合与生产环境使用。
Apache/Dubbo-go (github.com/apache/dubbo-go),是一款分布式 RPC 框架,是 Apache/Dubbo 的 Go 语言实现。旨在为开发者提供便利的微服务应用开发体验。Dubbo-go 生态为 Go 开发者提供了敏捷的微服务编程接口、配置管理方案、服务治理方案、以及一系列工具与脚手架,开发人员可以使用框架提供的能力快速开发自己的微服务应用。
Dubbo-go 本身拥有可扩展的服务注册发现能力,我们为 service mesh 场景适配了注册中心的实现。开发人员可以将 dubbo-go 应用的信息注册在 istiod 控制平面上。客户端应用可以查询已经注册的接口数据,完成服务发现过程。
归因于 Java 的编程习惯,Dubbo-go 生态框架的服务注册方式都是接口级别的。即客户端只需要引入接口,即可发起调用,而无需关心下游的应用名、主机名、IP 地址等信息。与之相对的是应用级别的服务注册发现,主流微服务框架更多这种形式的服务调用方式,例如 gRPC、K8S、Istio,应用级服务发现对应到 mesh 场景下,我认为叫 “主机级别服务发现”更合适,这种调用方式需要客户端在引入接口的同时,还需引入下游的主机名和端口号。熟悉 gRPC-go 的同学一定很清楚,除了引入 pb 接口,还需要在创建客户端时调用 gRPC.Dial("xxx") 建立网络连接。而这里的 xxx 就是下游的主机名和端口号,这种服务发现的类型和用户编程习惯,导致了 gRPC 较为轻松地实践了 Proxyless Service Mesh。
关于应用级服务发现与接口级服务发现的区别和 dubbo 生态的解决方案,本文中不多赘述,可以参考刘军前辈写的文章文章《Dubbo 迈出云原生重要一步 应用级服务发现解析》简单来说,应用级服务发现需要开发者关心接口之外还要关心应用名,注册中心的冗余信息较少;接口级服务发现开发者只需要引入接口名,但注册中心的冗余信息较多。
熟悉 Dubbo-go、Dubbo 生态的用户,不习惯于在编程的过程中指定下游主机名,更希望以接口引入的方式,直接发起 RPC 调用,而不需关心究竟这个接口被哪个应用实现,运行在哪台主机、哪个虚拟集群上。
Dubbo-go 为了融入 Istio 体系,将扩展出来的注册发现流程进行了特殊改造。在复用 Istio 提供的 EDS、CDS 主机发现的能力之外,增加了接口名到主机名的映射,作为源数据注册在了控制平面上。客户端在发起调用前持有接口名,通过查询istiod 上的元数据信息,拿到接口名到主机名到映射,转换为主机名;再通过EDS、CDS和路由,完成主机名到下游端点实例的转换。完成服务发现流程。
下面用一个更详细的例子来说明服务发现过程:
纵观这一过程,开发人员全程只需要关注接口即可,完全无需关心主机名和端口信息。即服务端开发者只需要实现pb接口,使用框架暴露出来;客户端开发者只需要引入pb接口,直接发起调用即可,可以跟随本文第四部分的教程来动手实验一下。
Dubbo-go 拥有路由能力,通过 xds 协议客户端从 istiod 订阅路由配置,并实时更新至本地路由规则,从而实现服务的管理。Dubbo-go 兼容 Istio 生态的流量治理规则,可以通过配置 Virtual Service 和 Destination Rule,将打标的流量路由至指定子集,也可以在灰度发布、切流等场景进行更深入地使用。
dubbogo-cli 是 Apach/dubbo-go 生态的子项目,为开发者提供便利的应用模板创建、工具安装、接口调试等功能,以提高用户的研发效率。
可以执行以下指令安装dubbogo-cli 至 $GOPATH/bin
go install github.com/dubbogo/dubbogo-cli@latest
dubbogo-cli 支持以下能力
使用应用模板的开发流程
详情可以参阅 dubbogo-cli 文档[1]。
前文介绍到了通过接口级服务注册发现的优势,即开发人员无需关心下游主机名和端口号,只需要引入接口存根,或实现接口,通过框架启动即可。
我们在 k8s 集群内部署 Istio 环境,分别测试了 sidecar 模式的 gRPC 服务调用和 Proxyless 模式的 dubbo-go 应用服务调用。发现 proxyless 在请求耗时方面比 sidecar 模式少一个数量级,即性能提升十倍左右。
Dubbo-go 是一个横跨多个生态的服务框架。
mesh 生态开发人员可以使用 Dubbo-go 进行应用开发的同时,使用 Istio 生态所提供的强大能力。
gRPC 生态
Dubbo-go 支持与 gRPC 服务互通,HTTP2 协议栈。
Dubbo-go 默认使用 pb 序列化方式,高性能。
Dubbo 生态
多语言优势,可以实现 go-java 应用互通。
兼容 pixiu 网关,方便地进行服务的暴露和协议转换。
使用 Dubbo-go 生态组件。
Dubbo-go 目前已支持兼容 Istio 的服务治理能力。支持基于 Istio 的接口级服务发现能力,兼容 Istio 生态的流量控制和管理能力,并且提供了脚手架和应用模板以提高 Go 应用开发效率。
您可参考文档 【Dubbo-go 文档 - Mesh 任务】[2],动手搭建一组 Dubbo-go Mesh 应用。
在这组任务中,开发者会从部署 Istio 环境开始,到创建应用模板、构建应用、发布应用、实现服务发现和 RPC、到最终完成流量规则动态配置,观察流量切换。对框架用户有较高的参考意义。
Proxyless Service Mesh 能力将跟随 Dubbo-go 下一版本发布,稳定的性能需要社区成员们共同的关注与建设。在此基础之上,我们还会进一步探索轻量级 sdk + sidecar的模型;探索基于第三方流量治理组件的金丝雀发布能力;探索基于 dubbo 服务框架的多语言 sevice mesh、与更丰富的 mesh 生态组件兼容。
Dubbo-go 也将继续在云原生的方向前进,继续发掘云计算时代技术红利,与开发者同在。
[1]:https://dubbogo.github.io/zh-cn/docs/user/refer/use_dubbogo_cli.html
[2]:https://dubbogo.github.io/zh-cn/docs/user/tasks/mesh/app.html
本文由哈喽比特于2年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/cSsnne_kGfUjm1lKZWLiOw
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。