Spring Cloud 和K8S都声称是微服务最好的产品,但是它们有很大的不同。本文简要介绍两个平台是如何交付MSA(微服务架构),它们擅长哪些领域,以及最佳解决方案。

背景

创建弹性可扩展的微服务系统需要使用工具集中管理,Spring Cloud同时实现了业务逻辑(统计,账户,通知)和基础服务设施(日志分析,配置服务器,服务发现,身份认证)。下图描述了Spring Cloud的MSA方案。
在这里插入图片描述

上图涵盖了系统运行时的方方面面,但是没有包括打包,CI,自动伸缩,HA以及自恢复等。这些在MSA的世界里也是非常重要的。

微服务需要考虑的问题

从微服务需要解决的问题来入手,对K8S和Spring Cloud进行对比,MSA因为模块化和低耦合等特点收到青睐,但付出的代价是需要开发出一个在分布式系统中去管理这些微服务的工具,一个解决所有分布式问题的工具。

在这里插入图片描述
上面可以看到微服务需要考虑的问题,下面分析两种技术对上面问题的解决方法。

对比

在这里插入图片描述
从图中可以得出三点结论:

  1. Spring Cloud 有处理所有运行时问题且良好集成的Java库作为程序栈的一部分。因此,微服务本身具备服务发现,LB,配置更新等功能。所有的任务都在JVM中被管理。
  2. K8S是跨平台的,所有语言使用通用模式去处理分布式问题。上面LB之类的服务都是在程序栈之外实现的。应用不需要引入任何库,使用任何语言编写。
  3. 这两个方案不是互斥的,可以互补组合出一个最佳方案。

微服务需求

为了明确表示出每个项目的范围,下表自底向上描述了两个项目所能处理的范围

在这里插入图片描述
一些情况下,两个项目使用不同方案处理相同问题,但是也有一些很适合组合方案的地方。比如Spring boot提供Maven插件可以构建应用包。这样,和Docker&K8S的声明式部署和调度能力相结合,使得微服务实现极为方便。

优劣对比

在这里插入图片描述
从学习曲线上来说,Spring boot比较好学,而且对开发者友好。
K8S则需要学习很多运维方面的东西,从运维角度来思考项目部署,适合大型公司。但毫无疑问的是,K8S更加强大,
同时也需要更强大的技巧。

方案组合

在这里插入图片描述
Spring Boot开发应用打包成Docker镜像,由K8S去管理Docker镜像。
这个方案是由下表得出:
绿色代表Spring提供的组件,蓝色代表K8S,红色代表其他。
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐