所在位置:首页 > 游戏新闻 > 深蓝新一代医院信息服务平台(新一代智慧信用管理服务平台)

深蓝新一代医院信息服务平台(新一代智慧信用管理服务平台)

发布时间:2023-07-01 01:56:13来源:头条浏览:0

什么是无代理服务网格?1服务网格的简要分析Istio是当今最流行的开源服务网格。它由控制平面和数据平面组成,

其架构如下(图片取自Istio官网)。

位于该图下半部分的控制平面负责分配资源,例如配置、服务信息和证书。上部的数据平面关注服务之间的通信流量;传统的服务网格通过代理拦截所有的业务网络流量,代理需要知道控制平面发送的配置资源。

以便根据需要控制网络流量的趋势。在Istio环境中,它的控制平面是一个名为istiod的进程,网络代理是envoy。

Istiod通过监听K8S资源,如服务和端点,获得服务信息,并通过XDS协议将这些资源发送给位于数据平面的网络代理。特使是一个独立的过程,

以sidecar形式与业务应用Pod一起运行,与应用进程共享同一个主机网络,通过修改路由表劫持业务应用的网络流量。服务网格可以解决很多微服务场景下的问题。

随着集群规模的扩大和业务复杂度的增加,基于原生k8s的容器排列方案将难以应对,开发者不得不面临巨大的服务治理挑战。而服务网格很好地解决了这个问题。

它将服务治理需求封装在控制平面和代理中,业务开发人员只需关注业务逻辑。应用部署后,只需要运维人员修改配置,就可以实现故障恢复、负载均衡、灰色释放等功能。

这大大提高提高了研发和迭代的效率。Istio的Sidecar通过容器注入的方式伴随业务应用流程的全生命周期,对业务应用无创。

这就解决了业务应用可移植性、多语言和基础设施耦合的问题。但也带来了资源消耗高、请求延迟增加的问题。服务为服务治理提供了一个很好的思路,将基础设施与业务逻辑解耦,这样应用开发者只需要关注业务。

另一方面,由于sidecar的缺点,我们可以考虑使用sdk来支持数据平面,而不是sidecar。

2无代理服务-Mesh无代理服务网格是Google在20年提出的新概念,Isito、gRPC、brpc等开源都在这个方向进行了探索和实践。

无代理服务网格框架由业务应用以SDK的形式引入,负责服务之间的通信和治理。来自控制平面的配置被直接发送到服务框架,服务框架取代了上面提到的sidecar的功能。

在无代理服务网格场景中,服务框架(SDK)的主要功能可以总结为以下三点:

对接控制面板并监控配置资源。对接应用为开发者提供了便捷的接口。对接网络,根据资源变化响应流量规则。3 Proxyless的优缺点我认为优点如下:

性能:无代理模式下的网络调用是点对点的直接通信,网络延迟会比代理模式小很多。稳定性:无代理模式是单进程,拓扑简单,调试容易,稳定性高。框架集成:市面上有很多sdk模式的服务框架。

切换到mesh后,方便重用框架现有资源:没有sidecar,资源消耗低。当然,也有很多缺点:

语言绑定:需要多种语言开发的sdk,可移植性低:无法通过切换sidecar的形式来无创升级基础设施。总的来说,我认为无代理架构更适合生产环境,因为它的高性能和高稳定性。

二杜博-戈与无代理服务-Mesh1 Dubbo-go的能力Apache/Dubbo-go(github。com/Apache/Dubbo-go),

是一个分布式RPC框架,是Apache/Dubbo的Go语言实现。旨在为开发者提供便捷的微服务应用开发体验。

Dubbo-go 生态为Go 开发者提供了敏捷的微服务编程接口、配置管理方案、服务治理方案、以及一系列工具与脚手架,开发人员可以使用框架提供的能力快速开发自己的微服务应用。

2 Dubbo-go 在Proxyless Service-Mesh 场景的设计服务注册发现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和路由,

完成主机名到下游端点实例的转换。完成服务发现流程。下面用一个更详细的例子来说明服务发现过程:

开发人员使用dubbogo-cli 工具创建应用模板,发布Deployment/Service pair 到集群中。服务端拉取全量CDS 和EDS 数据,比对本机IP,

拿到当前应用的的主机名。并将本应用的所有接口名到主机名的映射,注册在Istiod 上面。客户端从istiod 拉取全量接口名到主机名的映射,缓存在本地。当需要发起调用时,查询本地缓存,

将接口名转换为主机名,再通过CDS 和EDS 拉取到当前cluster 所对应的全量端点。全量端点经过Dubbo-go 内置的Mesh Router,筛选出最终的端点子集,

并按照配置的负载均衡策略进行请求。开发人员或者第三方组件,通过操作K8S 资源,控制Dubbo-go 流量。纵观这一过程,开发人员全程只需要关注接口即可,完全无需关心主机名和端口信息。

即服务端开发者只需要实现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@latestdubbogo-cli 支持以下能力

应用模板创建Demo 创建编译、调试工具安装查看dubbo-go 应用注册信息调试dubbo-go 应用接口使用应用模板的开发流程

通过dubbogo-cli 生成模板修改api/api.protomake proto-gen开发接口修改makefile 内镜像名和发布名打镜像并推送修改chart/app/values 内与部署相关的value配置make deploy, 使用helm 发布应用。

三Dubbo-go-Mesh 的优势1 接口级服务发现前文介绍到了通过接口级服务注册发现的优势,即开发人员无需关心下游主机名和端口号,只需要引入接口存根,或实现接口,通过框架启动即可。

2 高性能我们在k8s 集群内部署Istio 环境,分别测试了sidecar 模式的gRPC 服务调用和Proxyless 模式的dubbo-go 应用服务调用。

发现proxyless 在请求耗时方面比sidecar 模式少一个数量级,即性能提升十倍左右。

3 跨生态Dubbo-go 是一个横跨多个生态的服务框架。

mesh 生态开发人员可以使用Dubbo-go 进行应用开发的同时,使用Istio 生态所提供的强大能力。gRPC 生态Dubbo-go 支持与gRPC 服务互通,HTTP2 协议栈。

Dubbo-go 默认使用pb 序列化方式,高性能。Dubbo 生态多语言优势,可以实现go-java 应用互通。兼容pixiu 网关,方便地进行服务的暴露和协议转换。

使用Dubbo-go 生态组件。四动手体验Dubbo-go-MeshDubbo-go 目前已支持兼容Istio 的服务治理能力。支持基于Istio 的接口级服务发现能力,

兼容Istio 生态的流量控制和管理能力,并且提供了脚手架和应用模板以提高 Go 应用开发效率。您可参考文档【Dubbo-go 文档- Mesh 任务】[2],

动手搭建一组Dubbo-go Mesh 应用。在这组任务中,开发者会从部署Istio 环境开始,到创建应用模板、构建应用、发布应用、实现服务发现和RPC、到最终完成流量规则动态配置,

观察流量切换。对框架用户有较高的参考意义。

我们还会进一步探索轻量级sdk + sidecar的模型;探索基于第三方流量治理组件的金丝雀发布能力;探索基于dubbo 服务框架的多语言sevice mesh、与更丰富的mesh 生态组件兼容。