当前位置: 首页 > 科技观察

这篇文章告诉你如何在Istio和SpringCloud之间做出选择

时间:2023-03-20 19:56:51 科技观察

相信了解SpringCloud的朋友在第一次接触Istio的时候会有一个疑问:Istio和springcloud太相似了,都可以提供服务发现以及负余额、限流、链接跟踪、鉴权等微服务治理方式,那么两者的主要区别是什么?本文将帮助您了解两者之间的区别。如果您不了解微服务和ServiceMesh,请忽略本文。Istio概述Istio是一个开源的服务网格(ServiceMesh),它透明地分层到现有的分布式应用程序上。Istio的强大功能提供了一种统一且更有效的方式来保护、连接和监控服务。Istio是实现负载均衡、服务到服务身份验证和监控的途径——几乎不需要更改服务代码。其强大的控制平面带来了重要的功能,包括:使用TLS加密的集群内安全的服务到服务通信、强身份验证和授权。HTTP、gRPC、WebSocket和TCP流量的自动负载平衡。通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。支持访问控制、速率限制和配额的可插入策略层和配置API。自动测量、记录和跟踪集群内的所有流量,包括集群入口和出口。SpringCloud概述SpringCloud为开发人员提供了快速构建分布式系统中一些通用模式(例如,配置管理、服务发现、断路器、智能路由、微代理、控制总线)的工具。涉及的主要组件包括:Eureka:注册中心Zuul:服务网关Rbiibon:负载均衡Feign:服务调用Hystrix:fuseIstio和SpringCloud的区别你会发现Istio和springcloud都可以提供服务发现,负截断平衡,限流、链接跟踪、鉴权等微服务治理方式,那么两者的主要区别是什么?1.Istio使用强大的Envoy服务代理扩展Kubernetes。Kubernetes本身是一个运维平台,而Springcloud只是一个开发框架。因此,注定Istio在运维层面更胜一筹。下图说明了kubernetes与SpringCloud的区别Istio通过K8SAPI收集Service信息接管后续工作,并将流量转发控制权交给C++开发的Envoy。Envoy是Istio的sidecar。所以Istio更注重运维,Springcloud更注重开发;2.Istio支持多种语言(Istio实现了ServiceMesh,ServiceMesh的核心是改变提供通信和服务治理能力的方式。通过实现这些能力从各种语言业务的实现中解耦,下沉到基础设施层面,以更通用和标准化的方式提供,屏蔽不同语言和平台的差异,有利于通信和服务治理能力的迭代和创新,让业务实现更便捷。ServiceMesh避免了重复构建多语言服务治理,通过ServiceMesh语言无关的通信和服务治理能力,帮助提升多语言技术栈的效率);SpringCloud系统的缺点是语言只能指定Java;3、个人认为最重要的是springcloud是侵入式微服务,而Istio是非侵入式微服务。在Istio中,服务发现、注册、调用、负载均衡、降级断路器隔离、网关都是非侵入式的,不需要程序员关心,不需要添加依赖和注解。从下图可以更清楚的看出Istio和springcloud的区别。看到这里,大家就会认为Istio和SpringCloud的比较,Istio会赢!因为Istio的出现为微服务架构减轻了很多负担,开发者无需关心服务调用的超时、重试、限速等实现,自动保证服务间的安全和授权;集群管理员也可以非常方便的发布应用(AB测试和灰度发布),并且可以清楚的看到整个集群的运行状态。但这并不意味着您可以高枕无忧地使用Istio。Istio只是将原本分散在应用内部的复杂性抽象出来,放在一个统一的地方,并没有让原有的复杂性消失。所以我们需要维护Istio整个集群,而Istio的架构比较复杂,一般需要基于kubernetes。这两个系统都比较复杂,它们的稳定性和性能会影响到整个集群。因此,在采用Isito之前,必须制定明确的计划,权衡其带来的收益是否远大于维护它的额外成本。相关人才需要对全网、kubernetes、Istio有更深入的了解。下图对Istio和springcloud做一个总结。你可以自己决定选择哪个框架。