学习笔记:确保网站的可用性

标签: 学习 笔记 网站 | 发表时间:2016-02-21 00:00 | 作者:u013256816
出处:http://blog.csdn.net

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

高可用的应用


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

  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. 监控管理:系统报警;失效转移;自动优雅降级;
作者:u013256816 发表于2016/2/20 16:00:38 原文链接
阅读:0 评论:0 查看评论

相关 [学习 笔记 网站] 推荐:

学习笔记:确保网站的可用性

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

shell 学习笔记

- tiger - 游戏人生
将脚本目录加到 PATH 中. 在 dash 中如何进行字符串替换. 将 rst 格式文档转换为 blog 可用的 html 代码. shell 脚本虽然不是非常复杂的程序, 但对于首次接触的我来讲, 多少还是有些忌惮. 不过, 接触任何新事物都需要勇敢面对, 逐步树立信心. 我是冲着把脚本写好去的, 所以, 我的目标是能够写出友好, 健壮, 优美的脚本..

OAuth学习笔记

- 宋大妈 - FeedzShare
来自: 标点符 - FeedzShare  . 发布时间:2011年08月29日,  已有 2 人推荐. OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据.

Vim学习笔记

- 临池学书 - C++博客-首页原创精华区
最近在学习Vimtutor中的相关内容,Vim的使用博大精深,很多命令一旦不使用就会忘记,下面把其中的没有使用到的相关命令做一个简单的总结,供以后复习使用. 至于常见的保存,插入等等命令,则不予记录,在以后的使用中加深练习即可. To change until the end of a word, type  ce (ce + 修正的单词).

OAuth学习笔记

- jiaosq - 标点符
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据. 每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频).

HTML学习笔记

- - CSDN博客推荐文章
超文本标记语言( 英文:HyperText Markup Language,HTML)是为“ 网页创建和其它可在 网页浏览器中看到的信息”设计的一种 标记语言. HTML被用来结构化信息——例如标题、段落和列表等等  点击打开链接. w3schools  点击打开链接 {语法大全,超赞.

jQuery学习笔记

- - ITeye博客
什么是jQuery,它能为我们做什么. jQuery是一个javascript类库或称之为javascript框架. 无需刷新页面从服务器获取信息. 简化常见的javascript任务. 为什么会如此流行或说得到大量用户群的支持:. 多重操作集于一行(避免使用临时变量或不必要的重复代码). jQuery利用了CSS选择符的能力,在DOM中快捷而轻松地获取元素或元素集合.

JdbcTemplate学习笔记

- - SQL - 编程语言 - ITeye博客
1、使用JdbcTemplate的execute()方法执行SQL语句. 2、如果是UPDATE或INSERT,用update()方法.    JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等. spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现.

Disruptor 学习笔记

- - 开源软件 - ITeye博客
Disruptor 是一个高性能异步处理框架,也可以认为是一个消息框架,它实现了观察者模式. Disruptor 比传统的基于锁的消息框架的优势在于:它是无锁的、CPU友好;它不会清除缓存中的数据,只会覆盖,降低了垃圾回收机制启动的频率. Disruptor 为什么快. 通过内存屏障和原子性的CAS操作替换锁.

Activiti学习笔记

- - 企业架构 - ITeye博客
第一个Activiti的HelloWorld. 获取核心ProcessEngine对象 2. 根据需求,获取对应的服务实例 3. 使用服务方法,做事情 * * @author Administrator * */ public class HelloWorld {. // 加载核心API ProcessEngine.