您的位置:首页 > 运维架构 > 网站架构

2.2网站的高可用架构之高可用服务

2017-11-22 17:29 489 查看
可复用的模块为业务产品提供基础公共服务,大型网站中这些服务通常都是独立的分布式部署,被具体应用远程调用,可复用的服务和应用一样,也是无状态的服务,因此可以利用类似负载均衡的失效转移策略实现高可用的服务。高可用的服务策略有以下几点。

1、分级管理

运维上将服务器进行分级管理,核心应用及服务使用更好的资源,例如订单服务、支付服务比评价服务有更高的优先级。同时在部署上也要进行必要的分离,低优先级的服务通过启动不同的线程或者部署在不同的虚拟机上进行隔离,而高优先级的服务要部署在不同的物理机上,甚至要部署在不同地域的数据中心。

2、超时设置

由于服务器宕机、线程死锁等原因,可能导致应用程序对服务端的调用失去响应,进而导致用户请求长时间得不到响应,同时还占据着程序资源。在应用程序中设置超时时间,一旦超时,通信框架抛出异常,应用服务根据调度策略,可以选择重试或者将请求转发到提供相同服务的其他服务器上。

3、异步调用

对于一个用户注册请求,应用需调用三个服务:将用户信息写入数据库、发送账户注册成功邮件、开通对应权限。若采用同步服务调用,若邮件队列阻塞不能发送,会导致其他两个服务也无法执行,最终导致账户注册失败。

若采用异步调用的方式,应用程序将用户注册信息写入消息队列后立即返回用户注册成功响应,而剩下来三个服务作为消息的消费者任务,分别从消息队列获取用于注册信息异步执行。即使邮件队列阻塞,邮件不能发送成功,也不会影响其他服务执行,用户注册操作成功,只是晚一点收到注册成功邮件而已。

也不是所有的服务调用都可以为异步调用,对于获取用户信息的这类调用,采用异步调用会延长响应时间,对于那些必须确认服务调用成功的应用才能进行下一步操作的应用也不适合异步调用。

4、服务降级

在网站访问高峰期,为了保证核心业务的运行,可以对服务进行降级:拒绝服务或关闭服务。

5、幂等性

应用调用服务失败后,会将请求重新发送到其他服务器,但这个失败可能是服务已经处理成功,因为网络故障应用没有收到响应,这是应用重新提交请求就会导致服务重新调用,若这是转账操作,就会导致严重影响。

因此高可用服务要求在服务层保证服务重复调用和调用一次产生的结果相同,即服务具有幂等性。如将用户设置为男性等操作天然具有幂等性,但转账就比较复杂,需要通过交易编号等处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  web应用