Spring Cloud是一个构建微服务的框架,而 Kubernetes是通过对运行的容器的编排来实现
建微服务的。两者从构建微服务的角度和实现方式有很大的不同,但它们提供了构建微服务
所需的全部功能。从提供的微服务所需的功能上看,两者不分上下,如表
微服务关注点 | Spring Cloud | Kubernetes |
---|---|---|
配置管理 | Config | Kubernetes ConfigMap |
服务发现 | Eureka、Consul、Zookeeper | Kubernetes Services |
负载均衡 | Ribbon | Kubernetes Services |
网关 | Zuul | Kubernetes Services |
分布式追踪 | Spring Cloud Sleuth | Open tracing |
容错 | Hystrix | Kubernetes Health Check |
安全模块 | Spring Cloud Security | — |
分布式日志 | ELK | EFK |
任务管理 | Spring Batch | Kubernetes Jobs |
Spring Cloud通过众多的类库来实现微服务系统所需的各个组件,同时不断集成优秀的优秀的组件,所以 Spring Cou件是非常完善的。 Spring Cloud基于 Spring boot框架,有快速开发、快速部署的优点。对于Java开发者来说,学习 Spring Cloud的成本不高。
Kubernetes在编排上解决微服务的各个功能,例如服务发现、配置管理、负载均衡、容错等。 Kubernetes不局限于Java平台,也不局限于语言,开发者可以自由选择开发语言进行项目开发.
与Kubernetes相比,Spring Cloud具有以下优点。
- 采用Java语言开发,基于 Spring平台,继承了 Spring Boot快速开发的优势,是Java程序员实现微服务的最佳实践。
- Spring Cloud有大量的类库和资源,基本上能解决所有可能出现的问题。
与 Kubernetes比较, Spring Cloud具有以下缺点。
- 依赖于Java语言,不支持跨语言。
- Spring Cloud需要在代码中关注微服务的功能点,例如服务发现、负载均衡等。
Kubernetes则不需要关注这些。
下面介绍 Kubernetes的优点和缺点,优点如下。
- Kubernetes支持多种语言,并且是一个容器管理平台。 Kubernetes使程序容器化,并在容器管理上提供了微服务的功能,例如配置管理、服务发现、负载均衡等。Kubernetes能够被应用于多种场合,例如程序开发、测试环境、创建环境等。
- Kubernetes除了提供基本的构建微服务的功能外,还提供了环境、资源限制、管理应用程序的生命周期的功能。 Kubernetes更像是一个平台,而 Spring Cloud是一个框架。
Kubernetes的缺点如下。
- Kubernetes面向 DevOps人员,普通的开发人员需要学习很多这方面的知识,学习成本非常高。
- Kubernetes仍然是一个相对较新的平台,发展十分迅速。新特性更新得快,所以需要DevOps人员跟进,不断地学习。
Spring Cloud尝试从Java类库来实现微服务的所有功能,而 Kubernetes尝试从容器编排上实现所有的微服务功能,两者的实现角度和方式不一样。个人觉得,两者最终的实现功能和效果上不分胜负,但从实现的方式上来讲, Kubernetes略胜一筹。 Kubernetes面向DevOps人员,学习成本高。 Spring Cloud有很多的类库,以 Spring为基础,继承了 SpringBoot快速开发的优点,为Java程序员开发微服务提供了很好的体验,学习成本也较低。所以二者比较,各有优势。没有最好的框架,也没有最好的工具,关键是要适合业务需求和满足业务场景。
总结:本章首先介绍了微服务应该具备的功能,然后介绍了Spring Cloud和Spring Cloud的基本组件,最后介绍了Spring Cloud与Dubbo、Kubernetes之间的比较,以及它们的优缺点。Spring Cloud作为Java语言的微服务落地框架,有很多的微服务组件。为了循序渐进地学习这些组件,第3、4章将介绍构建微服务前的准备工作,这是学习Spring Cloud组件的基本前提。