一文理解分布式开发中的服务治理( 三 )


(1)服务:它是分布式架构下的基础单元,包括一个或一组软件功能,其目的是不同的客户端通过网络获取相应的数据,而不用关注底层实现的具体细节 。以用户服务为例,当客户端调用用户服务的注册功能时,注册信息会被写入数据库、缓存并发送消息来通知其他关注注册事件的系统,但是调用方并不清楚服务的具体处理逻辑 。
(2)注册中心:它是微服务架构中的“通讯录”,记录了服务和服务地址的映射关系,主要涉及服务的提供者、服务注册中心和服务的消费者 。在数据流程中,服务提供者在启动服务之后将服务注册到注册中心;服务消费者(或称为服务消费方)在启动时,会从注册中心拉取相关配置,并将其放到缓存中 。注册中心的优势在于解耦了服务提供者和服务消费者之间的关系,并且支持弹性扩容和缩容 。当服务需要扩容时,只需要再部署一个该服务 。当服务成功启动后,会自动被注册到注册中心,并推送给消费者 。
(3)服务注册与发布:服务实例在启动时被加载到容器中,并将服务自身的相关信息,比如接口名称、接口版本、IP地址、端口等注册到注册中心,并使用心跳机制定期刷新当前服务在注册中心的状态,以确认服务状态正常,在服务终止时将其从注册表中删除 。服务注册包括自注册模式和第三方注册模式这两种模式 。
◎自注册模式:服务实例负责在服务注册表中注册和注销服务实例,同时服务实例要发送心跳来保证注册信息不过期 。其优点是,相对简单,无须其他系统功能的支持;缺点是,需要把服务实例和服务注册表联系起来,必须在每种编程语言和框架内部实现注册代码 。
◎第三方注册模式:服务实例由另一个类似的服务管理器负责注册,服务管理器通过查询部署环境或订阅事件来跟踪运行服务的改变 。当管理器发现一个新的可用服务时,会向注册表注册此服务,同时服务管理器负责注销终止的服务实例 。第三方注册模式的主要优势是服务与服务注册表是分离的,无须为每种编程语言和架构都完成服务注册逻辑 。相应地,服务实例是通过一个集中化管理的服务进行管理的;缺点是,需要一个高可用系统来支撑 。
(4)服务发现:使用一个注册中心来记录分布式系统中全部服务的信息,以便其他服务快速找到这些已注册的服务 。其目前有客户端发现模式和服务器端发现模式这两种模式 。
◎客户端发现模式:客户端从服务注册服务中查询所有可用服务实例的地址,使用负载均衡算法从多个服务实例中选择一个,然后发出请求 。其优势在于客户端知道可用服务注册表的信息,因此可以定义多种负载均衡算法,而且负载均衡的压力都集中在客户端 。
◎服务器端发现模式:客户端通过负载均衡器向某个服务提出请求,负载均衡器从服务注册服务中查询所有可用服务实例的地址,将每个请求都转发到可用的服务实例中 。与客户端发现一样,服务实例在服务注册表中注册或者注销 。我们可以将HTTP服务、Nginx的负载均衡器都理解为服务器端发现模式 。其优点是,客户端无须关注发现的细节,可以减少客户端框架需要完成的服务发现逻辑;客户端只需简单地向负载均衡器发送请求 。其缺点是,在服务器端需要配置一个高可用的负载均衡器 。
(5)流量削峰:使用一些技术手段来削弱瞬时的请求高峰,让系统吞吐量在高峰请求下可控,也可用于消除毛刺,使服务器资源的利用更加均衡、充分 。常见的削峰策略有队列、限频、分层过滤、多级缓存等 。
(6)版本兼容:在升级版本的过程中,需要考虑升级版本后新的数据结构能否理解和解析旧的数据,新协议能否理解旧的协议并做出预期内合适的处理 。这就需要在服务设计过程中做好版本兼容工作 。
(7)服务熔断:其作用类似于家用的保险丝 。当某服务出现不可用或响应超时的情况时,已经达到系统设定的阈值,为了防止整个系统出现雪崩,会暂时停止对该服务的调用 。
(8)服务降级:在服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略性地降级,以此释放服务器资源,保证核心任务的正常运行 。降级时往往会指定不同的级别,面对不同的异常等级执行不同的处理 。
(9)服务限流:服务限流可以被认为是服务降级的一种 。它通过限制系统的输入和输出流量来达到保护系统的目的 。一般来说,系统的吞吐量是可以被测算的 。为了保证系统的稳定运行,一旦达到阈值,就需要限制流量 。限制措施有延迟处理、拒绝处理或者部分拒绝处理等 。


推荐阅读