用于微服务的Spring Cloud与Kubernetes相比
用于微服务的Spring Cloud与Kubernetes相比
译文,原文地址:https://developers.redhat.com/blog/2016/12/09/spring-cloud-for-microservices-compared-to-kubernetes/
背景故事
微服务问题
技术制图
-
Spring Cloud具有丰富的集成良好的Java库,可以解决作为应用程序堆栈一部分的所有运行时问题。因此,微服务本身具有库和运行时代理,可以进行客户端服务发现,负载平衡,配置更新,度量跟踪等。单例集群服务,批处理作业等模式也在JVM中进行管理。
-
Kubernetes是多语言,不仅仅针对Java的平台,而是针对所有语言方式解决通用的分布式计算挑战。它在应用程序堆栈之外的平台级别上提供配置管理,服务发现,负载平衡,跟踪,度量,单例,预定作业的服务。应用程序不需要任何用于客户端逻辑的库或代理,它可以用任何语言编写。
-
在某些领域,两个平台都依赖于类似的第三方工具。例如ELK和EFK堆栈,跟踪库等。
-
一些库如Hystrix,Spring Boot在这两种环境中同样有用。在某些领域,两个平台都是互补的,可以组合在一起以创建更强大的解决方案(KubeFlix和Spring Cloud Kubernetes就是这样的例子)。
微服务要求
长处和短处
Spring Cloud
优势
-
Spring Platform自身提供的统一编程模型,以及Spring Boot的快速应用程序创建功能,为开发人员提供了出色的微服务开发体验。例如,只需很少的注释就可以创建一个配置服务器,而更少的注释可以让客户端库配置您的服务。
-
有大量的库可以解决大多数运行时问题。由于所有库都是用的Java编写的,因此它提供了多种功能,更好的控制和微调选项。
-
不同的Spring Cloud库彼此很好地集成在一起。例如,Feign客户端也将使用Hystrix进行电路中断,而Ribbon则用于负载平衡请求。一切都是注释驱动,易于开发,感觉像Java开发人员的天堂。
弱点
-
Spring Cloud的一个主要优点也是它的缺点 – 它仅限于Java .MSA的强大动力是能够需要时更改技术堆栈,库甚至语言。Spring Cloud无法做到这一点。如果您想使用Spring Cloud / Netflix OSS基础架构服务,例如配置管理,服务发现,负载平衡,那么解决方案并不优雅。在Netflix的普拉纳的项目实现了跨斗模式,以公开的基于Java的的客户端库通过HTTP,使其可能写在非JVM语言应用在NetflixOSS生态系统中存在,但它是不是很优雅。此外,由于我写了这篇文章,匹维托宣布了一个名为SteelToe的新酷项目,它也允许从净客户端使用服务发现和配置服务器服务。
-
没有为Java的人员开发责任太多关心Java的状语从句:应用程序来处理。每个微服务都需要运行各种客户端来进行配置检索,服务发现和负载平衡。设置它们很容易,但这并不会将运行时依赖性的构建时间隐藏到环境中。例如,我可以使用@EnableConfigServer创建一个配置服务器容易注释,但这只是快乐的道路。每次我想运行单个微服务时,我都需要启动并运行Config Server 。对于受控环境,我必须考虑使用配置服务器高度可用,并且因为它可以由Git或Svn支持,所以我需要共享文件系统。同样,对于服务发现,我需要首先启动Eureka Server。对于受控环境,我需要在每个AZ等上集中多个实例。感觉就像Java的开发人员一样,除了实现所有功能服务之外,我还必须构建和管理一个不重要的微服务平台。
-
单独的Spring Cloud在微服务之旅中的范围较短,您还需要考虑自动部署,调度,资源管理,流程隔离,自我修复,构建管道等,以获得完整的微服务体验。对于这一点,我认为将Spring Cloud单独与Kubernetes进行比较是不公平的,Spring Cloud + Cloud Foundry(或Docker Swarm)和Kubernetes之间的比较更公平。但这也意味着,对于完整的端到端微服务体验,Spring Cloud必须补充类似Kubernetes本身的东西。
Kubernetes
优势
-
Kubernetes的英文一个多语言状语从句:通用容器管理平台个人文库,能够运行云原生和传统的容器化应用程序。它提供的服务(如配置管理,服务发现,负载平衡,指标收集,日志聚合)可以通过各种语言使用。这允许组织中的一个平台可供多个团队(包括使用弹簧框架的Java的开发人员)使用并用于多种目的:应用程序开发,测试环境,构建环境(运行源代码控制系统,构建服务器,工件存储库),等等
-
与Spring Cloud相比,Kubernetes 解决了更广泛的MSA问题。除了提供运行时服务之外,Kubernetes还允许您配置环境,设置资源约束,RBAC,管理应用程序生命周期,启用自动缩放和自我修复(行为就像几乎反一个混乱平台个人文库)。
-
我无法抗拒自己提到Kubernetes技术是基于谷歌15年的研发和管理容器的经验。此外,有近千个提交者,它是Github上上最活跃的开源社区之一。
弱点
-
Kubernetes是多语言,因此它的服务和原语是通用的,并没有针对不同的平台进行优化,例如Spring Cloud for JVM。例如,配置作为环境变量或已安装的文件系统传递给应用程序。它没有Spring Cloud Config提供的精美配置更新功能。
-
Kubernetes仍然是一个相对较新的平台(2岁),仍在它积极开发状语从句:发展。因此,每个版本都添加了许多新功能,这些功能可能难以跟上。好消息是,已经设想了这个,并且API是可扩展和向后兼容的。
两全其美