Java之Spring Cloud概念介绍

文章大纲

一、理解微服务
二、Spring Cloud知识介绍
三、参考资料下载
四、参考文章

一、理解微服务

  我们通过软件架构演进过程来理解什么是微服务,软件架构的发展经历了从单体结构、垂直架构、SOA架构到微服务架构的过程。

1. 单体架构

1.1 特点
(1)所有的功能集成在一个项目工程中。
(2)所有的功能打一个war包部署到服务器。
(3)应用与数据库分开部署。
(4)通过部署应用集群和数据库集群来提高系统的性能。

1.2 优点
(1)项目架构简单,前期开发成本低,周期短,小型项目的首选。

1.3 缺点
(1)全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
(2)系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。
(3)技术栈受限。

2. 垂直架构

2.1 特点
(1)以单体结构规模的项目为单位进行垂直划分项目即将一个大项目拆分成一个一个单体结构项目。
(2)项目与项目之间的存在数据冗余,耦合性较大,比如上图中三个项目都存在客户信息。
(3)项目之间的接口多为数据同步功能,如:数据库之间的数据库,通过网络接口进行数据库同步。

2.2 优点
(1)项目架构简单,前期开发成本低,周期短,小型项目的首选。
(2)通过垂直拆分,原来的单体项目不至于无限扩大。
(3)不同的项目可采用不同的技术。

2.3 缺点
(1)全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
(2)系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。

3. SOA架构

3.1特点
(1)基于SOA的架构思想将重复公用的功能抽取为组件,以服务的方式给各各系统提供服务。
(2)各个项目(系统)与服务之间采用webservice、rpc等方式进行通信。
(3)ESB企业服务总线作为项目与服务之间通信的桥梁。

3.2 优点
(1)将重复的功能抽取为服务,提高开发效率,提高系统的可重用性、可维护性。
(2)可以针对不同服务的特点制定集群及优化方案。
(3)采用ESB减少系统中的接口耦合。

3.3 缺点
(1)系统与服务的界限模糊,不利于开发及维护。
(2)虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。
(3)抽取的服务的粒度过大,系统与服务之间耦合性高。

4. 微服务架构

  为适应企业的业务发展,提高软件研发的生产力,降低软件研发的成本,软件架构也作了升级和优化,将一个独立的系统拆分成若干小的服务,每个小服务运行在不同的进程中,服务与服务之间采用http 轻量协议(比如流行的RESTful)传输数据,每个服务所拥有的功能具有独立性强、高内聚的特点,这样的设计就实现了单个服务的高内聚,服务与服务之间的低耦合效果,这一个一个的小服务就是微服务,基于这种方法设计的系统架构即微服务架构。

4.1 特点
(1)将系统服务层完全独立出来,并将服务层抽取为一个一个的微服务。
(2)微服务遵循单一原则。
(3)微服务之间采用RESTful等轻量协议传输。

4.2 优点
(1)服务拆分粒度更细,有利于资源重复利用,提高开发效率。
(2)可以更加精准的制定每个服务的优化方案,提高系统可维护性。
(3)微服务架构采用去中心化思想,服务之间采用RESTful等轻量协议通信,相比ESB更轻量。
(4)适用于互联网时代,产品迭代周期更短。

4.3 缺点
(1)微服务过多,服务治理成本高,不利于系统维护。
(2)分布式系统开发的技术成本高(容错、分布式事务等),对团队挑战大。

5. SOA架构和微服务架构的区别

  首先SOA和微服务架构一个层面的东西,而对于ESB和微服务网关是一个层面的东西,一个谈到是架构风格和方法,一个谈的是实现工具或组件。

(1)SOA(Service Oriented Architecture)“面向服务的架构”:他是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系列的功能。一个服务 通常以独立的形式存在与操作系统进程中。各个服务之间 通过网络调用。

(2)微服务架构:其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。

微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想

二、Spring Cloud知识介绍

1. 微服务的技术栈

负载均衡,网关路由:高可用、集群部署,校验、请求转发、服务集成。
服务治理:服务注册、发现。
容错:避免雪崩。
监控跟踪:监控资源利用、服务响应、容器资源利用情况。
消息总线:消息队列、异步通信。
配置管理:统一配置管理。

2. Spring Cloud是什么

  Spring Cloud为开发人员构建微服务架构提供了完整的解决方案,SpringCloud是若干个框架的集合,它包括spring-cloud-config、spring-cloud-bus等近20个子项目,它提供了服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等领域的解决方案。

3. Spring Cloud技术栈

微服务的兴起出现了很多优秀的公司和技术:
服务治理:Dubbo(阿里巴巴)、Dubbox(当当)、Eureka(Netflix)等 。
配置管理:Disconf(百度)、QConf(360)、Diamood(淘宝)等 。
服务跟踪:Hydra(京东)、Zipkin(Twitter)、Sleuth(Spring Cloud)等 。

Spring Cloud 提供一站式的微服务架构解决方案,如下图:

4. 为什么使用Spring Cloud

  微服务架构的优点表明它可以提高我们的生产力,但是分布式系统本身的技术成本问题给互联网那些创业型公司不少的挑战,阿里、百度等巨头所提供的微服务技术只是解决其中某个问题,而整合封装这些优秀的技术恐怕是Spring最擅长的领域了,Spring Cloud也正因为此而诞生。
  使用Spring Cloud来构建微服务架构可以省去你整合各家技术的成本,Spring Cloud为我们构建微服务架构提供了一站式的解决方案,就好比当初Spring诞生是为解决EJB企业应用开发的众多问题而提供的一站式轻量级企业应用开发解决方案一样,随着使用Spring Cloud公司数量的增加,相信微服务将被Spring Cloud一统江湖。

5. 服务治理

5.1 什么是服务治理
  微服务架构的缺点中最主要的就是由于微服务数量众多导致维护成本巨大,服务治理为解决此问题而产生的。服务治理的作用是让维护人员从人工维护中解放出来,由服务自维护,微服务作为服务提供方主动向服务治理中心注册,服务的消费方通过服务治理中心查询需要的服务并进行调用。
如下图:

5.2 Spring Cloud Eureka
  Spring Cloud Eureka 是对Netflix公司的Eureka的二次封装,它实现了服务治理的功能,Spring Cloud Eureka提供服务端与客户端,服务端即是服务注册中心,客户端完成服务的注册与发现。服务端和客户端均采用Java语言编写(Eureka支持多语言)。
  如下图显示了Eureka Server与Eureka Client的关系:

5.3 架构

5.4 实际项目流程图

6. 负载均衡

6.1 什么是负载均衡
  负载均衡是微服务架构中必须使用的技术,通过负载均衡来实现系统的高可用、集群扩容等功能。负载均衡可通过硬件设备及软件来实现,硬件比如:F5、Array等 ,软件比如:LVS、Nginx等 。
如下图是负载均衡的架构图:

  用户请求先到达负载均衡器(也相当于一个服务),负载均衡器根据负载均衡算法将请求转发到微服务。负载均衡算法有:轮训、随机、加权轮训、加权随机、地址哈希等方法,负载均衡器维护一份服务列表,根据负载均衡算法将请求转发到相应的微服务上,所以负载均衡可以为微服务集群分担请求,降低系统的压力。

6.2 Spring Cloud Ribbon
  Spring Cloud Ribbon是基于客户端的负载均衡工具,负载均衡分为服务端负载均衡和客户端负载均衡,3.1小节的图形指的是服务端负载均衡,客户端负载均衡与服务端负载均衡的区别在于客户端要维护一份服务列表,Ribbon从Eureka Server获取服务列表,Ribbon根据负载均衡算法直接请求到具体的微服务,中间省去了负载均衡服务。
  如下图是Ribbon负载均衡的流程图:

(1)在消费微服务中使用Ribbon实现负载均衡,Ribbon先从Eureka Server中获取服务列表。
(2)Ribbon根据负载均衡的算法进行负载均衡,将请求转发到其它微服务。

6.3 实际项目流程图

7. 容错保护

7.1 什么是容错保护
  容错保护是指微服务在执行过程中出现错误并从错误中恢复的能力。微服务容错性不好很容易导致雪崩效应,什么是雪崩效应?摘自百度百科中的定义:

  微服务的雪崩效应表现在服务与服务之间调用,当其中一个服务无法提供服务可能导致其它服务也死掉,比如:单点登录服务调用用户信息服务查询用户信息,由于用户信息服务无法提供服务导致单点登录服务一直等待,从而导致用户登录、用户退出功能无法使用,像这样由一个服务所引起的一连串的多个服务无法提供服务即是微服务的雪崩效应。

7.2 Spring Cloud Hystrix
  Spring Cloud Hystrix 是基于Netflix的开源框架Hystrix的整合,它实现了断路器、线程隔离、信号隔离等容错功能。
  下图是Hystrix断路器示意图:

8. 服务网关

8.1 什么是服务网关
  服务网关是在微服务前边设置一道屏障,请求先到服务网关,网关会对请求进行过虑、校验、路由等处理。有了服务网关可以提高微服务的安全性,校验不通过的请求将被拒绝访问。
  前边介绍的Ribbon客户端负载均衡技术可以不用经过网关,因为通常使用Ribbon完成微服务与微服务之间的内部调用,而对那些对外提供服务的微服务,比如:用户登录、提交订单等,则必须经过网关来保证微服务的安全。

8.2 Spring Cloud Zuul
  Spring Cloud Zuul是整合Netflix公司的Zuul开源项目实现的微服务网关,它实现了请求路由、负载均衡、校验过虑等 功能。

8.3 实际项目的流程图

三、参考资料下载

参考资料中包含了简单代码学习,有兴趣朋友可以下载:
链接:https://pan.baidu.com/s/1i1hrwqfUetwsY-AJT4RFPg
提取码:1mmc

四、参考文章

http://yun.itheima.com/course?hm

原文地址:https://www.cnblogs.com/WUXIAOCHANG/p/10888500.html

时间: 2024-11-07 22:31:19

Java之Spring Cloud概念介绍的相关文章

攻城狮在路上(贰) Spring(二)--- Spring IoC概念介绍

一.IoC的概念: IoC(控制反转)是Spring容器的核心.另一种解释是DI(依赖注入),即让调用类对某一个接口的依赖关系由第三方注入,以移除调用类对某一个接口实现类的一览. 定义如此,由此可见,在面向接口编程的情况下,IoC可以很好的实现解耦,可以以配置的方式为程序提供所需要的接口实现类. 在实际程序开发中,我们只需要提供对应的接口及实现类,然后通过Spring的配置文件或者注解完成对依赖类的装配.二.IoC的类型: 1.通过构造函数: 此种方式的缺点是,在构造函数中注入之后一般会作为一个

(一)Java版Spring Cloud B2B2C o2o鸿鹄云商平台--概述

近期公司正在升级Spring Cloud版本的b2b2c o2o鸿鹄云商平台,我亲自参与了整个产品的研发及升级工作.大概统计了一下,用Java Spring Cloud技术研发电子商务平台的公司少之甚少,借此我想将整个研发的过程通过博客的方式分享出来,希望各位IT网友看到此系列文章多给本人留言,一起进步. 第一篇文章我不会过多的强调技术,而是通过清单方式给大家展示一下整个b2b2c o2o全套解决方案 Java版Spring Cloud B2B2C鸿鹄云商平台全套解决方案 使用技术: Sprin

java版spring cloud+spring boot 社交电子商务平台(九)使用Swagger2构建强大的RESTful API文档(1)

由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端. 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发.Android开发或是Web开发等.为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTf

Spring Cloud入门介绍

       Spring Cloud介绍 一.Spring Cloud 是什么 Spring Cloud 为开发者提供了在分布式系统(如配置管理.服务发现.断路器.智能路由.微代理.控制总线.一次性 Token.全局锁.决策竞选.分布式会话和 集群状态)操作的开发工具 Spring Cloud 是一整套微服务的组件.工具集 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.

Java 在spring cloud中使用Redis,spring boot同样适用

1.本地安装redis服务,官网下载. 2.在开发中要使用redis,首先要启动本地redis服务,启动后页面如下: 3.在spring boot项目pom.xml文件中添加Redis需要的依赖包,可在生成springboot项目选择自动引入: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</arti

java版spring cloud+spring boot+redis多租户社交电子商务平台(十二)断路器监控(Hystrix Dashboard)

b2b2c电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.在我的第四篇文章断路器讲述了如何使用断路器,并简单的介绍了下Hystrix Dashboard组件,这篇文章更加详细的介绍Hystrix Dashboard. 一.Hystrix Dashboard简介在微服务架构中为例保证程序的可用性,防止程序出错导致网络阻塞,出现了断路器模型.断路器的状况反应了一个程序的可用性和健壮性,它是一个重要指标.Hystrix Dashboard是作为断路器状态的一个组件,提供了数据监控和友好的图形化

java版spring cloud+spring boot 社交电子商务平台-关于Spring Cloud的核心特性

SOA和微服务的区别 其实服务化架构已经可以解决大部分企业的需求了,那么我们为什么要研究微服务呢?先说说它们的区别:微服务架构强调业务系统需要彻底的组件化和服务化,一个组件就是一个产品,可以独立对外提供服务微服务不再强调传统SOA架构里面比较重的ESB企业服务总线微服务强调每个微服务都有自己独立的运行空间,包括数据库资源.微服务架构本身来源于互联网的思路,因此组件对外发布的服务强调了采用HTTP Rest API的方式来进行微服务的切分粒度会更小总结:微服务架构是 SOA 架构思想的一种扩展,更

java版spring cloud+spring boot+redis社交电子商务平台-Spring Cloud Config服务器

服务器为外部配置(名称值对或等效的YAML内容)提供了基于资源的HTTP.服务器可以使用@EnableConfigServer注释轻松嵌入到Spring Boot应用程序中.所以这个应用程序是一个配置服务器: ConfigServer.java @SpringBootApplication @EnableConfigServer public class ConfigServer { public static void main(String[] args) { SpringApplicati

java版spring cloud+spring boot 社交电子商务平台-创建“服务提供方”

下面我们创建提供服务的客户端,并向服务注册中心注册自己.本文我们主要介绍服务的注册与发现,所以我们不妨在服务提供方中尝试着提供一个接口来获取当前所有的服务信息. 电子商务社交平台源码请加企鹅求求:叁五叁陆贰肆柒贰五玖 首先,创建一个基本的Spring Boot应用.命名为eureka-client,在pom.xml中,加入如下配置: <parent> <groupId>org.springframework.boot</groupId> <artifactId&g