1、微服务简介前端
微服务是最近的一两年的时间里是很火的一个概念。感受不学习一下都快跟不上时代的步伐了,下边作一下简单的总结和介绍。web
何为微服务?简而言之,微服务架构风格这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的。其中每一个小型服务都运行在本身的进程中,并常常采用HTTP资源API这样轻量的机制来相互通讯。这些服务围绕业务功能进行构建,并能经过全自动的部署机制来进行独立部署。这些微服务可使用不一样的语言来编写,而且可使用不一样的数据存储技术。对这些微服务咱们仅作最低限度的集中管理。安全
一个微服务通常完成某个特定的功能,好比下单管理、客户管理等等。每个微服务都是微型六角形应用,都有本身的业务逻辑和适配器。一些微服务还会发布API给其它微服务和应用客户端使用。其它微服务完成一个Web UI,运行时,每个实例多是一个云VM或者是Docker容器。网络
好比,一个前面描述系统可能的分解以下:架构
总的来讲,微服务的主旨是将一个本来独立的系统拆分红多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间经过基于HTTP的RESTful API进行通讯协做,而且每一个服务都维护着自身的数据存储、业务开发、自动化测试以及独立部署机制。负载均衡
2、微服务的特征框架
一、每一个微服务可独立运行在本身的进程里;运维
二、一系列独立运行的微服务共同构建起了整个系统;分布式
三、每一个服务为独立的业务开发,一个微服务通常完成某个特定的功能,好比:订单管理、用户管理等;微服务
四、微服务之间经过一些轻量的通讯机制进行通讯,例如经过REST API或者RPC的方式进行调用。
3、微服务的优缺点
一、易于开发和维护
二、启动较快
三、局部修改容易部署
四、技术栈不受限
五、按需伸缩
六、DevOps
4、常见微服务框架
一、服务治理框架
(1)Dubbo、Dubbox(当当网对Dubbo的扩展)
最近的好消息是Dubbo已近从新开始进行运维啦!
(2)Netflix的Eureka、Apache的Consul等。
Spring Cloud Eureka是对Netflix的Eureka的进一步封装。
二、分布式配置管理
(1)百度的Disconf
(2)360的QConf
(3)Spring Cloud组件中的Config
(3)淘宝的Diamond
三、批量任务框架
(1)Spring Cloud组件中的Task
(2)LTS
四、服务追踪框架
。。。
5、Spring Cloud全家桶组件
在介绍Spring Cloud 全家桶以前,首先要介绍一下Netflix ,Netflix 是一个很伟大的公司,在Spring Cloud项目中占着重要的做用,Netflix 公司提供了包括Eureka、Hystrix、Zuul、Archaius等在内的不少组件,在微服务架构中相当重要,Spring在Netflix 的基础上,封装了一系列的组件,命名为:Spring Cloud Eureka、Spring Cloud Hystrix、Spring Cloud Zuul等,下边对各个组件进行分别得介绍:
(1)Spring Cloud Eureka
咱们使用微服务,微服务的本质仍是各类API接口的调用,那么咱们怎么产生这些接口、产生了这些接口以后如何进行调用那?如何进行管理哪?
答案就是Spring Cloud Eureka,咱们能够将本身定义的API 接口注册到Spring Cloud Eureka上,Eureka负责服务的注册于发现,若是学习过Zookeeper的话,就能够很好的理解,Eureka的角色和 Zookeeper的角色差很少,都是服务的注册和发现,构成Eureka体系的包括:服务注册中心、服务提供者、服务消费者。
上图中描述了(图片来源于网络):
一、两台Eureka服务注册中心构成的服务注册中心的主从复制集群;
二、而后服务提供者向注册中心进行注册、续约、下线服务等;
三、服务消费者向Eureka注册中心拉去服务列表并维护在本地(这也是客户端发现模式的机制体现!);
四、而后服务消费者根据从Eureka服务注册中心获取的服务列表选取一个服务提供者进行消费服务。
(2)Spring Cloud Ribbon
在上Spring Cloud Eureka描述了服务如何进行注册,注册到哪里,服务消费者如何获取服务生产者的服务信息,可是Eureka只是维护了服务生产者、注册中心、服务消费者三者之间的关系,真正的服务消费者调用服务生产者提供的数据是经过Spring Cloud Ribbon来实现的。
在(1)中提到了服务消费者是将服务从注册中心获取服务生产者的服务列表并维护在本地的,这种客户端发现模式的方式是服务消费者选择合适的节点进行访问服务生产者提供的数据,这种选择合适节点的过程就是Spring Cloud Ribbon完成的。
Spring Cloud Ribbon客户端负载均衡器由此而来。
(3)Spring Cloud Feign
上述(1)、(2)中咱们已经使用最简单的方式实现了服务的注册发现和服务的调用操做,若是具体的使用Ribbon调用服务的话,你就能够感觉到使用Ribbon的方式仍是有一些复杂,所以Spring Cloud Feign应运而生。
Spring Cloud Feign 是一个声明web服务客户端,这使得编写Web服务客户端更容易,使用Feign 建立一个接口并对它进行注解,它具备可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增长了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的负载均衡的HTTP客户端 Feign。
简单的能够理解为:Spring Cloud Feign 的出现使得Eureka和Ribbon的使用更为简单。
(4)Spring Cloud Hystrix
咱们在(1)、(2)、(3)中知道了使用Eureka进行服务的注册和发现,使用Ribbon实现服务的负载均衡调用,还知道了使用Feign能够简化咱们的编码。可是,这些还不足以实现一个高可用的微服务架构。
例如:当有一个服务出现了故障,而服务的调用方不知道服务出现故障,若此时调用放的请求不断的增长,最后就会等待出现故障的依赖方 相应造成任务的积压,最终致使自身服务的瘫痪。
Spring Cloud Hystrix正是为了解决这种状况的,防止对某一故障服务持续进行访问。Hystrix的含义是:断路器,断路器自己是一种开关装置,用于咱们家庭的电路保护,防止电流的过载,当线路中有电器发生短路的时候,断路器可以及时切换故障的电器,防止发生过载、发热甚至起火等严重后果。
(5)Spring Cloud Config
对于微服务还不是不少的时候,各类服务的配置管理起来还相对简单,可是当成百上千的微服务节点起来的时候,服务配置的管理变得会复杂起来。
分布式系统中,因为服务数量巨多,为了方便服务配置文件统一管理,实时更新,因此须要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件Spring Cloud Config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在Cpring Cloud Config 组件中,分两个角色,一是Config Server,二是Config Client。
Config Server用于配置属性的存储,存储的位置能够为Git仓库、SVN仓库、本地文件等,Config Client用于服务属性的读取。
(6)Spring Cloud Zuul
咱们使用Spring Cloud Netflix中的Eureka实现了服务注册中心以及服务注册与发现;而服务间经过Ribbon或Feign实现服务的消费以及均衡负载;经过Spring Cloud Config实现了应用多环境的外部化配置以及版本管理。为了使得服务集群更为健壮,使用Hystrix的融断机制来避免在微服务架构中个别服务出现异常时引发的故障蔓延。
先来讲说这样架构须要作的一些事儿以及存在的不足:
一、首先,破坏了服务无状态特色。为了保证对外服务的安全性,咱们须要实现对服务访问的权限控制,而开放服务的权限控制机制将会贯穿并污染整个开放服务的业务逻辑,这会带来的最直接问题是,破坏了服务集群中REST API无状态的特色。从具体开发和测试的角度来讲,在工做中除了要考虑实际的业务逻辑以外,还须要额外可续对接口访问的控制处理。
二、其次,没法直接复用既有接口。当咱们须要对一个即有的集群内访问接口,实现外部服务访问时,咱们不得不经过在原有接口上增长校验逻辑,或增长一个代理调用来实现权限控制,没法直接复用原有的接口。
面对相似上面的问题,咱们要如何解决呢?下面进入本文的正题:服务网关!
为了解决上面这些问题,咱们须要将权限控制这样的东西从咱们的服务单元中抽离出去,而最适合这些逻辑的地方就是处于对外访问最前端的地方,咱们须要一个更强大一些的均衡负载器,它就是本文未来介绍的:服务网关。
服务网关是微服务架构中一个不可或缺的部分。经过服务网关统一贯外系统提供REST API的过程当中,除了具有服务路由、均衡负载功能以外,它还具有了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的做用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体可以具有更高的可复用性和可测试性。
(7)Spring Cloud Bus
在(5)Spring Cloud Config中,咱们知道的配置文件能够经过Config Server存储到Git等地方,经过Config Client进行读取,可是咱们的配置文件不多是一直不变的,当咱们的配置文件放生变化的时候如何进行更新哪?
一种最简单的方式从新一下Config Client进行从新获取,但Spring Cloud绝对不会让你这样作的,Spring Cloud Bus正是提供一种操做使得咱们在不关闭服务的状况下更新咱们的配置。
Spring Cloud Bus官方意义:消息总线。
固然动态更新服务配置只是消息总线的一个用处,还有不少其余用处。