服务网格是什么?
在云原生技术体系下,容器化是我们部署应用的一个首选方案。而在容器化的前提下呢,我们一般又会选择Kubernetes作为容器编排调度与部署的一个解决方案。
在今天,应用的部署已经通过容器化和Kubernetes得到了极大的简化,但服务的治理仍然需要应用开发者的深度参与。比如我们的一些流量灰度、熔断等等的能力,要获得这些服务治理的能力、现在一般的做法还是由开发者使用诸如Spring Cloud、Netflix OSS等SDK来实现。
那么这种方式也就代表着这些服务治理能力还是和开发者的代码耦合在一起的,所以使用的时候呢,不同的微服务必须是用一套语言和框架、泛用性比较差;另外就是框架升级的时候开发者还要去更新他的代码,因此这整套方案也就需要开发者深度参与进来。
服务网格最初就诞生于解耦服务治理能力的这种需求。核心的概念呢就是为服务的每个工作负载旁边都注入一个Sidecar代理,然后将原先集成在开发者代码中的这些服务治理能力转移到Sidecar代理中进行实现。这样服务治理能力就与业务代码解耦了,开发者只需关注业务,而运维人员也只需要配置网格中的Sidecar就可以了。
在容器化与Kubernetes简化了应用部署后,服务网格又能够极大简化服务治理,可以说服务网格是云原生时代下服务治理的一个大势所趋。
服务网格有什么能力?
首先要说的肯定就是简化的服务治理能力了,用户可以通过自定义资源的方式很方便地在网格中设定流量灰度、蓝绿发布、熔断、限流、流量镜像、流量转发、流量超时等能力。这个是基于所有网格中的流量都被Sidecar代理劫持转发才能做到的。
第二个要说的是服务网格能够很方便地提高网格内服务的安全性、实现零信任安全。比如,通过Sidecar的劫持,服务之间的通信变成了Sidecar之间的通信,这时就可以很方便地在全局实现应用间通信的tls加密、而无需业务代码修改。另外,由于入向流量被Sidecar拦截,也可以很方便地在Sidecar上设置请求认证等功能。
第三是网格的可观测能力。由于所有的服务都有劫持流量的Sidecar代理,可以很方便地统一上报所有服务的可观测信息,如QPS、请求成功率、请求日志等。
现在,网格技术已经集成在了很多云原生解决方案中,如Kserver AI 服务、Knative Serveless框架、Argo CD交付等等(服务网格ASM也都支持了哦),网格技术还有很多未经探索的新能力、新领域。
谈谈赛题?
第三届云原生编程挑战赛的赛道一就是一道有关服务网格的赛题。
刚才我们已经讲了很多服务网格的概念和能力,这些都绕不开一个事实,那就是服务网格需要为每个工作负载去注入一个Sidecar代理。由于每个Sidecar代理都是一个单独的容器,当网格中的服务增加时,Sidecar代理本身就会占据一定的资源、同时代理转发所有请求确实会造成一定的性能损失,造成QPS下降和延时的增加。这也是当前网格技术最值得考虑的点之一。
赛题的想法实际就来源于有关于这个性能优化的一个点子。我们刚才知道服务网格能够上报很多的可观测信息,那么能不能根据这些可观测信息来动态改变网格中的一些配置、使得网格的性能以及这个资源占用得到尽可能的优化呢?
我们认为还是值得一试的。因此在本次赛题中,我们为大家准备了三个优化的入手点,包括了给Sidecar分配合适的CPU和内存上限、部署一些网格的自定义资源、以及开启一个我们和intel深度合作、优化服务间通信的这个multi-buffer特性。同时为大家准备了网格中的丰富可观测信息作为大家调优的依据。希望看到大家能够开发出高明的策略、以及深度利用网格技术的各种特性,为网格优化提供各种未知的可能性。
欢迎来参加云原生编程挑战赛,服务网格赛道!