微服务网关中的服务注册和访问(10.12)

在前面谈微服务网关的时候就谈到,在微服务架构中,微服务网关虽然承担了服务注册,服务目录提供,服务鉴权,服务限流等控制能力,但是实际的控制流是和服务调用的数据流分离的。即对于任何一个服务的访问都是通过两个步骤来完成:


1. 首先是消费方调用微服务网关的服务目录查询服务,获取到具体的服务访问地址。

在整个过程中可以看到,微服务网关更多的承担了服务目录的统一提供,负载均衡和路由,服务安全控制等基础能力,而不承担数据流的传输能力。那么实际就会遇到一个问题场景,即如何在这种模式下也实现服务消费数据流消息日志的记录,以方便的后续审计。

为了实现这个能力,一个常见的做法仍然是需要在消费方放置对应的本地SDK代理包,通过SDK代理包来实现服务输入和输出消息日志的记录。SDK代理包可以实现对消息输入和输出流的拦截,实现服务的安全控制,路由等能力。同时更加重要的是SDK代理包可以将拦截到的消息输入和输出,发送到JMS消息中间件中,然后通过JMS消息中间件再异步写入和持久化到数据库。

在整个实现模式中既解决了微服务网关本身的大并发下的数据流承载压力,同时又解决了服务调用消息和数据流的记录问题。这也是当前常见的实现方式。在该实现方式下可以看到,微服务网关本身就比传统的ESB服务总线更加轻量,很多ESB总线的能力已经前置到业务系统消费方或提供方的本地SDK代理包上来实现和完成。

当然对于服务目录的查询也不需要每次服务消费都实时查询,而可以将服务目录库的查询结果缓存到本地的配置文件或内存中,只要定期去刷新该数据即可。

我来评几句
登录后评论

已发表评论数()