《大型网站技术架构》笔记:架构之高可用


网站的可用就是指网站可以进行有效访问,不可用就是服务器挂了,无法访问了,称为网站故障。
通常用多少个9来衡量网站的可用性。
如QQ的可用性为4个9,即99.99%,那么QQ一年之中不可用时间为:365×24×60×(1-99.99%)≈ 53分钟。

不可用的主要原因:
a.服务器硬件故障;
b.网站升级发布引起的宕机;

一个典型的网站设计基本分层架构:
应用层:不同业务产品,主要处理网站应用的业务逻辑;
服务层:共同的复用业务,如登录服务、账户管理等;
数据层:数据库服务、文件服务、缓存服务、搜索服务等

构建高可用架构的网站,主要从以上三个方面进行。


一、高可用的应用

分两种情况:应用无状态和应用有状态

1.1 应用无状态

所谓无状态的应用是指应用服务器不保存业务的上下文信息,而仅根据每次请求提交的数据进行相应的业务逻辑处理,多个服务实例(服务器)之间完全对等 ,请求提交到任意服务器,处理结果都是完全一样的。

使用负载均衡进行无状态服务的失效转移

负载均衡是指将流量和数据分摊到一个集群组成的多台服务器上,提高整体的负载处理能力。当任意一台服务器宕机时,负载均衡服务器通过心跳监测机制发现该服务失去响应,就会把它从服务器列表中删除,而将请求发送到其他服务器上。为了保证系统的高可用,即使流量很小的应用,也应该至少部署两台应用服务器,使用负载均衡技术构建一个小型的集群。

负载均衡可以通过开源的免费软件或负载均衡硬件实现,都提供失效转移功能。

1.2 应用有状态

由于业务总是有状态的,常常将这些状态(上下文对象)保存在会话(Session)中。此时面临的主要问题就是应用服务器集群的Session管理。
集群环境下,Session管理主要有以下几种方案:

  • Session复制
    定义:应用服务器开启Web容器的Session复制功能,集群中的几台服务器之间进行同步Session对象,使得每台服务器上都保存所有用户的Session信息。
    优点:任何一台服务器宕机都不会导致Session的丢失,而服务器使用Session时,只需要从本机获取即可。
    缺点:Session复制时的同步操作,会占用服务器和网络资源;每个服务器上都保存所有Session,在大量用户访问时,Session会占用大量内存,甚至超出服务器内存。

  • Session绑定
    定义:负载均衡服务器利用源地址Hash算法,将来自同一IP的请求分发到同一台服务器上,这种方法又叫会话黏滞。
    缺点:不符合高可用的要求,一旦某台应用服务器宕机,那么该机上的Session就会丢失,用户请求切换到其他服务器上就会因为没有Session而无法完成业务。很少采用该方式。

  • 利用Cookie记录Session
    定义:将Session通过Cookie保存在浏览器,每次请求时,将Session放在请求中发送给服务器,服务器处理完请求后,再将修改过的Session通过Cookie响应给浏览器。
    缺点:每次都传输Cookie,影响性能;如果用户关闭Cookie,访问就会不正常;Cookie大小有限制,能记录的信息有限。
    优点:简单易用,支持应用服务器的线性伸缩,许多网站或多或少都会使用Cookie记录Session。

  • Session服务器
    定义:独立部署Session服务器,统一管理Session,应用服务器每次读写Session时,都访问Session服务器。
    实现:一种简单的方法是利用分布式缓存、数据库等,在这些产品的基础上进行包装,使其符合Session的存储和访问要求。如果业务场景对Session管理有比较高的要求,比如利用Session服务集成单点登录(SSO)、用户服务等,则需要开发专门的Session服务管理平台。


二、高可用的服务

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

  • 分级管理
    核心应用和服务、优先级低的服务区别分配不同的资源
  • 超时设置
    在应用程序中设置服务调用的超时时间,一旦超时,通信框架就抛出异常,应用程序根据服务调度策略,可选择继续重试或者将请求转移到提供相同服务的其他服务器上。
  • 异步调用
    应用服务通过消息队列等异步方式进行调用,避免一个服务失败导致整个请求失败的情况。但对于必须确认服务调用成功才能进行下一步操作的应用不适合使用异步调用。
  • 服务降级
    在访问高峰期,为保证核心应用和功能的正常,对服务降级
  • 拒绝服务:拒绝低优先级应用的调用,减少服务调用的并发数或随机拒绝部分调用请求
  • 关闭功能:关闭部分不重要的服务或非核心服务
  • 幂等级设计
    在服务层必须保证服务重复调用和一次调用产生的结果相同,即服务具有幂等性。

三、高可用的数据

主要是指数据存储的高可用(不包含缓存数据的高可用),主要手段是数据备份和失效转移。

CAP原理
CAP原理认为,一个提供数据服务的存储系统无法同时满足数据一致性(Consistency)、数据可用性(Avalibaility)、分区耐受性(Partition Tolerance,系统具有跨网络分区的伸缩性)这三个条件。大型网站通常选择选择强化可用性和伸缩性,而在一定程度上牺牲一致性。
</br>数据一致性分类

  • 数据强一致:各个副本的数据在物理存储中总是一致的;数据更新操作和操作响应总是一致的。

  • 数据用户一致:数据在物理存储的各个副本的数据可能是不一致的,但是终端用户访问时,通过纠错和校验机制,可以确定一个一致的且正确的数据返回给用户。网站通常达到这一级别的一致性。

  • 数据最终一致性:一致性最弱的一种,即物理存储的数据可能是不一致的,不同用户同时访问的结果返回也可能不一致,但系统经过一段时间的自我恢复和修正,数据会达到最终一致。

  • 数据备份
    主要分为数据冷备份和热备份。冷备份是指定期将数据复制到某种存储介质。这种方式不能保证数据最终一致和数据可用,只是作为一种传统数据保护手段使用。热备份则是指对数据实时备份,分为异步热备和同步热备。

  • 异步热备份
    将服务器分为主、从服务器,数据写入时,由主服务器的写操作代理模块将数据写入本机存储系统后立即返回写操作成功的响应,然后通过异步线程将写操作同步到从服务器。

  • 同步热备份
    在应用程序客户端并发向多个存储服务器同时写入数据,然后等待所有存储服务器都返回操作成功的响应后,再通知应用程序写操作成功。这种情况下,没有主从之分,完全对等,便于管理和维护。由于并发写,所以性能和异步热备份差不多。

关系型数据库的Master-Slave同步机制不但解决了数据备份问题,还改善了性能:使用读写分离方式,写在Master,读在Slaver。
NoSQL都提供完备的实时备份机制。

  • 失效转移
    某台服务器宕机后,将读写操作转移到其他服务器上。失效转移操作主要由三部分组成:失效确认、访问转移、数据恢复
  • 失效确认:心跳监测和应用程序的访问失败报告
  • 访问转移:对于完全对等的服务器,直接切换到对等的服务器上即可。如果存储不对等,就要重新计算路由,选择存储服务器。
  • 数据恢复:将数据副本数目恢复到设定值

四、软件质量保证

  • 网站发布:使用发布脚本完成,逐步更新
  • 自动化测试
  • 预发布验证:先把代码发到预发布服务器上进行验证,预发布服务器与正式服务器所有环境均一致,只是外部无法访问。
  • 代码控制:一般采用分支开发,主干发布
  • 自动化发布
  • 灰度发布

五、网站运行监控

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

推荐阅读更多精彩内容

  • 网站的可用性强调的是对最终用户的使用价值。它牵动着人们的神经,直接影响着公司的形象和利益,许多互联网公司都将网站的...
    deniro阅读 3,637评论 0 18
  • 概述 1 架构演化大型网站的关注指标高可用 高性能 易扩展 可伸缩 安全 大型网站的特点高并发,大流量 高可用 海...
    西西老师阅读 2,814评论 0 12
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 大型网站架构 网站架构包括:前端架构+应用层架构+服务层架构+存储层架构+后台架构+数据中心机房架构+安全架构+数...
    运维开发笔记阅读 1,094评论 0 7
  • 大型网站架构演化 大型网站的关注指标 高可用 高性能 易扩展 可伸缩 安全 大型网站的特点 高并发,大流量 高可用...
    技术修行者阅读 2,560评论 1 13