Java技术整理(6)—— 微服务篇

1、服务注册发现

服务注册就是维护一个服务列表,它在管理系统内所有的服务地址,当新的服务启动后,它会向服务列表提交自己的服务地址,服务的调用法可以直接向服务列表发送服务列表获取请求,就能获得所有的服务地址,只需要选取需要的服务即可。

现在的服务注册工具有很多,例如ZooKeeper,Consul,Etcd、Netflix、Eureka

服务注册有两种形式: 客户端注册 和 第三方注册

(1)客户端注册: 客户端注册是服务自身负责注册与注销,当服务启动后向注册中心提交服务地址,当服务下线时注销自己,期间还需要和注册中心发送心跳数据,心跳机制是注册中心用来判断服务是否存在的机制,通常是由注册中心进行心跳监听。

客户端注册的缺点: 注册与服务功能相耦合。

(2)第三方注册: 第三方注册是由一个独立的注册服务 Registrar 负责注册与注销工作,当服务开启时,通知 Registrar 进行注册操作,然后 Registrar 负责向注册中心发起注册工作,同时维护服务与注册中心的心跳,当服务不可用时,Registrar 发起销毁工作。

第三方注册的缺点: Registrar 必须是一个高可用的系统,否则注册工作无法进行。

服务发现有两种形式:客户端发现 和 第三方发现

(1)客户端发现: 客户端负责查询可用服务地址,也负责负载均衡的实现。这种方式是最为直接也最为方便的一种方式,但它的缺点在于多语言时需要重复编写相同逻辑。

(2)服务端发现: 服务端需要额外添加Router服务,服务请求会先发送到Router,然后Router负责查询服务与负载均衡,这种方式的缺点在于必须保证Router的高可用。


2、API网关

API Gateway 是一个服务器,也可以说是进入系统的唯一通道,API Gateway内部封装了一个系统的架构,并提供API给客户端,它能过实现的功能也非常多,例如授权、监控、负载均衡、缓存、请求分片和管理、静态响应处理等。

API Gateway的作用主要是负责请求转发、合成和协议转换,所有来自客户端的请求都必须经过Gateway,然后路由到对应的微服务上,它可以调用多个微服务来处理一个请求以及聚合多个服务的结果,也可以在web协议与内部使用的非web友好型协议进行转换,例如HTTP协议、WebSocket协议。

(1)请求转发: 服务转发主要是对客户端发起的安装微服务的请求负载到不同的服务上。
(2)响应合并: 将业务上需要多个接口共同作用的工作统合并成一次调用对外统一提供服务。
(3)协议转换: 重点是支持SOAP、JMS、Rest间的协议转换
(4)数据转换: 重点是支持XML和JSON之间的格式转换
(5)安全认证:

  • 基于token的客户端访问控制和安全策略
  • 传输数据和报文加密,到服务端解密,需要在客户端有独立的SDK代理包
  • 基于HTTPS的传输加密,客户端和服务端的数字证书支持
  • 基于OAuth2.0的服务安全认证(授权码、客户端、密码模式等)

3、配置中心

配置中心是作用于系统的参数配置,它需要满足高效获取,实时感知,分布式访问的条件。

例如Zookeeper配置中心,采用的是数据加载到内存,实现高效获取,通过 节点监听机制 实现实时感知


4、事件调度

事件调度是为了解决高并发环境下,快速反馈机制的实现。

事件调度通过消息队列来解决快速反馈问题,常用的消息队列有kafka(只在乎高并发,不在乎性能),activemq、rabbitmq等等…


5、服务追踪

服务跟踪是随着微服务数量的增长,需要跟踪请求在微服务之间的流转情况而采取策略。

例如 Spring Cloud Sleuth就是一种服务追踪组件,它在日志中引入唯一ID,确保微服务调用之间的唯一性,这样就能跟踪请求在服务间的流转情况。

(1)实现请求跟踪: 为了实现请求跟踪,当请求发送到分布式系统的入口端点时,只需要服务跟踪框架为其创建一个唯一标识,同时在分布式系统流转时维持这个标识,直到完成请求,这个唯一标识就是Trace ID,通过Trace ID的记录,就能将请求过程日志关联起来。

(2)统计各处理单元的时间延迟: 当请求达到各个服务组件时,或者处理逻辑到达某个状态时,通过唯一标识来记录它的开始、具体过程以及结束,这个标识就是Span ID,对于每个Span都有开始和结束两个节点,通过记录span的开始和结束时间戳来统计出该Span的时间延迟,它还能存储其它数据,例如事件名称,请求信息等。


6、服务熔断(Hystrix)

服务熔断是为了防止基础微服务因某个服务异常而产生的联级故障,进而造成系统崩溃的情况,这种现象叫做服务雪崩效应

(1)熔断器

当发生服务雪崩时,就可以用到熔断器,熔断器的原理是在一段时间内监听到许多类似的错误出现,会强迫其以后的多个调用快速失效,不再访问远程服务器,从而防止应用程序不断尝试执行可能会失败的操作,使得应用程序继续执行而不用等待修正错误,或浪费CPU去等待长时间的超时产生。

(2)断路器

断路器是一种熔断器的实现,当 Hystrix Command 请求后,服务失败数量超过一定比例(默认一半),断路器就切换到 Open状态,这时断路器会直接拦截所有请求,让请求以错误的状态返回给用户,一段时间后(默认保持5秒),自动切换到 Half-Open 状态,这时会判断下一次请求的返回情况,若请求成功则恢复到 Closed 状态,否则重开 Open 状态。


7、API管理

有一种工具叫 Swagger API 管理工具

你可能感兴趣的:(java,微服务,开发语言)