欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


欢迎跳转到本文的原文链接:https://honeypps.com/architect/how-to-ensure-the-usability-of-your-website/

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


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

  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. 监控管理:系统报警;失效转移;自动优雅降级;

欢迎跳转到本文的原文链接:https://honeypps.com/architect/how-to-ensure-the-usability-of-your-website/

欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


怎么确保网站的可用性相关推荐

  1. 大型网站技术架构02 网站的高性能架构、网站的可用性架构

    大型网站核心架构要素 1. 性能 2. 可用性 3. 伸缩性 4. 扩展性 5. 安全性 瞬时响应:网站的高性能架构 1. 网站性能测试: 1). 不同视角下的网站性能 a. 用户视角的网站性能:用户 ...

  2. 17. 监测 web 网站的可用性

    文章目录 17. 监测 web 网站的可用性 17.1 配置 web 监测 17.2 查看 web 监测 17.3 配置 web 监控项 17.4 配置触发器 17. 监测 web 网站的可用性 使用 ...

  3. DIV与Table布局在大型网站的可用性比较

    DIV与TABLE本身并不存在什么优缺点,所谓web标准只是推荐的是正确的使用标签,好比说:DIV用于布局,而TABLE则本来就是转二维数据的.让TABLE做该做的事,并不是说页面里不出现TABLE就 ...

  4. 网络安全职业规划(笔记)

    介绍:本次课程包括了等级保护的介绍.安全的基础知识.二/三级等保.云计算安全.物联安全.移动互联安全场景化方案,课程还将结合目前行业等保建设的场景.模式.经验三个维度从理论到实践再到产品和厂商对比等 ...

  5. 等保2.0.第五章.网络安全产品与方案(中)

    文章目录 流控产品ACG 流控与行为管理 BON-新一代ACG应用控制网关 精细化应用控制和审计 日志报表-事后行为审计 特色功能-深度数据挖掘 用户行为分析 特色功能-智能选路 特色功能-极速上线 ...

  6. 基于客户端用户行为记录的网站可用性分析工具研究

    基于客户端用户行为记录的网站可用性分析工具研究 白文涛 刘正捷 陈军亮 大连海事大学欧盟可用性中国中心 116026 http://usability.dlmu.edu.cn 摘要:如何改善网站的可用 ...

  7. 网站改版后确保无误才能上线!

    在企业网站建成后,经过长时间运营之后难免会遇到改版的情况发生,由于网站改版是提高网站用户体验的必经之路,因此,企业网站为了保证网站的排名.流量以及权重的方面内容,一定要注意网站改版时需要注意的一些细节 ...

  8. 25个提高网站可用性和转化率的工具

    25个提高网站可用性和转化率的工具 网站建设的核心关键是"如何发现潜在客户并有效的转化为合作客户",这里提到有效的转化也就是说找到的客户不一定会选用我们的产品或者服务,成为了我们的 ...

  9. 电商总结(八)如何打造一个小而精的电商网站架构

    前面写过一些电商网站相关的文章,这几天有时间,就把之前写得网站架构相关的文章,总结整理一下.把以前的一些内容就连贯起来,这样也能系统的知道,一个最小的电商平台是怎么一步步搭建起来的.对以前的文章感兴趣 ...

最新文章

  1. cuba.platform_CUBA 7.2 –有什么新功能?
  2. QT+vs2010下改变可执行程序的图标
  3. Error:Connection timed out: connect
  4. 数字带通滤波器c语言程序,C语言编写FIR数字低通滤波器
  5. 不来看看这些 VUE 的生命周期钩子函数? | 原力计划
  6. 树莓派上的Docker集群管理
  7. 狂神说springboot源码_狂神说SpringBoot04:JSR303数据校验及多环境切换
  8. 【问题】myeclipse启动时Tocmat错误:cound not create the view :An unexpencted expetion was thrown
  9. oracle主键函数,oracle 主键+1 或 -1 的函数
  10. matlab画经纬度点图,Matlab绘制汉经纬度的散点图 1
  11. html5课程总结500字,月考总结500字作文5篇
  12. Springboot 整合 阿里云消息队列RabbitMQ版服务
  13. 举个栗子~Minitab 技巧(5):掌握常用快捷键,提高统计分析效率
  14. iOS相册、拍照、iCloud使用
  15. WPF圆角按钮及触发背景变更_se7en3_新浪博客
  16. 可汉学院python_A可汗学院-统计学python实现1-10
  17. Excel VBA密码破解工具(VBA实现)
  18. 2020-319 几种分类器评估与调优方法手写整理 37互娱笔试题
  19. Layui数据表格显示无数据提示问题
  20. hive只复制表结构不复制表数据

热门文章

  1. python查找指定字符串并替换_python 查找字符串并将其替换
  2. Django 2 零基础 - 待办清单网站
  3. TVS 管性能及选型总结
  4. 【测试基础】测试用例的设计方法
  5. Nginx 常用配置(学习笔记三)
  6. Silverlight与HTML双向交互
  7. 扩展的母函数(可以做减法的母函数)(当然只要你愿意也可以做乘除!)
  8. php代码审计基础笔记
  9. 用Linux命令行生成随机密码的十种方法
  10. HDU - 2243 考研路茫茫——单词情结(AC自动机+矩阵快速幂)