多语言应用的微服务治理最佳实践
本实践主要介绍了企业级分布式应用服务EDAS引入对服务网格的支持,实现了对多语言应用的服务治理。
前提条件
本实践适用企业版V3.15及以上版本。
主要涉及阿里云专有云企业级分布式应用服务EDAS产品的微服务治理功能。
背景信息
依据CNCF基金会(Cloud-Native Computing Foundation)的定义,云原生是对在现代的动态环境下可用来构建并运行可扩展应用的技术的总称;服务网格则是云原生技术的典型代表之一,其他技术还包括容器、微服务、不可变基础设施、声明式API等。从技术发展的角度来看,我们可以把云原生理解为云计算所关注的重心从资源逐渐转向应用的必然结果。以资源为中心的上一代云计算技术关注物理设备如何虚拟化、池化、多租化,典型代表是计算、网络、存储三大基础设施的云化,以及相关硬件、操作系统、管控面等技术;而以应用为中心的云原生技术则关注应用如何更好地适应云环境,相对于传统应用通过迁移改造上云而言,云原生希望通过一系列的技术支撑,使用户能够在云环境下快速开发和交付云原生应用。
作为云原生技术栈的一部分,服务网格则指由云原生应用的服务化组件构成的一种网格。换句话说,我们可以将服务网格理解为一种应用网络,即为在应用内部或应用之间由服务访问、调用、负载均衡等服务连接关系构成的一种网络。
在以上背景下,企业级分布式应用服务EDAS在3.15版本引入了对服务网格的支持,在原有只对Java类应用实现服务治理策略的基础上,实现了对多语言应用的服务治理。
应用场景
治理逻辑独立的进程。
企业级分布式应用服务EDAS原有Java Agent模式的治理逻辑虽然不需要有代码侵入但是还是跟业务应用同属于一个进程,如果Agent有版本升级还是要重启应用。对于服务网络,用户的业务代码和治理逻辑都以独立的进程存在,两者的代码和运行都无耦合,这样可以做到与开发语言无关,升级也相互独立。在对已存在的系统进行微服务治理时,只需搭配Sidecar即可,对原服务无须做任何修改,并且可以对老系统渐进式升级改造,先对部分服务进行微服务化,逐步实现微服务改造过程,降低改造过程中对业务的震荡影响和稳定风险。
多语言应用的微服务治理
多语言应用的部署。
登录Apsara Uni-manager运营控制台,输入阿里云专有云账号密码。

在上方导航栏单击产品>中间件>企业级分布式应用服务 EDAS,进入EDAS控制台。

多语言应用部署。
在左侧导航栏单击应用列表>创建应用;

在应用基本信息页面选择K8s集群、托管应用类型为多语言,单击下一步;

对应用的命名空间、集群、NameSpace、镜像及版本进行配置,单击下一步;

完成服务网格配置,单击下一步;应用部署完成。

多语言应用服务管理。
多语言应用服务查询及流量治理。
在左侧导航栏单击微服务治理>ServiceMesh>服务查询,在服务查询页面选择地域和微服务空间,查看当前账号下的多语言服务。服务网格包含服务名、版本、分组、应用名和实例数。在服务详情页面查看服务的详细信息。服务详情包含基本信息和服务调用关系。
选择需要操作的服务,在右侧操作栏单击流量管理,配置流量治理策略。
流量调度机制(即负载均衡):负载均衡从严格意义上讲不应该算治理能力,因为它只做了服务间互访的基础工作,在服务调用方使用一个服务名发起访问的时候能找到一个合适的后端,把流量导过去。当前支持的主要负载均衡算法包括:轮询、随机和最小连接数算法。

熔断配置:熔断配置中可以配置请求的最大连接数(HTTP1/TCP)、TCP连接的超时时间(客户端到服务端)、最大请求重试次数、每条连接最大请求数、最大请求等待数、HTTP2的请求数,通过配置熔断配置可以避免服务被压垮。

离群摘除:对连续错误次数达到指定次数的节点进行摘除,摘除的时间为配置的最短隔离时间,可以摘除的节点总数占该应用Pod数量的比例最大比例,避免所有应用都被隔离导致应用雪崩,检查周期为多长时间检查一下应用实例是否隔离。

故障注入:对特定的应用层协议进行故障注入,可以对某种请求注入一个指定的HTTP Code,这样,对于访问的客户端来说,就跟服务端发生异常一样。还可以注入一个指定的延时,这样客户端看到的就跟服务端真的响应慢一样,还可以对故障的条件进行各种设置,例如只对某种特定请求注入故障,其他请求仍然正常。

多语言应用服务鉴权。
当某个微服务应用有安全要求,不希望其它所有应用都能调用时,可以对调用该应用的其它应用进行鉴权,仅允许匹配鉴权规则的应用调用。
在左侧导航栏单击微服务治理>服务网格>服务鉴权>创建规则;设置服务鉴权参数,然后单击确定,完成服务鉴权规则创建。



选择需要操作的服务,在右侧操作栏单击流量管理,配置流量治理策略。





