从RPC到服务化框架( 三 )


从RPC到服务化框架

文章插图
 
  • 耗时服务导致超时
我们使用netty作为服务框架的通信框架,实现的是从Reactor模型,在服务端获取到客户端请求后,会首先将其丢到一个队列中,由消费线程去异步处理请求,如果某个服务耗时比较长,则会导致队列阻塞,影响其它的服务响应 。这个问题在其他的服务化框架中应该也是存在的 。在新版服务框架中,我们可以将耗时服务独立到一个队列中进行执行,使该服务不会影响其他服务的正常调用 。具体操作只需要在提供的界面做些配置就可以动态调整了 。
从RPC到服务化框架

文章插图
 
  • 服务发布分散
在我们发布服务时,我们需要登录每个需要发布服务的机器,进行发布服务的操作 。公司的运维平台提供了界面可以操作发布,不过它是个运维平台,而不是业务平台,发布完成后如何确认服务都注册成功了呢?新版服务框架中提供了管理中心,实现在一处发布所有的服务 。流程如下:
  1. 管理中心通知需要发布服务的节点,将需要发布的服务信息发送给节点
  2. 节点收到信息后,从Maven仓库下载需要发布的服务,进行部署
  • 缺少完善的服务治理
在服务发布完成后,如何确认服务都注册成功了呢?
举个例子:我们发布服务A,注册中心可以看到其下的服务接口1和服务接口2,当我们更新服务A后,注册中心只能看到服务接口1,那么请问,消失的服务接口2是注册失败?还是版本更新给删除了?这个问题目前的服务框架都没有处理 。
在我们新版服务框架中,提供了基于元数据的服务监控与提醒,可以配置监控重要的服务接口,如果发布后服务接口消失,则通过监控来进行及时的提醒 。
除了上面所说的问题,新版服务框架还提供了完善的服务治理,权重的动态调整,服务自动升降级,服务端管理,客户端管理等操作 。
新版服务框架的架构如下:
从RPC到服务化框架

文章插图
 
  • 主要将注册中心升级为了管理中心
  • 管理中心包含了注册中心,一个WebApp提供给相关人员进行服务管理操作,一个LocalClient来进行通信
  • 这个LocalClient是个特殊的客户端,主要就是和上面提到的系统服务进行通信,来进行相关的管理操作
在新版服务框架下,所有的操作都可以在管理中心执行,结合公司管理平台提供的部署与监控,可以实现服务开发、部署、发布的闭环,大致流程如下:
  • 通过管理平台发布客户端,注册中心,服务端 。通过相应的配置,发布完成后三者即可通信
  • 在管理中心服务页面,选择需要发布或更新服务的节点,进行发布或更新操作
  • 相应节点接收到消息后,从Maven仓库下载需要发布或更新的服务,进行发布或更新
  • 管理平台中可以查看服务调用的相关监控,同时如果出现了相关问题,例如上面提到的服务未注册成功,会及时通过管理平台通知相关人员
总结本文主要是对之前开发的服务化框架的设计过程的一个梳理总结,并对一些特殊的考量做了特别说明 。

【从RPC到服务化框架】


推荐阅读