怎么确保网站的可用性

简介:   网站的高可用架构设计的主要目的就是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问。   实现上述高可用架构的主要手段是数据和服务的冗余备份及失效转移。   典型的分层模型是三层,即应用层、服务层、数据层;各层之间具有相对独立性,应用层主要负责具体页面逻辑处理;服务层负责提供可复用的服务;数据层负责数据的存储于访问。

  网站的高可用架构设计的主要目的就是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问。
  实现上述高可用架构的主要手段是数据和服务的冗余备份失效转移
  典型的分层模型是三层,即应用层、服务层、数据层;各层之间具有相对独立性,应用层主要负责具体页面逻辑处理;服务层负责提供可复用的服务;数据层负责数据的存储于访问。中小型网站在具体部署时,通常将应用层和服务层部署在一起,而数据层则另外部署。
  在复杂的大型网站架构中,划分的粒度会更小、更详细,结构更加复杂,服务器规模更加庞大,但通常还是能够把这些服务划分到这三层中。

高可用的应用


  应用层主要处理网站应用的业务逻辑,因此有时也称作为业务逻辑层,应用的一个显著特点是应用的无状态性。

  1. 通过负载均衡进行无状态服务的失效转移
    负载均衡,顾名思义,主要使用在业务量和数据量较高的情况下,当单台服务器不足以承担所有的负载压力时,通过负载均衡手段,将流量和数据分摊到一个集群组成的多台服务器上,以提高整体的负载处理能力。
    目前,不管是开源免费的负载均衡软件还是昂贵的负载均衡硬件,都提供失效转移功能。
  2. 应用服务器集群的Session管理
    应用服务器的高可用架构设计主要基于服务无状态这一特性,但是事实上,业务总是有状态的。
    web应用中将这些多次请求修改使用的上下文对象称作会话(Session),单机情况下,Session可由部署在服务器上的Web容器管理。在使用负载均衡的集群环境中,由于负载均衡服务器可能会将请求分发到集群任何一台应用服务器上,所以保证每次请求依然能够获得正确的Session比单机时要复杂很多。

  集群环境下,Session管理主要有以下几种手段。

  1. Session复制:方案简单,从本机读取session信息也很快速,但只能使用在集群规模比较小的情况下。当集群规模较大时,集群服务器间需要大量的通信进行Session复制,占用服务器和网络的大量资源,系统不堪重负。
  2. Session绑定:可以利用负载均衡的源地址Hash算法实现,负载均衡服务器总是将来源于同一ip的请求分发到同一台服务器上(也可以更具Cookie信息将同一个用户的请求总是分发到同一台服务器上,当然这是负载均衡服务器必须工作在http层上)。但是session绑定的方案显然不符合我们队系统高可用的需求,因为一旦某台服务器宕机,那么该机器的session就不复存在了,用户请求切换到其他机器后因为没有session而无法完成业务处理。
  3. 利用Cookie记录session:可以利用浏览器支持的Cookie记录session,但是有一些缺点,比如受Cookie大小限制,能记录的信息有限,每次请求响应都需要传输cookie;如果关闭cookie,访问就会不正常。
  4. Session服务器:利用独立部署的Session服务器(集群)统一管理Session,应用服务器每次读写Session时,都访问Session服务器。这种解决方案实际上是将应用服务器的状态分离,分为无状态的应用服务器和有状态的Session服务器,然后针对这两种服务器的不同恶性分别设计其架构。

高可用的服务


  可复用的服务模块为业务产品提供公共服务,大型网站中这些服务通常都独立分布式部署,被具体应用远程调用。可复用的服务和应用一样,也是无状态的服务,因此可以使用类似负载均衡的失效转移策略实现高可用的服务。
  除此之外,具体实践中,还有以下几点高可用的服务策略。

  1. 分级管理
    运维上将服务器进行分机管理,核心应用和服务有限使用更好的硬件,在运维响应速度上爷格外迅速。显然,用户及时付款购物比能不能评价商品更重要,所以订单、支付服务比评价服务有更高优先级。同事在服务部署上也进行必要的隔离,避免故障的连锁反应。
  2. 超时设置
    在应用程序中设置服务调用的超时时间,一旦超时,通信框架就抛出异常,应用程序根据服务调度策略,可选择继续重试或者将请求转移到提供相同服务的其他服务器上
  3. 异步调用
    应用对服务的调用通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况。
    当然不是多有服务调用都可以异步调用,对于获取用户信息这类调用,采用异步方式会延长响应时间,得不偿失。对于那些必须确认服务调用成功才能继续下一步操作的应用也不合适使用异步调用。
  4. 服务降级
    降级有两种手段:拒绝服务及关闭服务
  5. 幂等性设计
    有些服务天然具有幂等性,比如讲用户性别设置为男性,不管设置多少次,结果都一样。但是对转账交易等操作,问题就会比较复杂,需要通过交易编号等信息进行服务调用有效性校验,只有有效的操作才能继续执行。
    (注:幂等性是系统的接口对外一种承诺(而不是实现), 承诺只要调用接口成功, 外部多次调用对系统的影响是一致的. 声明为幂等的接口会认为外部调用失败是常态, 并且失败之后必然会有重试.)

高可用的数据


  保证数据存储高可用的手段主要是数据备份和失效转移机智。

网站运行监控


  “不允许没有监控的系统上线“,这是许多网站架构师在做项目上线评审时常说的一句话。网站运行监控对于网站运维和架构设计优化至关重要,运维没有监控的网站,犹如驾驶没有仪表的飞机。盲人骑瞎马,夜班临深渊而不知,生死尚且未卜,提高可用性、减少故障率就更无从做起了。

  1. 监控数据采集:用户行为日志收集;服务器性能监控;运行数据报告;
  2. 监控管理:系统报警;失效转移;自动优雅降级;
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
11天前
|
弹性计算 运维 Shell
检查网站可用性
【4月更文挑战第30天】
18 0
|
23天前
|
安全 API 数据安全/隐私保护
如何确保无感验证码在不同操作系统上的稳定性和可靠性
确保无感验证码在多操作系统上的稳定与可靠性,需关注适配与测试、数据收集分析、容错处理、安全隐私保护及持续监测改进。开发者应理解各系统特性,进行代码适配和全面测试,确保兼容性;准确收集分析数据,设计容错机制,提升可靠性;同时注重用户数据安全,遵守隐私法规,建立监测机制以持续优化验证码性能。这些措施旨在提供无缝用户体验和安全保障。
|
5月前
|
存储 测试技术 Linux
存储稳定性测试与数据一致性校验工具和系统
LBA tools are very useful for testing Storage stability and verifying DATA consistency, there are much better than FIO & vdbench's verifying functions.
930 0
|
数据采集 SQL 安全
不当的风险暴露面可能对数据安全造成什么影响
不当的风险暴露面可能对数据安全造成什么影响
162 0
|
存储 Kubernetes Java
K8s集群稳定性提升手段
K8s集群稳定性提升手段
K8s集群稳定性提升手段
|
监控
SLA服务可用性4个9是什么意思?怎么达到?
SLA:服务等级协议(简称:SLA,全称:service level agreement)。是在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。
736 0
|
Java Linux 程序员
如何提高阿里云上应用的可用性(二)
这是如何提高阿里云上应用的可用性系列文章的第二篇,第一篇传送门。 在单体应用时代,最大的问题是如何解决数据库瓶颈,而微服务之下,一个大应用被拆分成了几十个甚至上百个微服务,数据访问的压力被传导到了服务之间的网络,服务强弱依赖,服务雪崩等各种问题随之而来,那么如何保障服务的可用性以及整个应用的健壮性.
2239 0
|
Java 应用服务中间件 数据库
如何提高阿里云上应用的可用性(一)
如今,开发并上线一款应用十分方便。因为云计算提供了从最基础的计算资源如服务器网络、数据库服务、中间件PaaS平台到各种应用支撑的云管理服务,同时开源社区的迅猛发展也提供了从数据库、缓存到应用全生命流程中各种必须的组件,所以越来越多的应用开发者可以把精力放在业务创新上。
2702 0
|
监控 NoSQL 关系型数据库
|
安全 网络协议 物联网