关于阿里云:私有化输出的服务网格我们是这样做的

37次阅读

共计 2865 个字符,预计需要花费 8 分钟才能阅读完成。

作者:古琦

介绍

微服务开发的问题

微服务架构下咱们在开发中遇到的常见的问题有以下 4 个:

  • 多语言问题:有多种编程语言,node.js, JAVA, GoLang…微服务须要为每种语言都保护一种中间件 SDK 
  • 降级推动难:SDK 降级须要推动业务利用进行代码批改和公布,对业务有打搅,业务压力下推动老本高
  • 迭代速度慢:因为多语言多版本的存在,须要破费大量精力去保护历史版本,升高了迭代速度,降级速度慢(在数据面选型上也思考研发效力的问题
  • 多版本问题:每种语言的 SDK 都面临版本升级,同时存在大量不同的版本相互拜访,兼容性和测试保护老本微小 

为了解决这些问题,服务网格的 Sidecar + APP 模式是一个很好的计划

服务网格

Service Mesh 是一个专门解决服务通信的基础设施层。它的职责是在由云原生利用组成服务的简单拓扑构造下进行牢靠的申请传送。在实践中,它是一组和应用服务部署在一起的轻量级的网络代理,并且对应用服务通明。服务网格的概念被提出也有很多年了,服务网格的也呈现了很多不同类型的实现,比方 Istio、Linkerd,Open Service Mesh 等等,还有呈现相似 ebpf + envoy,proxylessMesh 等等其余形式的服务网格实现,其实都是在想如何解决当下生产、开发中的问题,咱们熟知的关注度最多还是 Istio,架构如下:

通过 Sidecar 和业务利用拆散,管制面 Istiod 实现对整个流量的管控,基于 Istio + Envoy 的能力实现了微服务的连贯、平安、管制和可观测,服务网格在微服务架构下体现了与利用解耦的平台级服务治理能力,推出来对立的多协定多语言的微服务治理,同时放弃了基础架构与利用解耦,升高降级和运维的老本,而且实现了微服务间的安全可靠通信,让不同类型的微服务的通信具备可观测。

阿里云专有云服务网格能力

服务网格的劣势被大家宽泛认可,直到明天曾经有很多的用户将服务网格应用在本人的生产业务零碎中,然而对于很多的常见的用户而言应用和运维这样的一套零碎还是过于简单,在通常的应用中,可能咱们只须要做一次灰度公布,这时候就波及不同规定的配置,非常容易出错,如何定义好利用的 VirtualService、DestinationRule 等规定对于大部分使用者而言都须要很高的学习老本,为了缩小应用的老本和运维难度,阿里云专有云服务网格通过高度的产品化能力将服务网格的能力推出,只须要依照常见的思路去操作控制台,即可轻松的实现比方灰度公布、标签路由、鉴权、全链路等能力。

上面是一张阿里云专有云服务网格的能力大图,笼罩了协定、环境、服务治理、可观测、平安生产几个方面:

接下来来介绍下咱们的产品能力:

服务治理

  • 流量治理

流量治理的能力很多,蕴含了负载平衡、熔断、限流、超时、重试、流量镜像、连接池治理、故障注入、同 AZ 路由、服务 Mock。

限流的能力提供了单机的限流、基于 header 的限流、Path 的限流。

故障注入中除了开源社区的服务级别的故障外,还提供了针对服务单个 Pod 的故障注入,这样能够进行单个 Pod 的测试。

服务 Mock 的能力能够为开发人员 Mock 指定接口的返回,在接口还没有开发实现的时候,进步开发测试的效率,服务 Mock 的配置中能够抉择申请的门路、端口号、办法、状态码、Header、返回 Json 数据。

  • 标签路由

通过标签路由能够抉择好基线的版本,而后抉择对应的路由版本,配置路由策略,比方基于权重的策略、基于内容的策略,通过简略的配置轻松实现路由规定的配置。

  • 服务注册

服务注册其实顾名思义就是将微服务注册到注册核心,这个能力次要是为了帮忙一些非 Java 类型的服务实现跟已有 Java 类型服务的通信,比方 Spring Cloud 服务须要与非 Java 互通,为了不便代码编写,Spring Cloud 服务须要像调用其余 Spring Cloud 服务一样去调用非 Java 服务,因而就须要非 Java 的服务注册到对应的注册核心,这里咱们反对了非 Java 服务注册到 Nacos、Eureka 注册核心。

  • 运行监控

展现服务的运行监控数据,比方均匀解决申请的次数、申请的成功率。

  • 灰度公布

能够通过公布版本的形式公布一个灰度版本的镜像,填写对应的版本号、镜像,能够配置权重、内容路由规定,能够应用回滚、灰度胜利能力。

  • 零信赖平安

能够配置双向身份认证、申请的 JWT 认证,还能够配置对应的受权策略。

全链路路由

全链路路由能够实现在整条调用链依照指定规定路由,比方在测试某个服务是否合乎预期,然而测试服务须要依赖其余服务,这时候能够通过全链路的能力,拉出一个开发环境的泳道,将指定 tag 标记的流量打到测试服务中,而其余申请还在基线环境中,这时候如果还有其余服务须要测试,也能够退出到这个泳道中一起测试,全链路路由的益处就是能够任意路由到服务链路两头服务,在基线环境外研发 / 测试人员能够轻松部署一套独立环境,晋升研发测试效率,升高运维老本。

  • 创立泳道

创立一个属于对应服务网格的泳道,即为不同的环境(创立泳道前先确定号基线版本环境)。

  • 公布服务 / 导入服务

创立好泳道后能够公布一个服务到泳道中,也能够导入部署的服务。

抉择入口的利用,配置规定(什么样的流量特色的申请能够进入泳道中)。

入口网关

通过服务网格的 Istio Ingress Gateway 的能力能够将服务网格内服务裸露进来,协定上咱们反对 HTTP、HTTPS、GRPC,除了裸露之外,咱们还反对配置路由规定,这样能够对入口服务的流量进行治理。

内部服务

通过内部服务纳管将网分外的服务纳管进来治理,能够配置服务的协定、地址、EndPoint,还能够配置服务不同 EndPoint 的标签。

服务拓扑

联合 Prometheus + Kiali,能够展现整个调用链路的拓扑构造,其中蕴含了调用的服务、版本等信息。

网格治理

  • 集群治理

能够通过简略的接入集群的能力,将已有的 K8s 集群退出进来,退出进来后,能够通过网格治理中创立网格的能力,在对应的集群中部署服务网格,创立网格时候能够配置网关、管制面 Istiod 的高可用能力、配置集群中服务的 Sidecar 资源(也能够独自配置)、是否关上 AccessLog 日志等能力。

  • 网格配置管理

创立好服务网格后须要对网格进行治理、配置,在高级选项中能够看到常见的配置,比方网关高可用、管制面高可用、网关的资源、管制面资源、服务拜访限度、可观测等。

除了这些外,还提供了服务网格对接注册核心的能力,这里咱们反对了常见的 Nacos、Eureka、Zookeeper、Consul 注册核心对接到服务网格中。

  • 多集群治理

单集群的能够满足大部分用户的要求,然而为了容灾,多集群的治理、互通也十分重要,服务网格的多集群能力在社区版本中也反对,然而配置简单,咱们的产品中提供了一键治理多集群的能力,通过多集群配置 - 纳管集群的能力,轻松的实现多个集群之间利用的互通、治理。

部署和输入

咱们反对通过阿里云混合云企业版输入、CNStack 输入,同时咱们也反对独立部署输入,只须要一个 K8s 集群,能够疾速轻松拉起专有云服务网格的能力,体验产品化的服务网格能力。

正文完
 0