此博客是本人从学生时代开始做笔记所用, 部分是工作所遇问题,做填坑笔记,部分闲来查阅资料,加上自己的理解所总结的学习笔记, 常忙得不可开交,若漏了资料来源,望通知~ 前路漫漫,写点东西告诉自己正在一点点进步,而不要迷失于繁忙。

微服务功能

微服务的功能

服务的注册与发现

服务注册指 向服务注册中心注册一个服务实例,服务提供者将自己的服务信息(服务器、IP等)告知给服务中心。

服务发现指 当服务消费者需要消费另一个服务时,服务注册中心能告知消费者他所需要的服务的实例信息。

通常,一个服务即是提供者也是消费者

服务消费者一般使用HTTP协议或消息组件这种轻量级的通信机制来进行服务消费

关系如下:

什么是“心跳”?

一个服务注册后,会定期向服务中心发送“心跳”,表明自己处于可用状态。当一个服务一段时间没有发送“心跳”,服务中心会把它从服务列表剔除,

如果之后再发送“心跳”,服务中心会重新把它放入服务列表。

 

----------------------------------------------------------------------------------------------------------

 

服务负载均衡

服务间的相互调用一般是通过HTTP协议来实现的,而网络往往具有不可靠性,为了保证服务的高可用性,往往采用集群化部署

消费者如何选择提供者,这涉及到负载均衡。

所有的服务都向服务中心注册,每个服务也能定期获取所有服务列表

消费者集成了负载均衡组件,组件能从消费者那获取所有服务列表,并隔一段时间刷新,

当消费者需要消费时,负载均衡组件能通过一定的负载均衡策略选择服务

由于服务也得定期获取所有服务列表,当服务过多时,服务中心就会有很大的负载,为了实现高可用,一般可以把服务中心集群化,每个服务中心的数据实时同步

 

----------------------------------------------------------------------------------------------------------

 

服务容错

服务间的依赖错综复杂,一个网络请求往往需要调用多个服务,

如果一个服务不可用,用户请求会处于阻塞状态,线程被阻塞,另外,等待此进程的其他服务也会被阻塞,这些服务的进程也会被阻塞,在高并发的情况下线程会很快耗尽,这样引发连锁反应,称之为“雪崩”

为了解决“雪崩”,引入“熔断器”概念。

当请求一个服务的失败次数在一定时间小于阈值,熔断器关闭状态,服务正常。

当失败次数大于阈值时,打开熔断器,所有请求快速失败,解放了进程

一段时间后熔断器半打开,执行一定数量的请求,剩下的快速失败,若依旧失败,继续打开,若成功,关闭熔断器

作用总结:

1. 防雪崩

2. 资源隔离

3. 服务降级

4. 自我修复(一段时间尝试半开)

 

----------------------------------------------------------------------------------------------------------

 

服务网关

微服务系统中,资源是以API接口的形式暴露出来以提供服务,而API接口通常由服务网关(API网关层)统一暴露请求先到达网关层,经过身份验证,权限判断等再转发到具体的服务

内部的服务不对外提供API接口,这样可以把内部服务隐藏起来,一定程度上保护了系统安全

 

备注:之前将的服务都是服务层,服务网关属于网关层,在服务层之上

介绍:API网关有请求转发的功能,还能负责一定的安全验证,例如请求是否合法,是否有请求权限,网关层以集群方式存在

网关层作用:

1. 资源统一聚合对外暴露,保护系统安全

2. 安全验证,权限验证

3. 请求监控,实现日志

4. 流量监控

5. 从内部服务剥离,方便测试

 

备注:网关层之上还有负载均衡层,通过一定的路由策略转发到网关层

 

----------------------------------------------------------------------------------------------------------

 

服务配置的统一管理

不同的服务有不同的配置文件,例如数据库配置、日志输出级别配置,且这些配置在不同环境也不一样,随着服务的增加,配置文件的管理是很麻烦的事。

许多管理配置的组件,以Spring Cloud Config为例。

过程:

1. Config Server(配置服务)读取配置文件仓库的配置信息,(配置文件仓库可是本地仓库,也可放于远程GIT仓库)

2. 配置服务启动,读取配置,存于内存

3. 启动服务,例如A、B时,由于A、B指定了配置信息,他们会向配置服务读取配置

4. 当配置需要修改更新时,我们可向配置服务发送POST请求进行刷新,A、B服务也会重新读取

备注:对于集群化的服务,可通过消息总线来刷新,如果服务较多,配置服务也可以集群部署

 

----------------------------------------------------------------------------------------------------------

 

服务链路追踪

微服务系统有多个服务单元,服务单元很多且相互调用很复杂,出现异常很难定位,所以必须实现分布式链路追踪,跟进一个请求的服务过程,出了问题能很快定位。

常见地链路追踪组件有Google的Dapper、Twitter的Zipkin、阿里的Eagleeye

 

posted @ 2019-02-28 20:01  炎泽  阅读(237)  评论(0编辑  收藏  举报