通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格

  多运行时是一个非常新的概念。在 2020 年,Bilgin Ibryam 提出了 Multi-Runtime(多运行时)的理念,对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华。那到底什么是多运行时呢?首先还是得从分布式应用的四大类基本需求讲起。简单来讲任何分布式应用都存在的四大类基本需求:

    1、生命周期:包括部署,健康检查,水平扩展,配置管理等,目前这些需求的最佳实践,都陆续在 kubernetes 上有了落地。

    2、网络:网络方面的需求 是 service Mesh 的主战场,比如 istio 可以满足这里绝大部分需求,除了 pub/sub。

    3、状态:包括数据的读写,状态其实是非常难以管理的,涉及幂等,缓存,数据流等等。

    4、绑定:主要是指和系统外部资源的交互。

  在传统软件时代,是耦合在应用代码里的,但现如今,有越来越多的分布式能力从应用中剥离,而剥离的方式也在逐渐变化,从最早期,这些能力从业务代码剥离到依赖库中,然后有一些特性剥离到平台层(kubernetes)。而如今会有更多的非业务能力,剥离到 sidecar 中。作者预测:理论上每个微服务可以有多个 runtime: 一个业务运行时,和多个分布式能力运行时,但最理想的情况是,或者最可能出现的情况是:在业务之外的运行时合并为一个,通过高度模块化、标准化和可配置的方式,给业务提供所有分布式能力。而dapr则在很早之前就完成了对istio的集成,理论上我们可以通过运行两个sidecar来提供分布式能力,istio关注网络侧,包括不限于服务注册发现、A/B测、金丝雀部署、流量镜像,监控链路等等。当然dapr这部分有一定重叠,但是没有istio做的那么细致,这两者可以互补。而dapr则可以提供istio并不具备的网络功能比如订阅/发布、状态管理包括状态幂等,一致性,actor等等,也包括绑定,通过绑定和外部系统交互这部分。

目录:
一、通过Dapr实现一个简单的基于.net的微服务电商系统

二、通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解

三、通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr

四、通过Dapr实现一个简单的基于.net的微服务电商系统(四)——一步一步教你如何撸Dapr之订阅发布

五、通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理

六、通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务

七、通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流

八、通过Dapr实现一个简单的基于.net的微服务电商系统(八)——一步一步教你如何撸Dapr之链路追踪

九、通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权

十、通过Dapr实现一个简单的基于.net的微服务电商系统(十)——一步一步教你如何撸Dapr之绑定

十一、通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容
附录:(如果你觉得对你有用,请给个star)
一、电商Demo地址

二、通讯框架地址

  istio是什么呢?简单来讲istio是一个service mesh,和dapr的结构类似,都是通过在应用之上插入sidecar来提供分布式能力,同时通过控制平面来对这些sidecar进行具体的调度和管控,只不过istio更倾向于提供网络能力,其官网的一句话描述可以概括:“通过领先的服务网格简化可观测性,流量管理,安全及策略。”其功能包括以下几点:

    1、使用 TLS 加密、强身份认证和授权的集群内服务到服务的安全通信

    2、自动负载均衡的 HTTP, gRPC, WebSocket,和 TCP 流量

    3、通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制

    4、一个可插入的策略层和配置 API,支持访问控制、速率限制和配额

    5、对集群内的所有流量(包括集群入口和出口)进行自动度量、日志和跟踪

  说了那么多,我们还是聊聊如何通过dapr+istio对我们的电商demo进行多运行时集成吧。首先是安装,安装可以参考istio官方中文文档,默认安装profile=demo会帮我们安装istiod+ingressgateway+egressgateway,istiod就是我们的控制平面核心,不同于dapr将控制平面分散在多个容器的做法,istio经历过1.5的版本迭代后将所有的功能又合并到了一个容器中。而ingressgateway则是用于替代ingress-controller的,而egress是出口网关,由于istio默认对入口和出口流量都有管控,这里我们不需要限制出口流量,所以设置为ALLOW_ANY。同时这是不需要每次都拉取sidecar镜像。

istioctl install --set profile=demo --set meshConfig.outboundTrafficPolicy.mode=ALLOW_ANY --set values.global.imagePullPolicy=IfNotPresent

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgdgp.html