高可用——服务

摘要:
可复用的服务和应用一样,也是无状态的服务,因此可以使用类似负载均衡的失效转移策略实现高可用的服务。除此之外,具体实践中,还有以下几点高可用的服务策略。如果采用异步调用的方式,应用程序将用户注册信息发送给消息队列服务器后立即返回用户注册成功响应。为了确保核心应用和功能的正常运行,需要对服务进行降级。

高可用——服务第1张

核心知识点:

服务高可用的手段

1.无状态服务的失效转移策略

2.分级管理:核心服务区别对待(处理多的先吃肉)

3.超时设置:不要让错误一直存在

4.异步调用:一节车厢坏了不要影响整趟列车

5.服务降级:关键的时候先护住头

6.幂等性设计:避免重复请求带来的问题

可复用的服务模块为业务产品提供基础公共服务,大型网站中这些服务通常都独立分布式部署,被具体应用远程调用。

可复用的服务和应用一样,也是无状态的服务,因此可以使用类似负载均衡的失效转移策略实现高可用的服务。

除此之外,具体实践中,还有以下几点高可用的服务策略。

1.分级管理

运维上将服务器进行分级管理,核心应用和服务优先使用更好的软件,在运维响应速度上也格外迅速。

显然,用户及时付款购物比能不能评价商品更重要,所以订单支付服务比评价服务有更高优先级。

同时在服务部署上也进行必要的隔离,避免故障的连锁反应。

低优先级的服务通过启动不同的线程或者部署在不同的虚拟机上进行隔离,

而高优先级的服务则需要部署在不同的物理机上,核心服务和数据甚至需要部署在不同地域的数据中心。

2.超时设置

由于服务端宕机、线程死锁等原因,可能导致应用程序对服务端的调用失去响应,

而导致用户请求长时间得不到响应,同时还占用应用程序的资源,不利于及时将访问请求转移到正常的服务器上。

在应用程序中设置服务的调用时间,一旦超时,通行框架就抛出异常,

应用程序根据服务调度策略,可选择继续重试或将请求转移到提供相同服务的其它服务器上。

3.异步调用

应用对服务的调用通多消息队列等异步方式完成,避免一个服务失效导致整个应用请求失效的情况。

如提交一个新用户注册请求,应用需要调用三个服务:将用户信息写入数据库,发送账户注册成功邮件,开通对应权限。

如果采用同步服务调用,当邮件队列阻塞不能发送邮件时,会导致其它两个服务也无法执行,最终导致用户注册失败。

如果采用异步调用的方式,应用程序将用户注册信息发送给消息队列服务器后立即返回用户注册成功响应。

而记录用户注册信息到数据库、发送用户注册成功邮件、调用用户开通权限着三个服务作为消息的消费者任务,分别从消息队列获取用户注册信息异步执行。

即使邮件服务队列阻塞,邮件不能成功发送,也不会影响其它服务的执行,用户注册操作课顺利进行,只是晚一点收到注册成功的邮件而已。

当然不是所有的服务都可以异步调用,对于获取用户信息这类调用,采用异步方式调用会延长响应实践,得不偿失。

对于那些必须确认服务调用成功才能继续下一步操作的应用也不适合使用异步调用。

4.服务降级

在网站访问高峰期,服务可能因为大量的并发而性能下降,严重时可能会导致服务宕机。

为了确保核心应用和功能的正常运行,需要对服务进行降级。降级有两种手段:拒绝服务及关闭服务

拒绝服务:拒绝低优先级应用的调用,减少服务调用并发数,确保核心应用正常使用;

或者随机拒绝部分请求调用,节约资源,让一部分请求得以成功,避免要死大家一起死的惨剧。

貌似Twitter(推特)比较喜欢使用随机拒绝请求的策略,经常有用户看到请求失败的故障页面,

但是周边的其他人都能正常使用,自己再刷新,也好了。

关闭功能:关闭部分不重要的服务,或者服务内部关闭部分不重要的功能,以节约系统开销,为重要的服务和功能让出资源。

淘宝在每年的“双十一”促销中就使用这种方法,在系统最繁忙的时段关闭“评价”、“确认收货”等非核心服务,以确保及核心交易服务的顺利完成。

5.幂等性设计

应用调用服务失败后,会将调用请求重新发送到其它服务器,但是这个失败可能是虚假的失败。

比如服务已经处理成功,但是因为网络故障应用没有收到响应,这时应用重新提交请求就导致服务重复调用,

如果这个服务是一个转账操作,就会产生严重的后果。

服务重复调用是无法避免的,应用层也不需要关心服务是否真的失败,

只要没有收到服务调用成功的响应,就可以认为调用失败,并重试调用服务。

因此必须在服务层保证服务重复调用和调用一次产生的结果相同,即服务具有幂等性。

有些服务天然具有幂等性,比如将用户性别设置为男性,不管设置多少次,结果都一样。

但对于转账交易等操作,问题就会比较复杂,需要通过交易编号等信息进行服务调用有效性检验,只有有效的操作才能继续执行。

联想场景:

一个服务将相当于古代的一群士兵,有首领、有普通士兵、也还有后勤人员,它们住手在特定的地方,行驶一定的职能。

(1)失效转移:如果这队士兵全军覆没,肯定有其它的小队补上来,干他们的活。

(2)分级管理:首领和后勤的伙夫肯定待遇不一样,因为重要性不一样。

(3)超时管理:比如有一个伙夫请假回家了,等了好久都没反应肯定不能一直等吧,换人啊。

(4)异步调用:现在这队士兵要换防,换防途中交通阻塞,不能马上到,只是会晚点到,你不能报告上级说换房不成功吧。

(5)服务降级:遇上粮草短缺,伙夫就不能吃肉了,而士兵还得吃,只是把伙夫的给了士兵,因此此时士兵更重要。

(6)幂等性处理:第一个逃兵和第二个逃兵最后的处理结果要一样。

免责声明:文章转载自《高可用——服务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JUDE-UML工具软件介绍yum 安装redis下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

教你七招提高.NET网站性能

一、减少往返行程(Reduce Round Trips) 使用下面的方法可以减少Web服务器和Browser之间的往返行程: 1、为Browser启用缓存 如果呈现的内容是静态的或变化周期较长,应启用Browser缓存,避免发出冗余的http请求。 2、缓冲页面输出 如果可能,则尽量缓冲页面输出,处理结束后再一次传送到客户端,这可以避免频繁传递小块...

corosync和pacemaker的安装部署

1.搭建集群 1)     改名,hostnamectl set-hostname node1 2)     更改/etc/hosts文件,scp hosts node2和node3上 3)     三机器互信,ssh-keygen,ssh-copyid node2,node3 4)     三机器时间同步,更改chrony.conf文件,node1为时间...

微服务高可用方案

微服务高可用方案 一、微服务的高可用 在注册中心、配置中心高可用方案之前,了解一下注册中心的工作原理,下面分为两个部分来解释,一是注册中心和各个微服务的注册表的获取与同步,二是注册中心如何去维护注册表。 1.1、注册表的获取与同步 Eureka Server和Eureka Client之间的关系,通过注册表来维护,而注册表的通过Eureka Server集...

产品逻辑中的—B端技术常识:同步异步接口模式

参看:http://www.woshipm.com/pd/3085570.html;http://www.woshipm.com/pd/3544202.html 在软件开发中,接口是一个非常重要的概念。所谓接口,是指两个对象进行通信的方式和协议。 软件领域的接口和我们生活中所使用的硬件设备的接口(例如USB接口、苹果的Lighting接口、3.5mm耳机接...

两种常见的mysql集群架构

常见的mysql集群架构 根据业务发展阶段和业务代码部署情况不同,对于扩展单数据库可以使用以下几种部署架构模型 单地域高可用架构 单地域高可用架构的构成 dbproxy数据库代理: 主要处理:读写分离,主从切换等。 主库(高可用):处理业务写流量。 从库(多实例,可选高可用):处理业务读流量。 单地域高可用的架构可以处理 业务流量在单地域的的业务结...

Spring Boot -- Spring Boot之@Async异步调用、Mybatis、事务管理等

这一节将在上一节的基础上,继续深入学习Spring Boot相关知识,其中主要包括@Async异步调用,@Value自定义参数、Mybatis、事务管理等。 本节所使用的代码是在上一节项目代码中,继续追加的,因此需要先学习上一节内容。 一、使用@Async实现异步调用 要在springboot中使用异步调用方法,只要在被调用的方法上面加上@Async就可以...