微服务Spring Cloud与Kubernetes比较
转 http://www.tuicool.com/articles/VnMf2y3
Spring Cloud或Kubernetes都宣称它们是开发运行微服务的最好环境,哪个更好?答案是两个都是,但他们拥有各自不同的特征方式。
背景故事
最近,Lukyanchikov发表了一篇使用Spring Cloud和Docker建立微服务架构的 文章 。 它给出了如何使用Spring Cloud创建一个简单的基于微服务的系统所需的全面概述。 为构建一个可扩展到数十或数百个服务的伸缩弹性的微服务系统,必须借助具有宽泛的构建时间和运行能力的工具集进行集中管理和管理。 Spring Cloud包括实现功能性服务(如统计服务,帐户服务和通知服务)和支持基础设施服务(如日志分析,配置服务器,服务发现,授权服务)。
这些服务涵盖了系统的运行时各个方面,但不涉及打包,持续集成,扩展,高可用性和自我修复,这在MSA(微服务架构)世界中也非常重要。 假设大多数Java开发人员熟悉Spring Cloud,在本文中,我们将绘制一个平行图,通过解决这些额外的问题,了解Kubernetes与Spring Cloud的关系。
有关MSA的好处是,它有一种架构风格很好理解的好处,微服务可实现强大的模块边界,具有独立的部署和技术多样性。 但代价是开发 分布式系统成本和显著运营开销 。一个关键的成功因素是使用各种工具解决这些问题,
微服务关注点
微服务关注方面有:配置管理、服务发现与负载平衡、弹性和失败冗余、API管理、安全服务、中央集中日志、集中测量、分布式跟踪、调度部署和自动扩展self Healing等几个方面。
根据这些观点,得出Spring Cloud和Kubernetes两个平台映射:
1.配置管理:配置服务器、Consul和Netflix Archaius(Spring Cloud);Kubernetes ConfigMap&Secrets ;
2.服务发现: Netflix Eureka,Hashicorp Consul(Spring Cloud);Kubernetes Service&Ingress Resource;
3.负载平衡:Netflix Ribbon(Spring Cloud);Kubernetes Service
4.API网关:Netflix Zuul(SpringCloud);Kubernetes Service&Ingress Resource
5.安全服务:SpringCloud Security
6.中央集中日志:ELK Stack(LogStash);EFKstack(Fluentd)。
7.集中测量:Netflix Spectator& Atlas;Heapster、Prometheus、Grafana。
8.分布式跟踪:SpringCloud Sleuth,Zipkin;OpenTracing、Zipkin
9.弹性和失败冗余:Netflix Hystrix、Turbine&Ribbon;Kubernetes Health Check&resource isolation
10.自动扩展self Healing:Spring Cloud无;Kubernetes Health Check、SelfHealing、Autoscaling
11.打包 部署和调度部署:Spring Boot;Docker/Rkt、Kubernetes Scheduler&Deployment
12.任务工作管理:Spring Batch;Kubernetes Jobs&Scheduled Jobs
13.单个应用:Spring Cloud Cluster ;Kubernetes Pods
Spring Cloud有一套丰富的集成良好的Java库,作为应用程序栈一部分解决所有运行时问题。 因此,微服务本身通过库和运行时作为代理来执行客户端服务发现,负载平衡,配置更新,度量跟踪等。诸如单例集群服务和批处理作业的模式也在JVM中进行管理。
Kubernetes是多语言的,不仅针对Java平台,并以通用的方式为所有语言解决 分布式计算的挑战。 它提供应用程序栈外部的配置管理,服务发现,负载平衡,跟踪,度量,单例,平台调度作业等平台级别功能。 该应用系统不需要任何库或代理程序用于客户端逻辑,它可以用任何语言编写。
在某些方面,这两个平台都依赖类似的第三方工具。例如,ELK和EFK堆栈,跟踪库等一些库,如Hystrix和Spring Boot,在这两种环境中同样有用。
有些情况下这两个平台是互补的,并且可以结合在一起,创造一个更加强大的解决方案,例如,Spring Boot提供了用于构建单个JAR应用程序包的Maven插件。结合Docker和Kubernetes的声明性部署和调度功能,使微服务运行变得轻而易举。 类似地,Spring Cloud具有应用程序库,用于使用Hystrix(断路器)和Ribbon(用于负载平衡)创建弹性的,容错的微服务。 但是单单这是不够的,当它与Kubernetes的健康检查,进程重新启动和自动扩展功能相结合时,微服务成为一个真正的抗脆弱的系统。
长处和短处
由于两个平台不具有直接的可比性特征,下面是逐项总结其优点和缺点。
Spring Cloud为开发人员提供了快速构建 分布式系统中的一些常见模式的工具,例如配置管理,服务发现,断路器,路由等。它是为Java开发人员使用,构建在Netflix OSS库之上的。
优势
1.Spring Platform提供的统一编程模型和Spring Boot的快速应用程序创建能力为开发人员提供了巨大的微服务开发体验。 例如,使用很少的注释,您可以创建一个配置服务器,并且几乎没有更多的注释,您可以获得客户端库来配置您的服务。
2.有丰富的库选择,覆盖大多数运行时关注。由于所有库都是用Java编写的,它提供了多种功能,更好的控制和精细调整选项。
3.不同的Spring Cloud库彼此完全集成。例如,Feign客户端还将使用Hystrix用于断路器,并且Ribbon用于负载平衡请求。 一切都是注释驱动的,使其易于为Java开发人员开发。
弱点
1.Spring Cloud的一个主要优点是它的缺点 - 它仅限于Java。MSA的强大动力是在需要时交换各种技术栈,库,甚至语言的能力。 只是使用Spring Cloud是不可能的。 如果您想要使用Spring Cloud / Netflix OSS基础架构服务(如配置管理,服务发现或负载平衡),那么解决方案就不那么优雅。 在Netflix的 Prana项目通过基于HTTP暴露Java客户端实现了sidecar模式,使其可能让非JVM语言运行在NetflixOSS生态系统中,但它不是很优雅。
2.Java开发人员关心Java应用程序并需要处理太多与开发无关的事情。每个微服务需要运行各种客户端以进行配置检索,服务发现和负载平衡。虽然很容易设置,但这并不会降低对环境的构建时间和运行时依赖性。例如,开发人员可以使用@EnableConfigServer创建一个配置服务器,但这只是开心的假象。 每当开发人员想要运行单个微服务时,他们需要启动并运行Config Server。对于受控环境,开发人员必须考虑使Config Server高度可用,并且由于它可以由Git或Svn支持,因此它们需要一个共享文件系统。 类似地,对于服务发现,开发人员需要首先启动Eureka服务器。 为了创建一个受控的环境,他们需要在每个AZ上使用多个实例实现集群。像开发人员一样,除了实现所有功能服务之外,Java开发人员还必须构建和管理一个非平凡的微服务平台。
3.Spring Cloud在微服务发展过程只有很短历程,开发人员还需要考虑自动化部署,调度,资源管理,过程隔离,自我修复,构建管道等,以获得完整的微服务体验。 对于这点,我认为这是不公平的比较,应该比较 Spring Cloud + Cloud Foundry (or Docker Swarm) 和Kubernetes。但这也意味着对于一个完整的端到端微服务体验,Spring Cloud必须补充一个像Kubernetes本身这样的应用程序平台。
Kubernetes是一个用于自动化部署,扩展和管理容器化应用程序的开源系统。 它是多种语言并且提供用于供应,运行,扩展和管理 分布式系统的操作系统。
优势
1.Kubernetes是一个多语言和语言不可知的容器管理平台,能够运行云本地和传统的容器化应用程序。其提供的服务(如配置管理,服务发现,负载平衡,测量指标收集和日志聚合)可供各种语言使用。 这允许在一个组织中有一个平台,可以被多个团队(包括使用Spring的Java开发人员)使用,并提供多种用途:应用程序开发,测试环境,构建环境(运行源代码控制系统,构建服务器,工件存储库)等。
2.与Spring Cloud相比,Kubernetes解决了更广泛的MSA问题。 除了提供运行时服务,Kubernetes也可以让你规定的环境中,设置资源限制,RBAC,管理应用程序生命周期,启用自动缩放和自我修复(几乎表现得像一个抗脆弱平台)。
3.Kubernetes技术基于Google 15年的研发经验和管理容器的经验。此外,有近1000个提交者,它是Github上最活跃的开源社区之一。
弱点
1. Kubernetes是多语言的,因此它的服务是通用的,并不针对不同的平台(如Spring Cloud for JVM)进行优化。 例如,配置作为环境变量或安装的文件系统传递到应用程序。 它没有Spring Cloud Config提供的奇特的配置更新功能。
2.Kubernetes不是一个以开发人员为中心的平台。 它旨在由DevOps的IT人员使用。因此,Java开发人员需要学习一些新的概念,并开放学习解决问题的新方法。手动安装高度可用的Kubernetes集群有一个显著操作的开销。
3.Kubernetes仍然是一个相对较新的平台(2岁),它仍然积极发展和成长。因此,每个版本都添加了很多新功能,可能很难跟上。 好消息是,这已经被考虑到,API将是可扩展和向后兼容的。
最好的两个世界
正如你所看到的,这两个平台在某些领域有优势,在其他领域有待改进。 Spring Cloud是一个快速开始的开发者友好平台,而Kubernetes是DevOps友好的,具有更陡峭的学习曲线,但涵盖了更广泛的微服务关注点。
这两个框架涉及不同范围的MSA关注,他们以一种根本不同的方式去实现。 Spring Cloud方法试图解决JVM中的每个MSA挑战,而Kubernetes方法试图通过在平台层面解决为开发人员解决问题。 Spring Cloud在JVM内部非常强大,Kubernetes在管理这些JVM方面功能强大。结合他们,并从两个项目的最好的部分受益。
有了这样的组合,Spring提供了应用程序打包,而Docker和Kubernetes提供了部署和调度。 Spring通过Hystrix线程池提供应用程序防火墙,Kubernetes通过资源,进程和命名空间隔离提供防火墙。Spring为每个微服务提供健康端点,Kubernetes执行健康检查和流量路由到健康的服务。 Spring负责外部化和更新配置,Kubernetes将配置分发到每个微服务。
微服务Spring Cloud与Kubernetes比较的更多相关文章
- 微服务 | Spring Cloud(一):从单体SSM 到 Spring Cloud
系列文章目录 微服务 | Spring Cloud(一):从单体SSM 到 Spring Cloud 目录 系列文章目录 前言 单体式架构 微服务架构 优点 缺点 服务发现与弹性扩展 参考 前言 在微 ...
- 微服务&spring cloud架构系列汇总
为了方便查找,把微服务&微服务架构之spring cloud架构系列文章按时间正序整理了一下,记录如下: 1. 微服务架构之spring cloud 介绍 2. 微服务架构之spring ...
- SpringCloud---消息驱动的微服务---Spring Cloud Stream
1.概述 1.1 Spring Cloud Stream:用来 为微服务应用 构建 消息驱动能力的框架: 可基于SpringBoot来创建独立.可用于生产的Spring应用程序: 使用Sp ...
- Netflix OSS、Spring Cloud还是Kubernetes? 都要吧!
Netflix OSS是由Netflix公司主持开发的一套代码框架和库,目的是解决上了规模之后的分布式系统可能出现的一些有趣问题.对于当今时代的Java开发者们来说,Netflix OSS简直就是在云 ...
- 转 Netflix OSS、Spring Cloud还是Kubernetes? 都要吧!
Netflix OSS.Spring Cloud还是Kubernetes? 都要吧! http://www.infoq.com/cn/articles/netflix-oss-spring-cloud ...
- 10分钟了解微服务、容器和Kubernetes
什么是微服务? 什么是微服务?你应该使用微服务吗?微服务与容器和 Kubernetes 有什么关系?如果这些问题在您的日常生活中不断出现,那么这篇文章适合您. 从根本上说,微服务只是一个运行在服务器或 ...
- 网关服务Spring Cloud Gateway(二)
上一篇文章服务网关 Spring Cloud GateWay 初级篇,介绍了 Spring Cloud Gateway 的相关术语.技术原理,以及如何快速使用 Spring Cloud Gateway ...
- 网关服务Spring Cloud Gateway(一)
Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gateway ,相比之前我们使用的 Zuul(1.x) 它有哪些优势呢?Zuul(1.x) 基于 Servlet,使 ...
- SpringCloud---API网关服务---Spring Cloud Zuul
1.概述 1.1 微服务架构出现的问题 及 解决: 1.1.1 前言 每个微服务应用都提供对外的Restful API服务,它通过F5.Nginx等网络设备或工具软件实现对各个微服务的路由与负载 ...
随机推荐
- 【GISER&&Painter】Chapter02:WebGL中的模型视图变换
上一节我们提到了如何在一张画布上画一个简单几何图形,通过创建画布,获取WebGLRendering上下文,创建一个简单的着色器,然后将一些顶点数据绑定到gl的Buffer中,最后通过绑定buffer数 ...
- c++ 哈希表(hash表)
一.定义 Hash表,也称散列表.一般应用于有大量"动态"的插入(删除)和查找操作的一类问题.(如果是"静态"的,通常可以先对数据排序,查找时就可以用" ...
- 2 cocos2dx 3.0 源码分析-Director
Director 导演类, 这个类在整个引擎中担当着最重要的角色, 先看看它是如何初始化的,它共管理了哪些内容呢? 1初始化- 更新处理Scheduler Scheduler 这个类负责用户 ...
- iOS:第三方数据库文件FMDB的使用
第三方数据库FMDB •FMDB的使用:在sqlite的基础上,将sqlite中的函数进行封装产生的一个数据库文件. –FMDB的好处是对基本C库的封装,方便使用.同时还提供了多线程操作数据库带来的读 ...
- Elasticsearch Groovy任意命令执行漏洞EXP
测试url:http://190.196.67.252:9200/_search?pretty http://191.234.18.14:9200///_search?pretty POST提交 {“ ...
- css整站规划
准备1 css reset /** * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/) * http:/ ...
- tomcat部署java web项目遇到的一些小问题
背景:本人不是Java开发人员,经过四年多的历练,可以说是一枚BI攻城师了吧,最近粗糙的写了一个Portal来集成cognos报表,下面就入正题说一下发布过程中遇到的小问题吧. a:前提:Java w ...
- [Big Data] Week 5 A (Advance)
Question 1 Consider the diagonal matrix M = 1 0 0 0 2 0 0 0 0 . Compute its Moore-Penrose pseudoinve ...
- 给DB2某表增加一个自增长列
如果是MySQL表,那么任务就很简单,一句SQL可以搞定.而DB2表,就要费一点周折了. 首先,我们来看一眼目标表: 这个表,有字段有数据,我们需要做的是,给它加一个唯一性的ID列. 我们可以通过工具 ...
- xmpp 服务器配置 open fire for windows 及 spark 测试
xmpp 服务器配置 open fire for windows 此文章为 XMPP windows服务器配置,使用的是 open fire 3.9.1.exe 1: 下载 open fire ope ...