大型网站技术架构(三)

可用性

网站可用性度量

  • 网站不可用时间(故障时间) = 故障修复时间点 - 故障发现时间点
  • 网站年度可用性指标 = (1 - 网站不可用时间/年度总时间) * 100%

高可用网站架构

  • 目的: 保证服务器硬件故障时服务依然可用,数据依然保存并能够被访问
  • 主要手段: 冗余备份和失效转移(心跳检测也是一种失效转移策略)
大型网站的分层架构(应用层/服务层/数据层,甚至更小粒度)及物理服务器的分布式部署使得位于不同层次的服务器具有不同的可用性特点
高可用的应用
  • 应用层: 主要处理网站应用的业务逻辑,一个显著特点就是应用的无状态性.所谓无状态应用指应用服务器不保存业务的上下文信息,请求提交到任意服务器,处理结果都是完全一致的
  • 通过负载均衡进行无状态服务的失效转移: 基于应用服务器的无状态性,实现服务器可用状态实时监测,自动失效转移的机制就是负载均衡
  • 应用服务器集群的Session管理: 事实上,业务总是有状态的,如记录用户当前登录状态,用户每次刷新页面都需要更新这些信息.Web应用中这些多次请求修改使用的上下文对象称作会话(Session).单机情况下,Session由部署在服务器上的Web容器管理;集群环境中,由于负载均衡服务器可能会将请求分发到集群中任意一台应用服务器上,所以保证每次请求获取正确的Session要比单机复杂的多.集群环境下,Session管理主要有以下几种手段
    1.Session复制
    原理: 每台服务器都保存所有用户的Session信息
    缺陷: 集群规模较大时,Session复制会占用服务器和网络大量资源,系统不堪重负;服务器内存不够Session使用


    使用Session复制实现应用服务器共享Session.png

    2.Session绑定
    原理: 利用负载均衡源地址Hash算法实现,负载均衡服务器总是将来源于同一IP请求分发到同一台服务器上.Session绑定在某台特定服务器上,保证Session总能在这台服务器上获取,这种方法称为会话黏滞
    缺陷: 一旦某台服务器宕机,该机器上的Session信息将不复存在


    利用负载均衡的会话黏滞机制将请求绑定到特定服务器.png

    3.利用Cookie记录Session
    原理: 将Session记录在客户端,每次请求服务器时,将Session放在请求中发送给服务器,服务器处理完成再将修改过的Session响应给客户端
    缺陷: 受Cookie大小限制,能记录的信息有限;每次请求响应都需要传输Cookie,影响性能;若用户关闭Cookie,则访问不正常;由于Cookie简单易用,可用性高,支持应用服务器线性伸缩,大部分需记录的Session信息又比较小,事实上许多网站使用Cookie记录Session
    利用Cookie记录Session信息.png

    4.Session服务器

    原理: 利用独立部署的Session服务器(集群)统一管理Session.这种解决方案事实上是将应用服务器的状态分离,分为无状态的应用服务器和有状态的Session服务器


    利用Session服务器共享Session.png
高可用的服务
  • 分级管理: 核心应用和服务优先使用更好的硬件,同时在服务部署上也进行必要的隔离
  • 超时设置: 设置服务调用超时时间,一旦超时,通信框架就抛出异常,应用程序可根据服务调度策略,选择继续重试或失效转移
  • 异步调用: 消息队列
  • 服务降级: 保证核心应用和功能的正常运行,需要对服务降级.降级有两种手段:拒绝服务(拒绝低优先级应用调用,减少服务并发数,或随机拒绝部分请求)或关闭服务(关闭部分不重要的服务)
  • 幂等性设计: 服务重复调用和调用一次产生的结果相同
高可用的数据
保证数据存储高可用的手段主要是数据备份和失效转移机制
  • 高可用数据含义
  1. 数据持久性: 保证数据可持久存储,不但在写入数据时需要写入持久性存储,还需要将数据备份多个副本,存放在不同的物理存储设备上,在故障或灾害发生时保证数据不丢失
  2. 数据可访问性: 多份副本存放在不同存储设备的情况下,若一个数据存储设备损坏,就需要将访问切换到另一个数据存储设备上,若这个过程不能很快完成,或在完成过程中需要停止终端用户访问数据,那么这段时间数据是不可访问的
  3. 数据一致性: 在数据有多个副本情况下,服务器/网络/软件出现故障,会导致部分副本写入成功,部分副本写入失败,造成各个副本之间副本不一致.数据不一致分为以下三种:
    数据强一致: 各个副本物理存储中总是一致;数据更新操作总是一致的,而不是处于不确定状态
    数据用户一致: 各个副本物理存储可能不一致,但用户访问时通过纠错和校验机制,可以确定一个正确且一致的数据返回给用户
    数据最终一致: 物理存储和用户访问都可能不一致,系统经过一段时间自我修复和修正,数据最终一致
  • CAP理论: 一个提供数据服务的存储系统无法同时满足数据一致性(Consistency),数据可用性(Availibility),分区耐受性(Patition Tolerance,系统具有跨网络分区的伸缩性)这三个条件.大型网站通常会选择强化分布式存储系统的可用性(A)和伸缩性(P),在某种程度放弃一致性(C).针对分布式数据处理系统的数据不一致进行补偿和纠错,避免出现应用系统数据不正确


    CAP原理.png
  • 数据备份
  1. 数据冷备: 优点是简单廉价技术难度低;缺点是不能保证数据最终一致,若系统数据丢失,从上个冷备点开始后的数据将永久丢失,同时无法保证数据可用性,恢复数据需要较长时间,导致系统不可用
  2. 数据热备: 分为异步热备和同步热备,关系型数据库热备机制就是通常所说的Master-Slave机制


    数据异步热备.png

    数据同步热备.png
  • 失效转移
    原理: 集群中任何一台服务器宕机,针对这台服务器所有读写操作都需要重新路由到其他服务器,保证数据访问不会失败,这个过程即为失效转移

失效转移操作由三部分组成: 失效确认,访问转移,数据恢复

  1. 失效确认: 判断服务器宕机是系统进行失效转移的第一步,系统确认一台服务器是否宕机的手段有两种:心跳检测和应用程序访问失败报告.对于应用程序访问失败报告,系统会再次发送心跳检测进行确认,以免错误判断服务器宕机


    存储服务器失效确认.png
  2. 访问转移: 确认某台数据存储服务器宕机后,需要将数据读写访问重新路由到其他服务器上
  3. 数据恢复: 从健康服务器复制数据,将数据副本数目恢复到设定值

高可用网站的软件质量保证

  • 网站发布: 飞行中的飞机换引擎,既不能让飞机剧烈晃动(影响用户体验),也不能让飞机降落(系统停机维护),更不能让飞机坠毁(系统故障网站完全不可用)


    网站应用发布流程.png
  • 自动化测试
  • 预发布验证: 预发布服务器和线上正式服务器唯一不同就是没有配置在负载均衡服务器上,外部用户无法访问.工程师通过配置hosts文件绑定域名IP关系或直接使用IP地址访问


    网站应用预发布.png
  • 代码控制: 如何进行代码管理,技能保证代码发布版本稳定正确,又能保证不同团队开发互不影响
  • 自动化发布: 火车发布模型


    网站火车发布模型.png
  • 灰度发布: 部分服务器发布新版本,其余服务器保持老版本,然后监控用户操作行为,收集用户体验报告,比较用户对两个版本的满意度,确定最终的发布版本.这种手段也被称为AB测试


    网站灰度发布模型.png

网站运行监控

不允许没有监控的系统上线
  • 监控数据采集
    用户行为日志收集: 服务器端日志收集/客户端浏览器日志收集
    服务器性能监控: 收集服务器性能指标,如系统Load/内存占用/磁盘IO/网络IO等
    运行数据报告: 收集相关技术和业务指标,如缓存命中率/平均响应时间/吞吐量等
  • 监控管理
    系统报警
    失效转移
    自动优雅降级
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354