之前写过一篇服务网格入门的文章,今天来聊聊进阶的内容,对比一下主流服务网格的差异,以及一些可能你不知道的使用技巧。
服务,网格,Service Mesh,是,这,几年,微服务,领域,比较,火,的,一个,概念,是,用来,处理,服务,之间,通信,的,基础设施,层,能,提供,服务,发现,负载,均衡,熔断,限流,链路,追踪,可观测,性,安全,等等,功能,让,应用,代码,不用,关心,这些,通信,相关,的,逻辑,专注,于,业务,逻辑。
这,几年,随着,Kubernetes,的,流行,服务,网格,也,越来越,受,欢迎,很多,团队,都,开始,在,生产,环境,使用,服务,网格,我,所在,的,团队,也,在,一年,前,开始,使用,服务,网格,最,开始,用,的,是,Istio,后来,也,调研,和,试用,了,Linkerd,和,Consul Connect,积累,了,一些,经验,也,发现,了,一些,可能,很多,人,不,知道,的,技巧。
今天,这篇,文章,就,来,聊聊,服务,网格,对比,进阶,的,内容。
一、主流服务网格对比
先说说,主流,服务,网格,的,对比,目前,主流,的,服务,网格,主要,有,三个,Istio,Linkerd,Consul Connect,各,有,特点,适合,不同,的,场景。
1. Istio
Istio,是,目前,最,流行,功能,最,强大,的,服务,网格,是,由,Google,IBM,和,Lyft,联合,开发,的,现在,由,CNCF,管理,已经,从,CNCF,毕业,了,是,服务,网格,领域,的,事实,标准,很多,公司,都,在,生产,环境,使用,Istio。
Istio,的,架构,是,控制面,加,数据面,的,架构,控制面,负责,管理,和,配置,数据面,数据面,是,Envoy,代理,以,Sidecar,的,方式,和,应用,容器,部署,在,同一个,Pod,里,拦截,应用,的,所有,入站,和,出站,流量,实现,各种,服务,网格,的,功能。
Istio,的,功能,非常,强大,几乎,支持,所有,你,能,想到,的,服务,网格,功能,包括,服务,发现,负载,均衡,熔断,限流,重试,超时,故障,注入,链路,追踪,指标,监控,日志,mTLS,安全,认证,授权,流量,管理,灰度,发布,A/B测试,等等,功能,非常,全,而且,有,很,好,的,可观测,性,和,安全,能力,能,满足,各种,复杂,的,场景。
但是,Istio,也,有,一些,缺点,首先,是,复杂,Istio,的,功能,太,多,了,架构,也,比较,复杂,学习,成本,高,运维,也,复杂,需要,专门,的,人,来,维护,其次,是,性能,开销,Istio,因为,功能,多,Sidecar,的,资源,消耗,比较,大,延迟,也,比,其他,服务,网格,高,一些,对,性能,敏感,的,场景,可能,会,有,影响,还有,就是,版本,更新,快,兼容性,问题,Istio,的,版本,更新,很,快,经常,有,不,兼容,的,变更,升级,比较,麻烦。
Istio,适合,功能,需求,多,场景,复杂,对,可观测,性,和,安全,要求,高,的,中大型,团队,和,企业,如果,你,需要,很多,高级,功能,有,专门,的,运维,团队,那么,Istio,是,很,好,的,选择。
2. Linkerd
Linkerd,是,最早,的,服务,网格,项目,是,由,Buoyant,公司,在,2016年,开发,的,现在,也是,CNCF,的,项目,已经,毕业,了,Linkerd,的,设计,理念,是,简单,轻量,快速,专注,于,服务,网格,的,核心,功能,不,追求,大而全,所以,比,Istio,简单,很多,也,轻量,很多。
Linkerd,的,架构,也是,控制面,加,数据面,的,架构,但是,数据面,不是,用,Envoy,而是,用,Linkerd,自己,开发,的,Rust,写,的,代理,叫,linkerd2-proxy,专门,为,服务,网格,场景,优化,的,所以,性能,很,好,资源,消耗,小,延迟,低,比,Envoy,更,轻量,更,快速。
Linkerd,的,功能,比,Istio,少,一些,但是,核心,功能,都,有,包括,服务,发现,负载,均衡,熔断,重试,超时,链路,追踪,指标,监控,mTLS,安全,等等,能,满足,大部分,场景,的,需求,但是,一些,高级,功能,比如,故障,注入,流量,镜像,复杂,的,流量,管理,等等,就,没有,或者,比较,弱,而且,Linkerd,主要,支持,Kubernetes,对,其他,环境,的,支持,不,如,Istio。
Linkerd,的,优点,是,简单,轻量,快速,学习,成本,低,运维,简单,性能,好,资源,消耗,小,延迟,低,很,容易,上手,安装,和,使用,都,很,简单,而且,稳定性,很,好,很少,出,问题,适合,小,团队,和,对,性能,敏感,的,场景。
Linkerd,适合,功能,需求,不,太,复杂,追求,简单,轻量,高性能,的,小,中型,团队,如果,你,只,需要,服务,网格,的,核心,功能,不想,太,复杂,那么,Linkerd,是,很,好,的,选择。
3. Consul Connect
Consul Connect,是,HashiCorp,公司,的,Consul,的,服务,网格,功能,Consul,本身,是,一个,服务,发现,和,配置,管理,工具,后来,加,了,Connect,功能,支持,服务,网格,Consul Connect,的,特点,是,多,平台,支持,不仅,支持,Kubernetes,还,支持,虚拟机,物理机,混合,云,等等,各种,环境,适合,异构,环境,的,场景。
Consul Connect,的,架构,也是,控制面,加,数据面,数据面,可以,用,Envoy,也,可以,用,Consul,自己,的,内置,代理,功能,也,比较,全,包括,服务,发现,负载,均衡,mTLS,安全,意图,管理,等等,但是,可观测,性,和,流量,管理,的,功能,比,Istio,弱,一些。
Consul Connect,的,优点,是,多,平台,支持,能,在,各种,环境,运行,适合,异构,环境,的,场景,而且,和,Consul,的,服务,发现,和,配置,管理,功能,集成,很,好,如果,已经,在,用,Consul,的话,用,Consul Connect,很,方便,但是,如果,只用,Kubernetes,的话,Consul Connect,的,优势,就,不,明显,了,而且,功能,和,生态,也,不,如,Istio,和,Linkerd。
Consul Connect,适合,有,异构,环境,需要,在,Kubernetes,和,虚拟机,等,多种,环境,之间,做,服务,网格,的,场景,如果,你,的,环境,比较,复杂,有,多种,基础设施,那么,Consul Connect,是,可以,考虑,的,选择。
对比小结
总的来说,三个,服务,网格,各,有,特点,Istio,功能,最,全,最,强大,但是,也,最,复杂,最重,适合,中大型,团队,和,复杂,场景,Linkerd,最,简单,最,轻量,最高性能,但是,功能,少,一些,适合,小,团队,和,简单,场景,Consul Connect,多,平台,支持,最,好,适合,异构,环境,的,场景,大家,可以,根据,自己,团队,的,实际,情况,选择,适合,的,服务,网格。
二、Istio进阶技巧
接下来,说说,Istio,的,一些,进阶,技巧,这些,都是,我,在,实际,使用,中,积累,的,可能,很多,人,不,知道,但是,很,有用。
1. Sidecar资源调优
Istio,的,Sidecar,默认,的,资源,配置,可能,不,适合,所有,场景,默认,的,CPU request,是,100m,memory request,是,128Mi,CPU limit,是,2000m,memory limit,是,1024Mi,这个,配置,对于,大部分,应用,来说,可能,太,大,了,会,浪费,资源,尤其是,当,集群,里,有,很多,Pod,的,时候,Sidecar,占用,的,资源,加,起来,很,可观。
我们,可以,通过,修改,Istio的配置,或者,用,Sidecar资源,annotation,来,调整,Sidecar,的,资源,配置,根据,应用,的,实际,流量,情况,设置,合适,的,资源,比如,对于,流量,小,的,应用,可以,把,Sidecar,的,资源,调,小,比如,CPU request,10m,memory request,32Mi,CPU limit,500m,memory limit,256Mi,这样,能,节省,很多,资源,对于,流量,大,的,应用,可以,把,Sidecar,的,资源,调,大,保证,性能。
而且,还,可以,用,Istio的Sidecar资源,自动,调优,功能,或者,用,第三方,工具,比如,istio-sidecar-resource-optimizer,来,根据,实际,使用,情况,自动,调优,Sidecar,的,资源,配置,很,方便。
2. 选择性注入Sidecar
不是,所有,Pod,都,需要,注入,Sidecar,比如,一些,基础,设施,服务,或者,流量,特别,大,对,延迟,特别,敏感,的,服务,可能,不,需要,或者,不,适合,注入,Sidecar,这,时候,就,需要,选择性,注入,Sidecar。
Istio,默认,是,根据,命名空间,的,label,来,决定,是否,注入,Sidecar,的,如果,命名空间,有,istio-injection=enabled,的,label,那么,这个,命名空间,里,的,所有,Pod,都会,注入,Sidecar,但是,我们,可以,通过,Pod,的,annotation,来,覆盖,这个,行为,比如,给,某个,Pod,加,sidecar.istio.io/inject=false,的,annotation,就,能,禁止,这个,Pod,注入,Sidecar,很,方便。
而且,还,可以,用,更,精细,的,方式,控制,Sidecar,注入,比如,用,Istio的Sidecar资源,来,控制,哪些,服务,需要,Sidecar,哪些,不,需要,或者,用,自定义,的,注入,策略,根据,Pod,的,label,annotation,等等,来,决定,是否,注入,很,灵活。
3. 流量管理高级技巧
Istio,的,流量,管理,功能,很,强大,除了,基础,的,路由,灰度,发布,A/B测试,还有,一些,高级,技巧,很,有用。
比如,流量镜像,Traffic Mirroring,能,把,生产,环境,的,流量,复制,一份,发送,到,新,版本,的,服务,但是,不,影响,生产,环境,的,响应,这样,能,在,生产,环境,真实,流量,下,测试,新,版本,的,服务,发现,问题,而,不,影响,用户,很,有用,Istio,支持,流量,镜像,功能,配置,也,很,简单,通过,VirtualService,就,能,配置。
比如,故障注入,Fault Injection,能,主动,给,服务,注入,延迟,或者,错误,测试,服务,的,容错,能力,和,弹性,这,在,混沌,工程,里,很,有用,能,帮助,发现,系统,的,脆弱点,Istio,支持,故障,注入,功能,能,配置,延迟,和,中止,两种,故障,很,方便。
比如,请求重试和超时,Istio,能,配置,请求,重试,和,超时,策略,比如,某个,服务,调用,失败,后,自动,重试,几次,每次,间隔,多少,超时,时间,多少,等等,能,提高,系统,的,可用性,和,容错,能力,而且,不用,改,应用,代码,通过,Istio,配置,就,能,实现,很,方便。
比如,熔断和限流,Istio,支持,熔断,和,限流,功能,能,配置,连接,数,请求,数,并发,数,等等,的,限制,当,某个,服务,出现,问题,的,时候,自动,熔断,防止,故障,扩散,保护,系统,的,稳定性,也,能,限流,防止,流量,突增,把,服务,打垮,很,有用。
4. 可观测性进阶
Istio,的,可观测,性,功能,很,强大,除了,基础,的,指标,链路,追踪,日志,还有,一些,进阶,技巧。
比如,自定义指标,Istio,默认,会,收集,很多,指标,比如,请求,数,延迟,错误率,等等,但是,有时候,我们,需要,自定义,的,指标,比如,根据,请求,的,某个,header,或者,参数,统计,指标,Istio,支持,自定义,指标,通过,配置,Mixer,或者,Telemetry API,能,定义,自己,的,指标,很,灵活。
比如,链路追踪采样率调优,Istio,默认,的,链路,追踪,采样率,是,1%,也就是,100个,请求,里,只,采样,1个,这,对于,生产,环境,来说,可能,太,低,了,很多,问题,的,链路,采,不到,但是,如果,采样率,太,高,又,会,增加,性能,开销,和,存储,成本,所以,需要,根据,实际,情况,调优,采样率,比如,生产,环境,可以,设,成,10%,或者,20%,测试,环境,可以,设,成,100%,而且,还,可以,用,动态,采样,根据,请求,的,重要性,或者,错误,情况,动态,调整,采样率,很,灵活。
比如,日志级别调优,Istio,的,Sidecar,默认,的,日志,级别,是,info,会,输出,很多,日志,对于,排查,问题,有,帮助,但是,也,会,增加,资源,消耗,和,存储,成本,如果,不需要,那么,多,日志,可以,把,日志,级别,调,成,warn,或者,error,减少,日志,输出,节省,资源,和,存储,需要,排查,问题,的,时候,再,临时,调,成,debug,很,方便。
5. 安全进阶
Istio,的,安全,功能,也,很,强大,除了,基础,的,mTLS,还有,一些,进阶,技巧。
比如,授权策略,Istio,支持,细粒度,的,授权,策略,能,控制,哪个,服务,能,调用,哪个,服务,哪个,接口,甚至,能,根据,请求,的,属性,比如,JWT,的,claim,请求,的,header,等等,来,做,授权,控制,很,灵活,能,实现,零信任,安全,模型,很,有用。
比如,JWT认证,Istio,支持,JWT,认证,能,验证,请求,的,JWT token,的,有效性,和,签名,不用,在,应用,代码,里,实现,JWT,验证,通过,Istio,配置,就,能,实现,而且,还,能,把,JWT,的,claim,传递,给,后端,服务,很,方便。
比如,证书管理,Istio,默认,会,自动,为,服务,生成,和,轮换,证书,实现,mTLS,不用,手动,管理,证书,很,方便,但是,也,可以,自定义,证书,比如,用,自己,的,CA,或者,用,cert-manager,来,管理,证书,很,灵活,而且,Istio,的,证书,自动,轮换,功能,能,避免,证书,过期,导致,的,问题,很,有用。
三、Linkerd进阶技巧
再说说,Linkerd,的,一些,进阶,技巧,虽然,Linkerd,比,Istio,简单,但是,也,有,一些,很,有用,的,技巧。
1. 服务配置文件(Service Profile)
Linkerd,有,一个,很,有用,的,功能,叫,Service Profile,服务,配置,文件,能,为,每个,服务,定义,路由,规则,重试,策略,超时,策略,等等,不用,改,应用,代码,通过,配置,就,能,实现,很,方便。
比如,可以,用,Service Profile,定义,某个,接口,的,超时,时间,是,5秒,重试,2次,或者,定义,某个,接口,的,响应,分类,把,某些,响应,码,算,成功,某些,算,失败,这样,Linkerd,的,指标,和,监控,就,能,更,准确,地,反映,服务,的,真实,情况,很,有用。
而且,Service Profile,还,支持,流量,拆分,功能,能,实现,灰度,发布,和,A/B测试,把,流量,按,比例,分配,到,不同,版本,的,服务,很,方便。
2. Tap功能
Linkerd,有,一个,很,好用,的,功能,叫,Tap,能,实时,查看,服务,之间,的,请求,和,响应,情况,类似,tcpdump,但是,是,针对,服务,网格,的,能,看到,请求,的,来源,目标,路径,方法,状态码,延迟,等等,信息,很,适合,排查,问题。
比如,当,某个,服务,出现,问题,的,时候,可以,用,linkerd tap,命令,实时,查看,这个,服务,的,所有,请求,看看,是,哪些,请求,出,了,问题,延迟,多少,状态码,多少,等等,能,快速,定位,问题,很,方便,而且,还,能,用,各种,过滤,条件,比如,按,来源,服务,目标,服务,路径,方法,等等,过滤,只,看,关心,的,请求,很,灵活。
3. 自动注入和选择性注入
Linkerd,也,支持,自动,注入,Sidecar,和,Istio,类似,通过,命名空间,的,annotation,来,控制,是否,自动,注入,而且,也,支持,选择性,注入,通过,Pod,的,annotation,来,控制,某个,Pod,是否,注入,Sidecar,很,方便。
而且,Linkerd,的,注入,比,Istio,更,轻量,更快,因为,Linkerd,的,Sidecar,更,小,启动,更快,注入,的,开销,更,小,对,应用,启动,的,影响,更,小。
4. 多集群支持
Linkerd,也,支持,多,集群,服务,网格,能,把,多个,Kubernetes,集群,组成,一个,统一,的,服务,网格,服务,之间,能,跨,集群,调用,很,方便,而且,Linkerd,的,多,集群,支持,比,Istio,更,简单,更,轻量,配置,也,更,容易,很,适合,需要,多,集群,部署,的,场景。
而且,Linkerd,的,多,集群,支持,还,支持,故障,转移,当,某个,集群,的,服务,出现,问题,的,时候,能,自动,把,流量,切换,到,其他,集群,的,服务,提高,系统,的,可用性,和,容灾,能力,很,有用。
四、服务网格使用的一些通用技巧
最后,说说,服务,网格,使用,的,一些,通用,技巧,不管,用,哪个,服务,网格,都,适用。
1. 渐进式 adoption
服务,网格,不要,一上来,就,全量,上,要,渐进式,地,adoption,先,从,少数,非核心,服务,开始,试用,熟悉,服务,网格,的,功能,和,操作,积累,经验,然后,再,慢慢,扩大,范围,直到,全量,上,这样,能,降低,风险,避免,一上来,就,出,大,问题,影响,业务。
而且,渐进式,adoption,也,能,让,团队,慢慢,学习,和,适应,服务,网格,的,工作流,不会,一下子,太,大,变化,导致,不,适应,出,问题。
2. 性能基准测试
在,上,服务,网格,之前,要,做,性能,基准,测试,了解,服务,网格,带来,的,性能,开销,比如,延迟,增加,了,多少,CPU,和,内存,消耗,增加,了,多少,等等,这样,能,评估,服务,网格,对,系统,性能,的,影响,提前,做,容量,规划,避免,上,了,之后,才,发现,性能,不,够,影响,业务。
而且,上,了,服务,网格,之后,也,要,持续,做,性能,监控,和,基准,测试,及时,发现,性能,问题,优化,配置,保证,系统,性能。
3. 故障演练
上,了,服务,网格,之后,要,定期,做,故障,演练,测试,系统,的,容错,能力,和,弹性,比如,模拟,某个,服务,挂,了,看看,系统,能不能,自动,熔断,故障,转移,不,影响,其他,服务,模拟,网络,延迟,和,丢包,看看,系统,的,表现,等等,通过,故障,演练,能,发现,系统,的,脆弱点,及时,优化,提高,系统,的,稳定性。
服务,网格,本身,就,提供,了,很多,容错,功能,比如,熔断,重试,超时,故障,注入,等等,能,帮助,做,故障,演练,很,方便。
4. 文档和培训
服务,网格,是,比较,新,的,技术,团队,成员,可能,不,熟悉,所以,要,写,好,文档,对,团队,成员,进行,培训,让,大家,都,了解,服务,网格,的,基本,概念,工作,原理,操作,方法,常见,问题,排查,等等,这样,能,减少,因为,不,熟悉,导致,的,误操作,和,问题,也,能,提高,团队,的,整体,能力。
而且,要,建立,服务,网格,的,操作,规范,和,流程,比如,怎么,配置,路由,怎么,灰度,发布,怎么,排查,问题,等等,都,要有,明确,的,规范,和,流程,让,大家,按,规范,操作,减少,出错。
5. 监控和告警
服务,网格,本身,就,提供,了,很,强,的,可观测,性,但是,还是,要,建立,完善,的,监控,和,告警,体系,监控,服务,网格,本身,的,健康,状态,比如,控制面,的,健康,数据面,的,健康,资源,使用,情况,等等,也要,监控,服务,的,指标,比如,请求,量,延迟,错误率,等等,有,异常,就,及时,告警,通知,相关,人员,处理,保证,系统,稳定。
而且,要,把,服务,网格,的,监控,和,现,有的,监控,体系,集成,比如,Prometheus,Grafana,告警,系统,等等,统一,管理,不要,形成,监控,孤岛。
五、写在最后
服务,网格,是,微服务,架构,下,很,重要,的,基础设施,能,带来,很多,好处,但是,也,比较,复杂,需要,一定,的,学习,和,实践,才能,用好,发挥,它,的,价值。
今天,分享,的,这些,服务,网格,对比,和,进阶,技巧,都是,我,这,一年,多,实际,使用,服务,网格,积累,的,经验,希望,能,帮,到,正在,用,或者,准备,用,服务,网格,的,朋友,让,大家,少,走,弯路,更快,地,落地,服务,网格。
当然,服务,网格,的,技术,也,在,快速,发展,新,的,功能,和,工具,不断,出现,我,分享,的,这些,内容,也,可能,会,过时,大家,要,保持,学习,的,心态,关注,服务,网格,的,最新,发展,不断,更新,自己,的,知识。
而且,服务,网格,也,不是,银弹,不是,所有,团队,都,适合,用,服务,网格,如果,团队,小,服务,少,通信,不,复杂,用,传统,的,方式,也,没问题,不一定,要,上,服务,网格,不要,为了,技术,而,技术,要,根据,实际,需求,选择,适合,的,方案。
最后,希望,大家,都,能,顺利,落地,服务,网格,提升,微服务,架构,的,稳定性,和,可观测,性,也,欢迎,大家,在,评论,区,分享,你们,使用,服务,网格,的,经验,和,技巧,一起,交流,一起,进步。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录