100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【华为云技术分享】华为云ServiceStage-企业级微服务开发框架利器

【华为云技术分享】华为云ServiceStage-企业级微服务开发框架利器

时间:2020-06-15 05:21:22

相关推荐

【华为云技术分享】华为云ServiceStage-企业级微服务开发框架利器

导语:近期,国外HashiCorp在官网宣布,不允许中国境内使用、部署和安装该企业旗下的企业版产品和软件,其中包括Consul。那么国内企业有没有类似的服务可以提供呢?答案是有!我们一起来看看华为云ServiceStage。

近年来越来越多的企业开始实践微服务,而微服务在企业应用落地的过程,面临着微服务开发框架的选型,无论是自研还是选择第三方框架都不得不考虑的问题包括:微服务框架是否具备高可靠性,任何时间不能中断业务;微服务框架是否能够实现高速通信性能,保证业务从单体架构向微服务架构切换时,性能下降不会太多。本文从服务管理中心、通信处理两个模块来介绍华为开源微服务框架SeviceComb如何帮助企业应用快速具备高性能的通信能力以及高可靠的服务管理能力。上篇先介绍微服务的服务管理中心。

ServiceCenter整体介绍

图1 ServiceCenter整体介绍

ServiceCenter是一个具有微服务实例注册/发现能力的微服务组件,提供一套标准的RESTful API对微服务元数据进行管理。ServiceComb的微服务注册及动态发现能力也是依赖其实现的。

除了以上描述的微服务动态发现外,ServiceCenter帮助应用具备以下能力:

实例缓存机制

基于SDK开发的微服务,会在第一次消费Provider微服务时,会进行一次实例发现操作,此时内部会请求ServiceCenter拉取Provider当前存活的实例集合,并保存到内存缓存当中,后续消费请求就依据该缓存实例集合,按照自定义的路由逻辑发送到Provider的一个实例服务中。

这样处理的好处是,已经运行态的SDK进程,始终保留一份实例缓存;虽然暂时无法感知实例变化及时刷新缓存,但当重新连上ServiceCenter后会触发一缓存刷新,保证实例缓存是最终有效的;在此过程中SDK保证了业务始终可用。

图4微服务实例缓存机制

异步缓存机制

在ServiceCenter内部,因为本身不存储数据,如果设计上单纯的仅作为一个Proxy服务转发外部请求到etcd,这样的设计可以说是不可靠的,原因是因为一旦后端服务出现故障或网络访问故障,必将导致ServiceCenter服务不可用,从而引起客户端实例信息无法正确拉取和刷新的问题。所以在设计之初,ServiceCenter引入了缓存机制。

图6异步缓存机制

1.启动之初,ServiceCenter会与etcd建立长连接(watch),并实时监听资源的变化。

2.每次watch前,为防止建立连接时间窗内发生资源变化,ServiceCenter无法监听到这些事件,会进行一次全量list查询资源操作。

3.运行过程中,List & watch所得到的资源变化会与本地缓存比对,并刷新本地缓存。

4.微服务的实例发现或静态数据查询均使用本地缓存优先的机制。

异步刷新缓存机制,可以让ServiceCenter与etcd的缓存同步是异步的,微服务与ServiceCenter间的读请求,基本上是不会因为etcd不可用而阻塞的;虽然在资源刷新到ServiceCenter watch到事件这段时间内,会存在一定的对外呈现资源数据更新延时,但这是可容忍范围内的,且最终呈现数据一致;这样的设计即大大提升了ServiceCenter的吞吐量,同时保证了自身高可用。

自我保护机制

前面提到的缓存机制,保证了ServiceCenter在etcd出现网络分区故障时依然保持可读状态,ServiceCenter的自我保护(Self-preservation)机制保证了Provider端与ServiceCenter在出现网络分区故障时依然保持业务可用。

现在可以假设这样的场景:全网大部分的Provider与ServiceCenter之间网络由于某种原因出现分区,Provider心跳无法成功上报心跳。这样的情况下,在ServiceCenter中会出现大量的Provider实例信息老化下线消息,ServiceCenter将Provider实例下线事件推送到全网大部分的Consumer端,最终导致一个结果,用户业务瘫痪。可想而知对于ServiceCenter乃至于整个微服务框架是灾难性的。

为了解决这一问题,ServiceCenter需要有一个自我保护机制(Self-preservation):

图8 ServiceCenter的自我保护机制

1.ServiceCenter在一个时间窗内监听到etcd有80%的实例下线事件,会立即启动自我保护机制。

2.保护期间内,所有下线事件均保存在待通知队列中。

3.保护期间内,ServiceCenter收到队列中实例上报注册信息则将其从队列中移除,否则当实例租期到期,则推送实例下线通知事件到consumer服务。

4.队列为空,则关闭自我保护机制。

有了自我保护机制后,即使etcd存储的数据全部丢失,这种极端场景下,SDK与ServiceCenter之间可在不影响业务的前提下,做到数据自动恢复。虽然这个恢复是有损的,但在这种灾难场景下还能保持业务基本可用。

以上就是ServiceComb的服务管理中心在分布式系统下的高可靠架构设计,在进行大规模、高并发的企业应用开发时,可靠的服务管理中心能够使得分布式系统运行更加稳定,同时高性能的通信也使得分布式系统更高效地处理密集的业务。

点击这里,了解更多精彩内容

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。