【DTSE Tech Talk 精选问答】NO.46丨云原生微服务的下一站:Proxyless Service Mesh

举报
云小宅 发表于 2024/02/26 16:42:41 2024/02/26
【摘要】 云原生微服务治理技术的下一代演进方向是什么?Proxyless Service Mesh! 本期直播将聚焦于云原生微服务治理技术,介绍从SOA、微服务SDK到Service Mesh、Proxyless Service Mesh的演进历程,并演示如何基于开源的云原生无代理服务网格Sermant,帮助用户以零代码修改的方式来将SOA架构应用向Proxyless Service Mesh架构进行...

云原生微服务治理技术的下一代演进方向是什么?Proxyless Service Mesh! 本期直播将聚焦于云原生微服务治理技术,介绍从SOA、微服务SDK到Service Mesh、Proxyless Service Mesh的演进历程,并演示如何基于开源的云原生无代理服务网格Sermant,帮助用户以零代码修改的方式来将SOA架构应用向Proxyless Service Mesh架构进行改造,实现微服务架构的平滑演进和升级。
直播链接:https://bbs.huaweicloud.com/live/DTT_live/202310251630.html

Q:在云原生微服务架构中,Proxyless Service Mesh有哪些潜在的挑战和风险?

A:主要的挑战是如何兼容众多的版本的框架和组件,因为不同版本的源码可能不同,因此需要对拦截点做相应的适配。其次还要持续地提升性能,把性能哟花到极致。

Q:sermant支持哪些编程语言和框架?

A:目前支持的编程语言仅限Java,微服务的框架支持常见的SpringBoot、SpringCloud、Dubbo等,具体的支持范围可以查看各插件的文档说明https://sermant.io/zh

Q:无代理服务网格(Proxyless ServiceMesh)的发展趋势怎么样?

A:我们认为无代理服务网格是下一代微服务架构的发展方向,因为现在大规模微服务场景越来越多,全量侵入式改造成本会很高,所以非侵入式当前微服务架构升级改造的重要前提。其次性能是需要重点考虑的问题,降本增效是永恒不变的追求,不能升级了架构使得性能还不如之前。另外,良好的扩展性也是治理生态中重要的一环,服务治理能力会朝着精细化差异化的方向发展,所以需要能够自定义地开发服务治理功能。

Q:无代理服务网格(Proxyless Service Mesh)的核心优势是什么?

A:Sermant三个核心特点:高性能、插件化、非侵入。高性能指Sermant可以缩短网络调用的路径,降低时延,提升性能;插件化是指Sermant设计了基于底座开发插件的架构,开发者可以自定义开发插件,实现丰富的服务治理能力;非侵入是指用户使用Sermant时无需修改业务代码,只需运行时挂载Sermant即可集成注入服务治理功能。

Q:微服务和无服务网格有哪些区别?

A:如果微服务通过SDK进行服务治理,其本身架构属于无代理服务网格。

Q:SOA和微服务SDK的区别有哪些?

A:主要区别在于SOA架构会部署中心式的网关、微服务SDK架构就可通过引入SDK的方式将网关去掉,变成直连的方式。

Q:云原生微服务治理技术的当前状态是什么?

A:早期是SOA、微服务SDK方式作为微服务治理,后来随着Service Mesh的兴起,边车架构也逐渐流行起来。最近一段时间比较火的技术是ebp技术,更偏向内核和底层、开发难度更高。Sermant这种Proxyless Service Mesh属于Service Mesh的一种,通过JavaAgent字节码字节码增强来实现服务治理。总的来说百花齐放,需要根据使用场景、结合性能、部署成本等去选择,Sermant在性能、非侵入、服务治理功能的多样性这些方面做得比较好,限制就在于只能用在Java应用上。

Q:Service Mesh解决了什么问题?

A:Service Mesh的出现就是为了解决治理功能和业务的耦合问题,实现了非侵入服务治理。

Q:在云原生微服务架构中,Proxyless Service Mesh如何实现跨服务的消息流管理和追踪增强?

A:Sermant提供了流量染色、流量标签透传能力可以对流量进行分组,在http、rpc、消息队列各组件中可以透传,用户可以根据实际场景来多针对性的流量治理,例如流控、全链路灰度发布等。Sermant特提供了针对分布式系统中进行链路标记的能力,开发者在开发时只需要正确的选择正确的执行单元进行标记,并指定链路上下文信息在链路中的传递方式即可。具体文档可以参考官网https://sermant.io/zh/

Q:Proxyless Service Mesh如何处理服务间的服务网格扩展和多集群部署?

A:Sermant在k8s环境部署时可以通过提供的sermant-injector组件,在创建容器时,自动地将Sermant拉下来并且在启动的时候挂载运行。只需在yaml中添加sermant-injection:enabled就可以实现快速扩容,无需修改业务应用自身的出包流程。sermant-injector组件的详细使用方式可以参考https://sermant.io/zh/document/user-guide/sermant-injector.html。多集群部署时,各个集群之间的Sermant配置保持一致,使用同一套注册中心、配置中心、Backend即可。

Q:在云原生环境中,Proxyless Service Mesh如何实现灰度发布和金丝雀测试?

A:Sermant提供了标签路由插件,通过对服务提供者以服务粒度或者全局粒度配置路由规则,通过将某一个或多个服务的提供者划分到同一个分组,约束流量只在指定分组中流转,从而实现流量隔离的目的,可以作为流量染色、蓝绿发布、灰度发布、全链路灰度、同可用区优先调用等场景的能力基础。详细介绍您可以参考https://sermant.io/zh/document/plugin/router.html

Q:Proxyless Service Mesh如何支持微服务的自适应流量控制和动态路由?

A:Sermant的流控插件,实现了基于系统规则的流控能力以及基于负载的自适应流控能力。系统规则流控是指对系统规则指标实时检测,当系统规则某一项指标超出阈值时,对流量进行控制。负载自适应流控根据系统规则流控中的负载指标,增加了自适应的能力,自适应是指当前流量的控制需要根据系统过去一段时间内资源消耗情况进行判断,对流量进行控制。参考文档https://sermant.io/zh/document/plugin/flowcontrol.html#%E5%8A%9F%E8%83%BD%E4%BB%8B%E7%BB%8D。

Q:Proxyless Service Mesh如何支持微服务的日志聚合和监控?

A:Sermant可以通过Backend组件实现微服务的观测,包括心跳信息以及关键事件、错误日志的上报。另外Sermant的监控插件也可以监控CPU、内存、磁盘IO和网络IO等硬件资源的使用情况,JVM资源使用情况比如堆内存使用、非堆内存使用、缓存区使用,吞吐量(QPS、TPS、平均响应时间)。

Q:在云原生微服务架构中,Proxyless Service Mesh如何实现服务的容错处理和异常恢复?

A:基于Sermant的服务发现、重试、限流降级、隔离仓等能力可以实现。

Q:Proxyless Service Mesh如何处理服务间的流控和限流策略?

A:Sermant提供了流控插件,基于resilience4j (opens new window)框架,以"流量"切入点,实现"非侵入式"流量控制;当前支持限流、熔断、隔离仓、错误注入与重试、熔断指标采集、系统规则、系统自适应流控能力,并且支持配置中心动态配置规则,实时生效。具体文档介绍可参考https://sermant.io/zh/document/plugin/flowcontrol.html#%E5%8A%9F%E8%83%BD%E4%BB%8B%E7%BB%8D

Q:如何利用Proxyless Service Mesh实现微服务的动态服务网格和多租户隔离?

A:可以通过指定不同租户Sermant的artifact,基于artifact隔离不同Sermant的配置及服务治理能力。

Q:Sermant的使用成本怎么样?

A:Sermant本身是开源项目,可免费使用。Sermant对内存和CPU的占用都较低,除了sermant-injector无需额外虚机或容器资源,整体实际部署成本也较低。

Q:Proxyless Service Mesh如何支持微服务的跨域通信和网关集成?

A:Proxyless Service Mesh通过逐步实现微服务改造,将网关流量平滑迁移至服务注册发现架构,改造完成后不再需要中心式网关。

Q:Proxyless Service Mesh如何支持大规模的分布式跟踪和可观察性增强?

A:Sermant提供了针对分布式系统中进行链路标记的能力,开发者在开发时可以的选择正确的执行单元进行标记,并指定链路上下文信息在链路中的传递方式。Backend也提供了边车的可观测能力,可对微服务的心跳、治理事件等进行观测。

Q:在云原生微服务架构中,Proxyless Service Mesh如何实现服务的动态配置和自适应调整?

A:动态配置中心为Sermant动态配置功能配套组件,该功能允许Sermant从动态配置中心拉取配置以实现丰富多样的服务治理能力。当前动态配置中心已经支持了Zookeeper,Nacos,Kie,可以按需部署。动态配置功能的接口是一致的,与动态配置中心的类型无关,详细指南可以参考https://sermant.io/zh/document/user-guide/configuration-center.html

Q:Proxyless Service Mesh如何支持微服务的自动化测试和代码热替换?

A:Sermant支持框架和插件的热插拔,在宿主应用运行时动态地挂载或卸载Sermant及插件,可以实现动态地字节码增强能力。

Q:在云原生环境中,Proxyless Service Mesh如何实现自动扩展和按需伸缩?

A:Sermant在k8s环境部署时可以通过提供的sermant-injector组件,在创建容器时,自动地将Sermant拉下来并且在启动的时候挂载运行。只需在yaml中添加sermant-injection:enabled就可以实现快速扩容,在此基础上自动扩展和按需伸缩,sermant-injector组件的详细使用方式可以参考https://sermant.io/zh/document/user-guide/sermant-injector.html。

Q:在云原生微服务架构中,Proxyless Service Mesh如何实现服务的动态发现和注册更新?

A:基于Sermant的服务注册发现架构可以支持服务注册信息的实时刷新,微服务实例在上线和下线后,其他服务可以立刻感知到注册信息的更新,因此各个服务实例可以动态地发现注册中心的微服务实例。

Q:Proxyless Service Mesh如何支持微服务的多协议支持和跨语言互操作性?

A:Sermant目前仅支持Java语言应用,如果需要和其他语言开发的应用一起做治理,可以考虑将Sermant结合ebpf一起实现。Java语言中,http、rpc等常见的协议都是支持的,因此spring cloud,dubbo、grpc等框架都能支持。

Q:Proxyless Service Mesh如何支持大规模的部署和容器编排?

A:Sermant在k8s环境部署时可以通过提供的sermant-injector组件,在创建容器时,自动地将Sermant拉下来并且在启动的时候挂载运行。只需在yaml中添加sermant-injection:enabled就可以实现快速扩容,无需修改业务应用自身的出包流程。sermant-injector组件的详细使用方式可以参考https://sermant.io/zh/document/user-guide/sermant-injector.html。

Q:Seramnt采用类隔离技术,那怎么我自己声明的类怎么让宿主应用加载呢?

A:自己声明的类正常来说是不需要使用宿主应用加载的,因为这破坏了类的隔离型。在Sermant当前1.2.0版本中,类隔离的机制保证了自己声明的类会被插件类加载器进行加载,需要使用到宿主的类的时候再去宿主的类加载器中查找相关的类。

Q:什么时候用Sermant 什么时候用微服务

A:微服务是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块为基础,利用模块化的方式组合出复杂的大型应用程序。微服务的另一个对比是单体式应用程序。单体式应用表示一个应用程序内包含了所有需要的业务功能。当我们需要将一个庞大的应用程序的各个功能模块进行解耦,避免每个功能模块和其它模块有所牵连,需要各自独立部署升级时,我们一般使用微服务架构。如果您的微服务想通过低成本非侵入的方式引入服务治理能力时,可以使用Sermant来实现。

Q:Proxyless Service Mesh如何处理服务间的断路器和熔断机制?

A:Sermant的流控插件提供了对接口的熔断能力,对指定接口配置熔断策略,可从单位统计时间窗口内的错误率或者慢请求率进行统计,当请求错误率或者慢请求率达到指定比例阈值,即触发熔断,在时间窗口重置前,隔离所有请求,在客户端和服务端都可生效。

Q:在云原生环境中,Proxyless Service Mesh如何实现可扩展性的设计和架构?

A:Sermant提供了字节码增强的底座和实现服务治理的核心能力,在此基础上Sermant设计了插件化的架构,可以自由地根据需求新增插件,实现独立的服务治理能力,并且和其它插件完全解耦,不出产生使用上的冲突。

Q:Proxyless Service Mesh如何处理服务间的重试机制和超时控制?

A:Sermant的流控插件可以实现服务间的重试和超时控制,当服务遇到非致命的错误时,可以通过重试的方式避免服务的最终失败。如果超时次数过多请求错误率高,还可以通过熔断、隔离仓等手段的手段进行处理。

Q:在治理和可观测领域eBPF是一个热门话题,Sermant和eBPF有没有结合的可能性?

A:Sermant具有丰富的治理能力和可观测能力,但是缺点在于只能支持Java语言的应用,而ebpf更加底层,与编程语言无关,可以将Sermant结合ebpf实跨语言的服务治理,多语言通用能力可以通过ebpf实现,Java层面的治理能力由Sermant来接管。

Q:在云原生环境中,如何管理和优化Proxyless Service Mesh的延迟和响应时间?

A:相对于SOA架构和传统的Service Mesh架构,Sermant这种Proxyless Service Mesh架构流量路径分别少了一跳和两跳,延迟是更优的,响应时间更短,这是架构上的优势。在Sermant内部,我们还可以通过减少反射调用等手段将延迟进一步优化。

Q:在云原生环境中,Proxyless Service Mesh如何实现服务网格的可观察性和可诊断性?

A:Sermant可以通过Backend组件实现微服务的观测,包括心跳信息以及关键事件的上报。另外Sermant的监控插件也可以监控CPU、内存、磁盘IO和网络IO等硬件资源的使用情况,JVM资源使用情况比如堆内存使用、非堆内存使用、缓存区使用,吞吐量(QPS、TPS、平均响应时间)。

Q:Sermant的高性能是如何体现的呢

A:相对于SOA架构和传统的Service Mesh架构,Sermant这种Proxyless Service Mesh架构流量路径分别少了一跳和两跳,延迟是更优的,响应时间更短,这是架构上的天然优势。

Q:Sermant的动态热插拔插件里面类是怎么隔离的? 重复热插拔过程中类的加载和卸载有考虑吗?

A:在Sermant的体系中会为每个插件维护单独的类加载器,动态安装新的插件时会有新的类加载器创建,并不会对其他已有插件产生影响,动态卸载插件时会将该插件的类加载器在卸载时关闭。

Q:Proxyless Service Mesh如何与CI/CD流程集成,实现自动化部署和测试?

A:可以通过部署Sermant的sermant-injector组件来快速部署挂载Sermant,微服务自身CI/CD流程不变,仅需添加在yaml中添加一行lable即可在容器创建时挂载Sermant。

Q:Proxyless Service Mesh如何处理服务间的依赖关系和拓扑结构?

A:可以基于字节码增强的方式对请求执行的关键节点进行埋点,通过链路追踪来对请求调用链进行采集,从而分析请求的调用拓扑结构。

Q:如何评估一个系统是否适合使用Proxyless Service Mesh?

A:只要是Java语言微服务架构的系统,需要对服务治理能力进行扩展或增强,都可以尝试使用Sermant来进行实践。

Q:在云原生环境中,如何利用Proxyless Service Mesh实现服务间的负载均衡和高可用性?

A:Sermant支持同可用区优先调用、动态负载均衡、流控等服务治理能力,可以基于这些能力满足微服务的高可用性。

Q:sermant是否有使用加密技术协议保护微服务之间的通信?

A:目前sermant主要针对服务治理能力做增强,暂不对服务通信进行加密。如果您有需求,可以基于Sermant开发相关插件来实现通信加密。

Q:如果我开发针对于kafka的插件,拦截kafka的消费方法,针对于不同版本的kafka,我该如何编写插件呢?需要编写多个版本的增强类吗?

A:Sermant对于字节码增强的匹配逻辑是匹配类的全限定类名以及方法名,如果您需要增强不同版本的Kafka,需要对增强的类的源码进行分析,如果累的全限定类名、方法名或者实现逻辑有差异,则需要多不同版本的拦截点区分做处理。

Q:Proxyless Service Mesh如何处理服务间的版本兼容性和升级?

A:服务间的版本会在服务注册时就体现在元数据中,proxyless service kesh本身并不关心服务间的兼容性,但在调度过程中会关注服务的版本做区分调用,在升级时可以借助proxyless service mrsh提供无损上下线能力进行无损升级

Q:在云原生环境中,Proxyless Service Mesh如何与Service Fabric等平台集成?

A:Sermant这种Proxyless Service Mesh本质上来说是外挂的边车,和传统边车不同的是不需要单独的容器进程部署。无论是Service Fabric或是其他平台,如果是虚机环境部署,只需要通过启动命令中添加-javaagent参数指定Sermant的路径即可;容器部署时只需部署setmant-injector组件,微服务自身部署是添加一行semant-injection:enabled的label即可挂载Sermant到微服务的容器进程中。

Q:请问sermant支持哪些jdk版本?

A:当前Sermant支持的最低的JDK的版本是JDK8,在最新的1.2.0 release版本中,JDK11和JDK17也做了兼容。

Q:如何评估无代理服务网格(Proxyless ServiceMesh)的技术价值?

A:无代理服务网格避免了传统代理模式中sidecar的部署,大幅减少了的网络延迟,性能上来说较优的。另外非侵入的部署方式可以使得传统的微服务甚至简单的Java应用能够快速地一键接入,从部署成本、改造时间成本上来说是非常优秀的。另外这种架构还提供了插件化的开发模式,可以根据需求开发丰富的服务治理插件,技术生态也很健康。

Q:对于想要采用云原生无代理服务网格Sermant的企业,你有什么具体的建议和实施步骤?

A:我们建议企业用户需要评估好架构改造升级的成本承受范围,如果需要以尽可能低的成本、过程足够短、架构稳定性影响小的方式来改造,则可以按照直播中我们Sermant架构改造的过程,灰度改造升级。改造过程中通过灰度过程来保证系统的稳定性,控制爆炸半径。

Q:如何将现有的单体应用或微服务应用平滑地迁移到Proxyless Service Mesh架构?

A:可以利用Sermant的SpringBoot服务注册插件对应用非侵入地改造,在不影响业务稳定的前提下,灰度发布接入Sermant的新版本服务实例,可以逐步实现架构的整体升级。

Q:每个服务都需要引入Sermant,那对宿主应用的性能以及资源消耗会不会有影响?有多大影响?

A:在微服务本身额外以内Sermant,不可避免地会带来一些性能消耗。目前Sermant将对宿主应用的性能消耗优化目标为CPU占用不超过5%、堆外内存增加不超过30M、TPS影响不超过5%。

Q:Sermant和Serverless哪个更容易上手

A:Serverless模式本质上是做业务相关开发,不用关注底层计算资源。而Sermant本质上是额外的JavaAgent组件,不关心业务逻辑怎么实现,只关注服务治理相关的事物。二者不是同一维度,不过使用方式都较为简单。

Q:sermant如何进行字节码增强的,用的技术是什么?

A:Sermant进行字节码增强的接口是ByteBuddy提供的,最底层的接口是JDK提供的Instrumentation ,提供了一种虚拟机级别支持的AOP方式来做字节码增强。

Q:那我基于Sermant开发一个插件的话,Sermant底座能提供哪些能力?

A:Sermant的底座主要提供了字节码增强的相关接口,心跳、日志、动态配置等核心服务的接口,并设计了完善的类隔离机制,保证业务应用和Sermant以及插件之间严格的类隔离。基于以上底座能力,开发者可以按需开发自定义的插件,支持独立挂载插件或多个插件同时挂载。

Q:对于云原生微服务治理技术的发展,你认为未来会有哪些趋势和影响?

A:未来云原生微服务的发展趋势必然是朝着非侵入无代理方向演进,因为用户不希望架构改造成本过高,也不希望改造之后性能下降。因此Proxyless Service Mesh是重要的演进方向。

Q:对于考虑升级和改造现有微服务架构的企业,你有什么建议和最佳实践?

A:我们建议企业用户需要评估好架构改造升级的成本承受范围,如果需要以尽可能低的成本、过程足够短、架构稳定性影响小的方式来改造,则可以按照直播中我们Sermant架构改造的过程,灰度改造升级。

Q:如果同时把Sermant和其它的JavaAgent放在一起使用,会有不兼容的情况吗?

A:在和其他类型的JavaAgent同时挂载使用时,由于Sermant严格遵守了字节码增强底层接口的使用规范,没有对类的继承关系做修改,也没有修改类的签名,并且具有完善的类隔离机制,因此Sermant兼容性很好,能够兼容其他JavaAgent对字节码做的增强(例如Skywalking等),使得应用运行正常,字节码增强能力不受影响。

Q:Sermant和Dubbo、istio等都做了服务治理的特性,Sermant和它们是怎么样的关系?

A:Sermant相对Dubbo,因为不针对特定的RPC调用,因此多了很多其他RPC、中间件的治理能力;相对istio,因为可实现对进程级的增强,因此多了很多类似标签透传的服务治理能力

Q:改造过程需要注意哪些事项?

A:核心还是一点:改造过程中,充分进行灰度发布,保证整个改造过程的稳定,控制爆炸半径。

Q:如果我想根据自己的需求开发一个新的插件,流程是否很复杂?有没有快速开发相关指导?

A:可根据我们最新的开发手册。简单的插件开发,排开插件逻辑本身,2天就可以完成端到端的工作。其他的工作取决于插件逻辑本身是否复杂,需要支持多少接口。

Q:针对不同的应用类型和场景,Sermant有哪些最佳实践?

A:简单总结三个:

1)选用单独的配置中心给Sermant使用,避免配置中心混用;
2)一定要使用backend,对sermant实例进行监控;
3)多javaagent场景下,把Sermant放加载顺序的后面,避免冲突

Q:在使用Sermant的过程中,如何进行性能优化和故障排除?

A:可以采用Arthas等java常用工具,通过火焰图观察、内存实例分布等手段和工具来进行故障排查。

Q:如何定义“零侵入”?

A:对业务没有业务的代码修改,不需要业务重新构建出包,一般就叫 "零侵入"或者 "非侵入"

Q: sermant对部署环境有哪些要求?

A:对java当前版本支持:1.8 + 。 对操作系统没有限制。



想要了解更多Proxyless Service Mesh相关知识,欢迎观看DTSE Tech Talk 系列技术直播

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。