1、理解微服务
2、Spring Cloud知识介绍
3、Spring Cloud全家桶
4、参考资料下载
5、参考文章web
咱们经过软件架构演进过程来理解什么是微服务,软件架构的发展经历了从单体结构、垂直架构、SOA架构到微服务架构的过程。算法
1.1 特色
(1)全部的功能集成在一个项目工程中。
(2)全部的功能打一个war包部署到服务器。
(3)应用与数据库分开部署。
(4)经过部署应用集群和数据库集群来提升系统的性能。spring
1.2 优势
(1)项目架构简单,前期开发成本低,周期短,小型项目的首选。数据库
1.3 缺点
(1)所有功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
(2)系统性能扩展只能经过扩展集群结点,成本高、有瓶颈。
(3)技术栈受限。安全
2.1 特色
(1)以单体结构规模的项目为单位进行垂直划分项目即将一个大项目拆分红一个一个单体结构项目。
(2)项目与项目之间的存在数据冗余,耦合性较大,好比上图中三个项目都存在客户信息。
(3)项目之间的接口多为数据同步功能,如:数据库之间的数据库,经过网络接口进行数据库同步。服务器
2.2 优势
(1)项目架构简单,前期开发成本低,周期短,小型项目的首选。
(2)经过垂直拆分,原来的单体项目不至于无限扩大。
(3)不一样的项目可采用不一样的技术。网络
2.3 缺点
(1)所有功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
(2)系统性能扩展只能经过扩展集群结点,成本高、有瓶颈。架构
3.1特色
(1)基于SOA的架构思想将重复公用的功能抽取为组件,以服务的方式给各各系统提供服务。
(2)各个项目(系统)与服务之间采用webservice、rpc等方式进行通讯。
(3)ESB企业服务总线做为项目与服务之间通讯的桥梁。app
3.2 优势
(1)将重复的功能抽取为服务,提升开发效率,提升系统的可重用性、可维护性。
(2)能够针对不一样服务的特色制定集群及优化方案。
(3)采用ESB减小系统中的接口耦合。负载均衡
3.3 缺点
(1)系统与服务的界限模糊,不利于开发及维护。
(2)虽然使用了ESB,可是服务的接口协议不固定,种类繁多,不利于系统维护。
(3)抽取的服务的粒度过大,系统与服务之间耦合性高。
为适应企业的业务发展,提升软件研发的生产力,下降软件研发的成本,软件架构也做了升级和优化,将一个独立的系统拆分红若干小的服务,每一个小服务运行在不一样的进程中,服务与服务之间采用http 轻量协议(好比流行的RESTful)传输数据,每一个服务所拥有的功能具备独立性强、高内聚的特色,这样的设计就实现了单个服务的高内聚,服务与服务之间的低耦合效果,这一个一个的小服务就是微服务,基于这种方法设计的系统架构即微服务架构。
4.1 特色
(1)将系统服务层彻底独立出来,并将服务层抽取为一个一个的微服务。
(2)微服务遵循单一原则。
(3)微服务之间采用RESTful等轻量协议传输。
4.2 优势
(1)服务拆分粒度更细,有利于资源重复利用,提升开发效率。
(2)能够更加精准的制定每一个服务的优化方案,提升系统可维护性。
(3)微服务架构采用去中心化思想,服务之间采用RESTful等轻量协议通讯,相比ESB更轻量。
(4)适用于互联网时代,产品迭代周期更短。
4.3 缺点
(1)微服务过多,服务治理成本高,不利于系统维护。
(2)分布式系统开发的技术成本高(容错、分布式事务等),对团队挑战大。
首先SOA和微服务架构一个层面的东西,而对于ESB和微服务网关是一个层面的东西,一个谈到是架构风格和方法,一个谈的是实现工具或组件。
(1)SOA(Service Oriented Architecture)“面向服务的架构”:他是一种设计方法,其中包含多个服务, 服务之间经过相互依赖最终提供一系列的功能。一个服务 一般以独立的形式存在与操做系统进程中。各个服务之间 经过网络调用。
(2)微服务架构:其实和 SOA 架构相似,微服务是在 SOA 上作的升华,微服务架构强调的一个重点是“业务须要完全的组件化和服务化”,原有的单个业务系统会拆分为多个能够独立开发、设计、运行的小应用。这些小应用之间经过服务完成交互和集成。
微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想
负载均衡,网关路由:高可用、集群部署,校验、请求转发、服务集成。
服务治理:服务注册、发现。
容错:避免雪崩。
监控跟踪:监控资源利用、服务响应、容器资源利用状况。
消息总线:消息队列、异步通讯。
配置管理:统一配置管理。
Spring Cloud为开发人员构建微服务架构提供了完整的解决方案,SpringCloud是若干个框架的集合,它包括spring-cloud-config、spring-cloud-bus等近20个子项目,它提供了服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等领域的解决方案。
微服务的兴起出现了不少优秀的公司和技术:
服务治理:Dubbo(阿里巴巴)、Dubbox(当当)、Eureka(Netflix)等 。
配置管理:Disconf(百度)、QConf(360)、Diamood(淘宝)等 。
服务跟踪:Hydra(京东)、Zipkin(Twitter)、Sleuth(Spring Cloud)等 。
Spring Cloud 提供一站式的微服务架构解决方案,以下图:
微服务架构的优势代表它能够提升咱们的生产力,可是分布式系统自己的技术成本问题给互联网那些创业型公司很多的挑战,阿里、百度等巨头所提供的微服务技术只是解决其中某个问题,而整合封装这些优秀的技术恐怕是Spring最擅长的领域了,Spring Cloud也正由于此而诞生。
使用Spring Cloud来构建微服务架构能够省去你整合各家技术的成本,Spring Cloud为咱们构建微服务架构提供了一站式的解决方案,就比如当初Spring诞生是为解决EJB企业应用开发的众多问题而提供的一站式轻量级企业应用开发解决方案同样,随着使用Spring Cloud公司数量的增长,相信微服务将被Spring Cloud一统江湖。
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.1 什么是负载均衡
负载均衡是微服务架构中必须使用的技术,经过负载均衡来实现系统的高可用、集群扩容等功能。负载均衡可经过硬件设备及软件来实现,硬件好比:F五、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.1 什么是容错保护
容错保护是指微服务在执行过程当中出现错误并从错误中恢复的能力。微服务容错性很差很容易致使雪崩效应,什么是雪崩效应?摘自百度百科中的定义:
微服务的雪崩效应表如今服务与服务之间调用,当其中一个服务没法提供服务可能致使其它服务也死掉,好比:单点登陆服务调用用户信息服务查询用户信息,因为用户信息服务没法提供服务致使单点登陆服务一直等待,从而致使用户登陆、用户退出功能没法使用,像这样由一个服务所引发的一连串的多个服务没法提供服务便是微服务的雪崩效应。
7.2 Spring Cloud Hystrix
Spring Cloud Hystrix 是基于Netflix的开源框架Hystrix的整合,它实现了断路器、线程隔离、信号隔离等容错功能。
下图是Hystrix断路器示意图:
8.1 什么是服务网关
服务网关是在微服务前边设置一道屏障,请求先到服务网关,网关会对请求进行过虑、校验、路由等处理。有了服务网关能够提升微服务的安全性,校验不经过的请求将被拒绝访问。
前边介绍的Ribbon客户端负载均衡技术能够不用通过网关,由于一般使用Ribbon完成微服务与微服务之间的内部调用,而对那些对外提供服务的微服务,好比:用户登陆、提交订单等,则必须通过网关来保证微服务的安全。
8.2 Spring Cloud Zuul
Spring Cloud Zuul是整合Netflix公司的Zuul开源项目实现的微服务网关,它实现了请求路由、负载均衡、校验过虑等 功能。
8.3 实际项目的流程图
配置管理开发工具包,可让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。
事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。
针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。
云端负载均衡,一个基于 REST 的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移。
容错管理工具,旨在经过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
边缘服务工具,是提供动态路由,监控,弹性,安全等的边缘服务。
配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操做、轮询框架、回调机制等功能。
经过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。
日志收集工具包,封装了Dapper,Zipkin和HTrace操做。
大数据操做工具,经过命令行方式操做数据流。
安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。
封装了Consul操做,consul是一个服务发现与配置工具,与Docker容器能够无缝集成。
操做Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。
数据流操做开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。
基于 Spring Boot CLI,可让你以命令行方式快速创建云组件。
参考资料中包含了简单代码学习,有兴趣朋友能够下载:
连接:https://pan.baidu.com/s/1i1hrwqfUetwsY-AJT4RFPg
提取码:1mmc