二、Spring Cloud与微服务

1、什么是Spring Cloud

1.1、Spring Cloud基本概念

Spring cloud 是一个基于 Spring Boot 实现的服务治理工具包,用于微服务架构中管理和协调服务的。Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。有了 Spring Cloud 之后,让微服务架构的落地变得更简单。

1.2、Spring Cloud 常用组件

当我们的项目采用微服务架构之后就会引发一些列的难题需要去解决,如众多微服务的通信地址应该如何管理,微服务之间应该使用何种方式发起调用,微服务故障该如何处理,众多微服务的配置文件如何集中管理等等,Spring Cloud 为这一系列的难题提供了相应的组件来解决,下面我们简单来理解一下 Spring Cloud 最核心的几大组件如如下:

Netflix Eureka 服务注册与发现

当我们的微服务过多的时候,管理服务的通信地址是一个非常麻烦的事情,Eureka就是用来管理微服务的通信地址清单的,有了Eureka之后我们通过服务的名字就能实现服务的调用。

Netflix Ribbon\Feign : 客户端负载均衡

Ribbon和Feign都是客户端负载均衡器,它的作用是在服务发生调用的时候帮我们将请求按照某种规则分发到多个目标服务器上,简单理解就是用来解决微服务之间的通信问题。

Netflix Hystrix :断路器

微服务的调用是非常复杂的,有的时候一个请求需要很多的微服务共同完成,那么一旦某个服务发生故障,导致整个调用链上的微服务全都出现异常,甚至导致整个微服务架构瘫痪。Hystrix就是用来解决微服务故障,保护微服务安全的组件。

Netflix Zuul : 服务网关

zuul作为服务网关,我们可以把它看作是微服务的大门,所有的请求都需要经过zuul之后才能到达目标服务,根据这一特性,我们可以把微服务公共的事情交给zuul统一处理,如:用户鉴权,请求监控等。

Spring Cloud Config :分布式配置

微服务架构中的服务实例非常的多,服务的配置文件分散在每个服务中,每次修改服务的配置文件和重新服务实例都是一个很麻烦的工作,Spring Cloud Config作为分布式配置管理中心就是用来统一的管理服务的配置文件。

Spring Cloud Bus : 消息总线

消息总线是在微服务中给各个微服务广播消息的一个组件,我们使用消息总线构建一个消息中心,其他微服务来接入到消息中心,当消息总线发起消息,接入的微服务都可以收到消息从而进行消费。

Spring Cloud sleuth :微服务链路追踪

当我们的应用采用微服务架构之后,后台可能有几十个甚至几百个服务在支撑,一个请求请求可能需要多次的服务调用最后才能完成,链路追踪的作用就是来监控维护之间的调用关系,让程序员方便直观的感受到一个请求经历了哪些微服务,以及服务的请求时间,是否有异常等。

1.3、Spring Cloud的版本

SpringCloud是基于SpringBoot的,所以两者的jar包都需要导入,需要注意的是SprinbCloud的版本需要和SpringBoot的版本兼容,本文章采用的SpringBoot版本是2.0.5.RELEASE , SpringCloud的版本是Finchley.SR1**。下面是版本兼容图:

Release Train Boot Version
Hoxton 2.2.x
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x

2、服务通讯协议

在微服务中服务间通过网络进行通信,那么服务间的远程调用方式有哪些呢?

2.1、RPC

RPC(Remote Produce Call) 远程过程调用,类似的还有 RMI。自定义数据格式,基于原生 TCP 通信,速度快,效率高。早期的 Webservice,现在热门的 Dubbo,都是 RPC 的典型。

2.2、Http

Http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议。也可以用来进行远程服务调用。缺点是消息封装臃肿。 现在热门的Rest风格,就可以通过http协议来实现

我们可以认为SpringCloud就是基于Http协议实现服务之间的通信。

2.3、如何选择

其实我们并不需要刻意去选择该使用RPC或者是Http,如果架构师选择Dubbo作为微服务开发框架,通信方式自然就是RPC,当架构师选择了SpringCloud作为微服务开发框架,那么通信方式自然就是基于Http协议,当然,如果服务的通信方式成为了微服务的性能瓶颈,那么架构师自然需要去考虑更换微服务的通信协议。

3、SpringCloud 与 Dubbo

3.1、Dubbo简介

Dubbo 最早是有阿里巴巴提供的一个服务治理和服务调用框架,现在已经成为 Apache 的顶级项目,Dubbo 跟 SpringCloud 最显著的区别是Dubbo的定位只是一个 RPC 框架,相比SpringCloud 来说它缺少很多功能模块,如:网关,链路追踪等,所以往往在使用 Dubbo 作为微服务开发框架的时候,还需要去配合其他的框架一起使用,如:加入 zookeeper 作为注册中心。

3.2、Spring Cloud 与 Dubbo 的区别

早期在国内做分布式(微服务)应用 Dubbo 是比较热门的框架,被许多互联网公司所采用,并产生了许多衍生版本,如网易,京东,新浪,当当等等,奈何在2014年10月 Dubbo 停止维护,在Dubbo 停更的时间里 Spring Cloud 快速追赶上。在2017年9月,阿里宣布重启 Dubbo 项目,计划对 Dubbo 进行持续更新维护。2018.2月,阿里将 Dubbo 捐献给 Apache 基金会,Dubbo 成为Apache 孵化器项目。

所以当前微服务架构,Dubbo 和 SpringCloud 比较火,另外还有 Thrift、gRPC 等等 。很多人把 SpringCloud 和 Dubbo 进行对比,其实两个框架并没有太大的可比性,因为他们的定位不同。Spring Cloud 是一个完整的微服务解决方案,它提供了微服务各问题的解决方案集合,而Dubbo 是一个高性能的 RPC 框架,它有着很多功能的缺失。

定位不一样

SpringCloud 为了微服务的落地提供了一套完整的组件,而 Dubbo 只是一个 RPC 框架,缺失的功能很多。

通讯协议不一样

Dubbo 的通信方式是 RPC,基于原声的 tcp,性能较好,而 SpringCloud 的通信方式基于Http 协议,虽然底层基于 tcp,但是 Http 的封装过于臃肿,但是使用 Http 好处在于互相通信的两个服务可以使用不同的编程语言去编写,只要他们都支持 Http 通信即可互相调用,而 Dubbo 只支持 Java,当然 Dubbo 交给 Apache 维护之后做了升级,Dubbo 在以后不仅仅支持 Java。

背景都很强大

Dubbo 背靠阿里和 Apache,淘宝就是使用的 Dubbo 来开发经理过双" 11 "期间的高并发大流量检验,可以说是非常的稳定和成熟,SpringCloud 是 Spring 家族的成员,严格遵循 Martin Fowler 提出的微服务规范,可以认为 SpringCloud 是微服务架构的标准,总之两者背景都很强大,文档完善,社区活跃,所以不管作何选择,都是很有前途的。

开发风格

从开发风格上来讲,Dubbo 官方推荐倾向于使用 Spring xml 配置方式,SpringCloud 是基于SpringBoot 的开发风格,即采用注解的方式进行配置,从开发速度上来说,SpringCloud 具有更高的开发和部署速度。

下面是网上比较流行的Dubbo和Spring Cloud功能对比图:

二、Spring Cloud 极简入门-Spring Cloud简介相关推荐

  1. Spring Cloud 极简入门

    专栏亮点 优势 内容通俗易懂,更适合初学者. 重实操性,专栏包含一个完整的项目实战,通过开发项目掌握技术的实际应用. 案例理论结合,专栏以实际案例为主,更有利于上手应用. 专栏特色 从零讲起,轻松入门 ...

  2. Three.js学习二——Three.js极简入门

    目录 准备开发环境 掌握一些概念性知识 编码测试 创建一个场景(Creating a scene) 创建一个场景 渲染场景 使立方体动起来 结果 准备开发环境 1.一台可用浏览器的带文件系统的电脑: ...

  3. Spring Cloud 整合 seata 实现分布式事务极简入门

    Spring Cloud 整合 seata 实现分布式事务极简入门 seata Spring Cloud 整合 seata 实现分布式事务极简入门 1. 概述 2. 部署nacos 3. 部署seat ...

  4. Spring Boot 极简集成 Shiro

    点击关注公众号,Java干货及时送达 1. 前言 Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理. Shiro有三大核心组件: Subject: ...

  5. 芋道 Apollo 极简入门

    点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2020 超神之路,很肝~ 中文详细注释的开源项目 RP ...

  6. Seata 极简入门

    1. 概述 Seata 是阿里开源的一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务. 1.1 四种事务模式 Seata 目标打造一站式的分布事务的解决方案,最终会提供四种事务 ...

  7. [转载]芋道 Soul 极简入门(国产微服务网关)

    摘要: 原创出处 http://www.iocoder.cn/Soul/install/ 「芋道源码」欢迎转载,保留摘要,谢谢! 由于原著写作时间时间有点久了:有部分类容需要更新,后去个人会再发布文章 ...

  8. Nginx 极简入门教程

    Nginx 极简入门教程 基本介绍 Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP服务. Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第 ...

  9. SkyWalking 极简入门

    1. 概述 1.1 概念 SkyWalking 是什么? FROM http://skywalking.apache.org/ 分布式系统的应用程序性能监视工具,专为微服务.云原生架构和基于容器(Do ...

最新文章

  1. faster-rcnn移植过程中出现错误
  2. SaltStack的salt-ssh使用及LAMP状态设计部署
  3. Java 9中的HTTP / 2支持简介
  4. Git实战(二)原理
  5. lua——alien库实现lua调用C动态链接库(dll、so)
  6. 字符缓冲输入流 BufferedReader java
  7. 迭代DOM集合的几种方法
  8. javascript该怎么学呢?值得收藏的学习Js之路
  9. 初级程序员面试不靠谱指南(四)
  10. FastReport.Net使用:[23]图表(Chart)控件
  11. 基于C#的学生选课管理系统
  12. MD5摘要算法的几种破解方法!
  13. 技术面试官的9大误区
  14. 复选框的全选、全不选、和获取选中的值;
  15. R语言 关于h2o深度学习的一些心得
  16. Ubuntu 20.04 live server版安装(详细版)
  17. 定制office2007静默安装版
  18. IOCTL_SCSI_PASS_THROUGH_DIRECT的使用对设备进行操作
  19. 用代码动态链接图片源
  20. 转载:神国中的两条路(陈鸽)

热门文章

  1. Unity自由涂鸦轨迹检测(VR)
  2. 网络新闻评论观点挖掘系统实现
  3. 化学清洗过程中重金属污染的监测方法
  4. Java大象进冰箱线程_把大象装进冰箱:HTTP传输大文件的方法
  5. 2.5.10 DLPar动态分区(资源迁移)
  6. 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2038 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MDd_DynamicDe
  7. Celoria的板子(last update:20201017)
  8. 华为怎么退出子用户_华为游戏中心怎么退出账号的具体步骤
  9. HTML代码风格检查工具对比
  10. 第一篇博客--记面陌陌科技计算机视觉算法工程师被刷经历(附面试过程中被问倒的一些算法题分析)...