如果你是在一个中小型项目中应用Spring Cloud,那么你不需要太多的改造和适配,就可以实现微服务的基本功能。但是如果是在大型项目中实践微服务,可能会发现需要处理的问题还是比较多,尤其是项目中老代码比较多,没办法全部直接升级到Spring Boot框架下开发的话,你会非常希望能有一个侵入性更低的方案来实施微服务架构。在这种场景下,Service Mesh将会成为你的最佳选择,经过一段时间的发展,目前Service Mesh这个概念已经开始逐步被大家了解和认知。同时,一些Service Mesh的实现方案也逐步成熟和落地,例如Istio、Linkerd、Envoy等。在本系列文章的下一篇中,将为大家对Service Mesh概念做一个系统的介绍。但是在了解Service Mesh概念之前,还是建议大家先对微服务和Spring Cloud这些概念和框架有一个深入的了解,这样才能体会到应用Service Mesh的价值和意义。

Spring Cloud与Dubbo

网上关于Spring Cloud和Dubbo对比的文章很多,大多数对比结果都是Spring Cloud压倒性优势战胜Dubbo,下表是对Dubbo和Spring Cloud做的一个基础功能的对比:

实际上,Dubbo的关注点在于服务治理,并不能算是一个真正的微服务框架。包括目前在开发中的Dubbo 3.0,也不能完整覆盖微服务的各项功能需求。而Spring Cloud一方面是针对微服务而设计,另外一方面Spring Cloud是通过集成各种组件的方式来实现微服务,因此理论上可以集成目前业内的绝大多数的微服务相关组件,从而实现微服务的全部功能。

而对Dubbo而言,如果一定要应用到微服务的使用场景中的话,上表中欠缺的大多数功能都可以通过集成第三方应用和组件的方式来实现,跟Spring Cloud相比主要的缺陷在于集成过程中的便利性和兼容性等问题。

Spring Cloud与Docker

虽然网上也有很多文章写到如何使用Docker来实现微服务,但是事实上单独使用Docker是没办法完整的实现微服务的所有功能的。在实际上微服务架构中,Spring Cloud和Docker更多的是一种协作的关系,而不是一种竞争的关系。通过Docker容器化技术,可以更好的解决引入Spring Cloud微服务后带来的部署和运维的复杂性。

Spring Cloud生态圈中的Pivotal Cloud Foundry(PCF)作为PaaS实现,也提供一些类似于Docker的功能支持,但是无论上功能上还是易用性上和Docker还是存在比较大的差异。Pivotal Cloud Foundry和Docker之间的关系更多的是一种兼容关系,而不是竞争关系,Pivotal Cloud Foundry的主要竞争对手是Red Hat的OpenShift。目前,Pivotal Cloud Foundry支持的IaaS包括:AWS、AZURE、GCP、vSphere、OpenStack等。

Spring Cloud与Kubernetes

网上也有一些“Spring Cloud与Kubernetes哪个更好”,“当已经有了Kubernetes之后,还需要使用Spring Cloud么”之类的文章。首先说笔者并不认为Spring Cloud与Kubernetes是竞争关系,但是也不否认二者确实在诸多功能上存在一些重合。下图是对Spring Cloud与Kubernetes在微服务架构中的一些基础功能上的对比:

通过对比可以看出,Spring Cloud和Kubernetes确实存在一些功能上的重合,但是二者的定位其实差别很大。Spring Cloud是一个基于Java语言的微服务开发框架,而Kubernetes是一个针对容器应用的自动化部署、伸缩和管理的开源系统,它兼容多种语言且提供了创建、运行、伸缩以及管理分布式系统的原语。Spring Cloud更多的是面向有Spring开发经验的Java语言开发者,而Kubernetes不是一个针对开发者的平台,它的目的是供有DevOps思想的IT人员使用。

为了区分Spring Cloud和Kubernetes两个项目的范围,下面这张图列出了几乎是端到端的微服务架构需求,从最底层的硬件,到最上层的DevOps和自服务经验,并且列出了如何关联到Spring Cloud和Kubernetes平台。

总结

通过Spring Cloud、Docker和Kubernetes的组合,可以构建更加完整和强大的微服务架构程序。通过三者的整合,使用Spring Boot提供应用的打包,Docker和Kubernetes提供应用的部署和调度。Spring Cloud通过Hystrix线程池提供应用内的隔离,而Kubernetes通过资源、进程和命名空间来提供隔离。Spring Cloud为每个微服务提供健康终端,而Kubernetes执行健康检查,且把流量导到健康服务。Spring Cloud外部化配置并更新它们,而Kubernetes分发配置到每个微服务。

对于一名开发人员或者架构师来说,想要精通微服务设计与开发,能够在大中型项目中应用微服务架构,单纯掌握Spring Cloud是远远不够的,Docker和Kubernetes等都是需要学习和掌握的内容。同时,由于采用微服务架构后带来了分布式的相关问题,对于分布式系统理论也必须有一定的了解。当然,最重要的还是对系统业务的深入理解,对整体业务进行合理的规划和拆分,才能真正行之有效的应用微服务架构,构建高效、健壮、灵活、可扩展的微服务应用。

浅谈服务治理、微服务与Service Mesh(二): Spring Cloud从入门到精通到放弃

Spring Could与Dubbo、Docker、K8S的更多相关文章

  1. Spring Boot + Docker + K8S 简单示例

    前言 最近看了看k8s,感觉用这个管理docker确实比自己写一坨脚本进步太多了,简直不是一个次原的东西. 看着k8s的官方文档随手写了个小Demo,一个基于k8s的spring boot服务. 代码 ...

  2. Spring Cloud介绍 Spring Cloud与Dubbo对比

    spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状 ...

  3. 朱晔和你聊Spring系列S1E11:小测Spring Cloud Kubernetes @ 阿里云K8S

    有关Spring Cloud Kubernates(以下简称SCK)详见https://github.com/spring-cloud/spring-cloud-kubernetes,在本文中我们主要 ...

  4. Dubbo 在 K8s 下的思考

    作者 | 曹胜利  Apache Dubbo PMC 导读:Dubbo 作为高性能 Java RPC 框架的刻板印象早已深入人心,在 Cloud Native 的架构选型上,Spring Cloud ...

  5. spring boot-18.使用dubbo发布分布式服务

    我们新建两个项目分别模拟服务的提供者和服务的消费者,spring boot 集成dubbo主要分为以下几个步骤: 1.安装zookeeper 推荐使用docker 安装,使用以下几个命令即可完成 (1 ...

  6. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...

  7. docker k8s 1.3.8 + flannel

    docker k8s + flannel kubernetes 是谷歌开源的 docker 集群管理解决方案. 项目地址: http://kubernetes.io/ 测试环境: node-1: 10 ...

  8. spring项目中dubbo相关的配置文件出现红叉的问题

    近来在eclipse中导入了一个web项目,但是发现项目上有红色的叉号. 原来是spring中关于dubbo的配置文件报错了. Multiple annotations found at this l ...

  9. spring boot hello and docker

    主要是想试下spring boot运行在docker里的感觉, 小试牛刀   :) 这是原文,参考一下:  https://spring.io/guides/gs/spring-boot-docker ...

随机推荐

  1. Linux学习笔记之Linux最小化安装启动后如何配置

    在VM虚拟机中安装CentOS 7 时 有时候顾虑到电脑硬件性能,我们需要最小化安装,而最小化安装后与centos6的版本是有一些差异的,接下来我们就对刚安装好的最小化centos7做一些操作,来世我 ...

  2. Python3.x:函数定义

    Python3.x:函数定义 1,函数定义: def 函数名称([参数1,参数2,参数3......]): 执行语句 2,实例一(不带参数和没返回值): def helloWorld(): print ...

  3. Rabbitmq安装、集群与高可用配置

    历史: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多 ...

  4. bzoj 2818 gcd 线性欧拉函数

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 给定整数N,求1< ...

  5. python 递归求阶乘

    #用递归函数求 n 阶乘的值 def factorial(i): : else: )# sum=n*(n-)!所以直接调用自身 n=int(input('请输入阶乘数:')) ): print('%d ...

  6. 树状数组 Binary Indexed Tree/Fenwick Tree

    2018-03-25 17:29:29 树状数组是一个比较小众的数据结构,主要应用领域是快速的对mutable array进行区间求和. 对于一般的一维情况下的区间和问题,一般有以下两种解法: 1)D ...

  7. express 调优的一个过程和心得,不错的文章

    Netflix的软件工程师Yunong Xiao最近在公司的技术博客上写了一篇文章,分析了他所在的团队在将Netflix网站UI转移到Node.js上时遇到的延迟问题.在文章中他描述了找到问题根本原因 ...

  8. 安装完Linux Mint后,发现系统中竟没有中文输入法

    安装完Linux Mint后,发现系统中竟没有中文输入法,语言支持之后自动更新过程中有些安装包下载失败. 可以采取下面的方法安装上中文输入法. 1. 安装iBus: sudo add-apt-repo ...

  9. 记一次生产环境axis2服务特别慢的问题。

    情况如下: 某服务,在测试环境测试的时候整个响应过程也就0.5s左右,测试环境和生产环境axis2版本一致,tomcat版本一致,但是生产环境需要差不多20S. 后来,越来越慢,导致服务一起来,整个生 ...

  10. [转载]Java抽象类和接口的学习

    http://android.blog.51cto.com/268543/385282/ 抽象类 abstract class     包含抽象方法的类,叫抽象类.而抽象的概念就是抽象出共同属性:成员 ...