当前位置: 华文星空 > 汽车

springboot+sidecar+kubernetes 能否取代springcloud体系?

2020-10-22汽车

在讲能不能替换之前,我们先看看 Spring Cloud 是什么

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

我们可以看出,Spring Cloud 是一套微服务框架,和部署形态无关,事实上,你的整个Spring Cloud 是完全可以部署到Kubernetes中。

然后我们再看下, sidecar+kubernetes 架构 是否就是Istio之类的Service Mesh

我觉得包括Service Mesh,但绝不仅于此。sidecar+kubernetes 架构 真正应该是mecha架构。如下图:

通过上图我们可以清晰看出,未来的sidecar 不仅仅包括envoy,同时包括其他公共业务逻辑的模块,例如dapr。

那么接下我们看看能不能完全取代?

首先我们看看Istio等Service Mesh能解决什么?

通过负载均衡、服务间的身份验证、监控等方法,Istio 可以轻松地创建一个已经部署了服务的网络,而服务的代码只需很少更改甚至无需更改。通过在整个环境中部署一个特殊的 sidecar 代理为服务添加 Istio 的支持,而代理会拦截微服务之间的所有网络通信,然后使用其控制平面的功能来配置和管理 Istio,这包括:

  • 为 HTTP、gRPC、WebSocket 和 TCP 流量自动负载均衡。
  • 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。
  • 可插拔的策略层和配置 API,支持访问控制、速率限制和配额。
  • 集群内(包括集群的入口和出口)所有流量的自动化度量、日志记录和追踪。
  • 在具有强大的基于身份验证和授权的集群中实现安全的服务间通信。
  • 我们可以看出,Service Mesh 已经提供了大部分Spring Cloud 提供的功能了。诸如服务发现注册、配置中心、负载均衡、断路器、数据监控等。

    但是消息总线之类的偏业务的功能,Service Mesh 并不能解决。此时Dapr出场了。

    Dapr是一个开源,可移植的,事件驱动的运行时,使开发人员可以轻松构建在云和边缘上运行的弹性,微服务架构的无状态和有状态应用程序。 Dapr包含所有编程语言和开发人员框架,并简化了构建应用程序(例如电子商务示例)的过程。

    Dapr 提供了一些常用的业务相关的功能块。比如:

  • 服务调用 - 弹性的服务到服务调用使方法调用(包括重试)可以在支持的托管环境中运行的任何远程服务上进行。
  • 状态管理 - 通过对键/值对的状态管理,可以轻松地编写长期运行,高可用的有状态服务以及同一应用程序中的无状态服务。状态存储是可插拔的,并且可以包括Azure Cosmos或Redis,以及组件路线图上的其他内容(例如AWS DynamoDB)。
  • 在服务之间发布和订阅消息传递 - 采用事件驱动的体系结构解决服务之间发布事件和订阅主题,以简化水平可伸缩性并使它们能够应对故障。
  • 事件驱动的资源绑定 - 资源绑定和触发器通过在事件驱动的体系结构上进一步构建规模,从而通过从任何外部资源(例如数据库,队列,文件系统,blob存储,webhooks等)接收事件或向其发送事件来实现规模和弹性。例如,可以触发代码通过Azure EventHub服务上的消息,然后将数据写入Azure CosmosDB。
  • 虚拟atcor - 种无状态和有状态对象的模式,通过方法和状态封装使并发变得简单。 Dapr在其虚拟actor运行时中提供了许多功能,包括并发,状态,用于actor激活/停用的生命周期管理以及计时器和提醒以唤醒actor。
  • 看到这里,我们基本上可以得出,Dapr 侧重于业务功能。

    所以 sidecar+kubernetes 形态的mecha架构完全可以取代Spring Cloud。 而且具备更多优势:

  • 更加云原生,和kubernetes结合更好。
  • 业务代码无需集成sdk,这样决定了sdk升级会更加方便,降低了耦合。