作者:古琦

介绍

微服务开发的问题

微服务架构下咱们在开发中遇到的常见的问题有以下 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 集群,能够快速轻松拉起专有云服务网格的才能,体验产品化的服务网格才能。