zoukankan      html  css  js  c++  java
  • Java之Spring Cloud概念介绍(非原创)

    文章大纲

    一、理解微服务
    二、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 实际项目的流程图

    三、Spring Cloud全家桶

    1. Spring Cloud Config

    配置管理开发工具包,可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。

    2. Spring Cloud Bus

    事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。

    3. Spring Cloud Netflix

    针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。

    4. Netflix Eureka

    云端负载均衡,一个基于 REST 的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移。

    5. Netflix Hystrix

    容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

    6. Netflix Zuul

    边缘服务工具,是提供动态路由,监控,弹性,安全等的边缘服务。

    7. Netflix Archaius

    配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。

    8. Spring Cloud for Cloud Foundry

    通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。

    9. Spring Cloud Sleuth

    日志收集工具包,封装了Dapper,Zipkin和HTrace操作。

    10. Spring Cloud Data Flow

    大数据操作工具,通过命令行方式操作数据流。

    11. Spring Cloud Security

    安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。

    12. Spring Cloud Consul

    封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。

    13. Spring Cloud Zookeeper

    操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。

    14. Spring Cloud Stream

    数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。

    15. Spring Cloud CLI

    基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。

    四、参考资料下载

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

    五、参考文章

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

  • 相关阅读:
    linux中文字体
    连接数据库服务器端的几个常见错误
    分布式部署下的报表调用 API调用 权限问题以及性能方案
    报表在IBM AIX系统下resin部署
    ASP.Net与JSP如何共享Session值
    async与await
    从小程序到小程序云开发
    什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC?
    微信小程序知识云开发
    变量的解构赋值
  • 原文地址:https://www.cnblogs.com/WUXIAOCHANG/p/10888500.html
Copyright © 2011-2022 走看看