《大型网站技术架构》读书笔记之五:万无一失之网站的高可用架构

news/2024/5/20 20:39:32/文章来源:https://blog.csdn.net/weixin_34290390/article/details/86053749

此篇已收录至《大型网站技术架构》读书笔记系列目录贴,点击访问该目录可获取更多内容。

一、可用性度量与考核

  首先,不得不说:要保证一个网站永远完全可用几乎是一件不可能完成的任务(Mission Impossible,是不是有点碟中谍的感觉)

   (1)如何度量网站可用性?

  一个神奇的数字—9!你有几个9,就代表了你的可用性。例如QQ可用性达到了4个9:99.99%

  ①2个9=基本可用  ②3个9=较高可用  ③4个9=具有自动恢复能力的高可用  ④5个9=极高可用->理想状态

  那么,可用性的9又是怎么计算出来的呢:

  ①网站不可用时间=故障修复时间点-故障发现时间点

  ②网站年度可用性指标=(1-网站不可用时间/年度总时间)*100%

  (2)如何考核网站可用性?

  广泛采用故障分的,它是对网站故障进行分类加权计算故障责任的方法。一般会给每个分类的故障设置一个权重(例如事故级故障权重为100,A类为20等),其计算公式为:故障分=故障时间(分钟)*故障权重。公司对技术团队的考核一般会参考故障分,例如某团队今年发生了几个事故级故障,那么其绩效考核估计受到很大影响,年终奖什么的就悲剧了。

二、高可用的架构

  目前,通常企业级应用系统(特别是政府部门和大企业的应用系统)一般会采用安规的软硬件设备,如IOE(IBM的小型机、Oracle数据、EMC存储设备)系列。而一般互联网公司更多地采用PC级服务器(x86),开源的数据库(MySQL)和操作系统(Linux)组建廉价且高容错(硬件故障是常态)的应用集群。

  (1)设计的目的?

  保证服务器硬件故障服务依然可用,数据依然保存并能够被访问

  (2)主要的手段?

  数据和服务的①冗余备份以及②失效转移

  对于服务而言,一旦某个服务器宕机,就将服务切换到其他可用的服务器上;

  对于数据而言,如果某个磁盘损坏,就从备份的磁盘(事先就做好了数据的同步复制)读取数据。

三、高可用的应用

  应用层处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性

PS:提到无状态特性,不得不说下Http协议。我们常常听到说,Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的所有信息外,该环境不保存与会话有关的任何信息。之所以我们在使用ASP.NET WebForm开发中会感觉不到Http的无状态特性,完全是因为Microsoft帮我们实现了ViewState,它是ASP.NET WebForm中保存页面信息的基本单位,本质是一个HTML中的隐藏域,回调时会将这个隐藏域中的数据提交到服务器端。  

  (1)通过负载均衡进行无状态服务的失效转移

  (2)应用服务器集群的Session管理

  首先,不得不说的是:Web应用中将上下文对象称为会话(Session),单机情况下由部署在服务器上得Web容器(如IIS、Tomcat、JBoss等)管理。在使用了负载均衡的集群环境中,由于请求的分发是随机的,所以保证每次请求依然能够获得正确的Session比单机时要复杂得多

  其次,我们来看看在集群环境中,Session管理的几种常见手段。

  ①Session复制:该方案简单易行,集群中的几台服务器之间同步Session对象,任何一台服务器宕机都不会导致Session对象的丢失,服务器也只需要从本机获取即可。但是,该方案只适合集群规模较小的情况下。当规模较大时,大量的Session复制操作会占用服务器和网络的大量资源,系统不堪重负

  ②Session绑定:利用负载均衡的源地址Hash算法,总是将源于同一IP地址的请求分发到同一台服务器上。这样的话,在整个会话期间,用户所有的请求都在同一台服务器上进行处理,即Session绑定在某台特定服务器上,保证Session总能在这台服务器上获取。(这种方案又叫做会话粘滞)。

  但是,这种方案不符合高可用的需求。因为一旦某台服务器宕机,那么该机器上得Session也就不复存在了,用户请求切换到其他机器后因为没有Session而无法完成业务处理。因此,很少有网站采用此方案进行Session管理。

  ③Cookie记录Session:利用浏览器支持的Cookie记录Session简单易行,可用性高,并且支持服务器的线性伸缩,因此,许多网站都或多或少地使用了Cookie来记录Session。但是Cookie记录Session有缺点:比如受Cookie大小限制、每次请求响应都要传输Cookie影响性能、用户关闭了Cookie会造成访问不正常等。

  ④Session服务器:利用独立部署的Session服务器(集群)统一管理Session,应用服务器每次读写Session时,都访问Session服务器。这种方案实际上是将应用服务器的状态分离,分为无状态的应用服务器有状态的Session服务器

  对于,有状态的Session服务器,一种较简单的方法是利用分布式缓存(如Memcached、Redis等,有关Redis的简单介绍可以阅读我的博文:NoSQL初探之人人都爱Redis)、数据库等,在这些产品的基础上进行封装,使其符合Session的存储和访问要求。

四、高可用的服务

  高可用的服务模块为业务产品提供基础公共服务,在大型站点中这些服务通常都独立分布式部署,被具体应用远程调用。

  在具体实践中,有以下几点高可用的服务策略可以参考:

  ①分级管理:核心应用和服务具有更高的优先级,比如用户及时付款比能否评价商品更重要;

  ②超时设置:设置服务调用的超时时间,一旦超时后,通信框架抛出异常,应用程序则根据服务调度策略选择重试or请求转移到其他服务器上;

  ③异步调用:通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况。

PS:不是所有服务都可以异步调用,对于获取用户信息这类调用,采用异步方式会延长响应时间,得不偿失。对于那些必须确认服务调用成功后才能继续进行下一步的操作的应用也不适合异步调用。有关具体使用消息队列实现异步调用的案例,请阅读我的博文:《使用Redis作为消息队列服务场景的应用案例》。

  ④服务降级:网站访问高峰期间,为了保证核心应用的正常运行,需要对服务降级。

  降级有两种手段:一是拒绝服务,拒绝较低优先级的应用的调用,减少服务调用并发数,确保核心应用的正常运行;二是关闭功能,关闭部分不重要的服务,或者服务内部关闭部分不重要的功能,以节约系统开销,为核心应用服务让出资源;

  ⑤幂等性设计:保证服务重复调用和调用一次产生的结果相同;

五、高可用的数据

  对于大多数网站而言,数据是其最宝贵的物质资产。

  保证数据高可用的主要手段有两种:一是数据备份,二是失效转移机制;

  ①数据备份:又分为冷备份和热备份,冷备份是定期复制,不能保证数据可用性。热备份又分为异步热备和同步热备,异步热备是指多份数据副本的写入操作异步完成,而同步方式则是指多份数据副本的写入操作同时完成。

  关系数据库的热备机制就是通常所说的主从同步机制,实践中通常使用读写分离的方法来访问Master和Slave数据库,也就是说写操作只访问Master库,读操作均访问Slave库。

PS:在MS SQL Server中,可以通过发布订阅功能实现主从分离。关于发布订阅,可以参考MSDN的这篇文章:http://technet.microsoft.com/zh-cn/ff806143.aspx

  ②失效转移:若数据服务器集群中任何一台服务器宕机,那么应用程序针对这台服务器的所有读写操作都要重新路由到其他服务器,保证数据访问不会失败。

六、高可用的QA

  ①网站发布:在柔性的发布过程中,每次关闭的服务都是集群中的一小部分,并在发布完成后立即可以访问;

  ②自动化测试:使用自动测试工具或脚本完成测试;

  ③预发布验证:引入预发布服务器,与正式服务器几乎一致,只是没有配置在负载均衡服务器上,外部用户无法访问;

  ④代码控制:目前大多数网站采用SVN,分支开发,主干发布模式;另外,目前开源社区广泛采用Git作为版本控制工具,正逐步取代SVN的地位;

七、网站运行监控

  ”不允许没有监控的系统上线“

  (1)监控数据采集

  ①用户行为日志收集:服务器端的日志收集和客户端的日志收集;目前许多网站逐步开发基于实时计算框架Storm的日志统计与分析工具;

  ②服务器性能监控:收集服务器性能指标,如系统Load、内存占用、磁盘IO等,及时判断,防患于未然;

  ③运行数据报告:采集并报告,汇总后统一显示,应用程序需要在代码中处理运行数据采集的逻辑;

  (2)监控管理

  ①系统报警:配置报警阀值和值守人员联系方式,系统发生报警时,即使工程师在千里之外,也可以被及时通知;

  ②失效转移:监控系统在发现故障时,主动通知应用进行失效转移;

  ③自动优雅降级:为了应付网站访问高峰,主动关闭部分功能,释放部分系统资源,保证核心应用服务的正常运行;—>网站柔性架构的理想状态

八、学习小结

  本篇我们通过书籍学习了为了实现网站的高可用,可以使用的策略和模式。书中作者有一句话说的十分好,”事务总是先求生存,然后求发展“。保证网站高可用,万无一失,任重而道远啊!今天的学习笔记就分享到这里,洗洗睡了,么么嗒!对了,今天去影院看了老男孩之猛龙过江,看二傻大闹牛哟可(New York),听了小苹果,顿时感觉自己萌萌哒,有木有?不谈梦想和剧情,里面的几首歌还是蛮好听的。

 

参考文献

  (1)李智慧,《大型网站技术架构-核心原理与案例分析》,http://item.jd.com/11322972.html

本章思维导图

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_720663.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

干货|网站前端开发「必会基础知识」有哪些?

Web前端开发网页制主要由HTML、CSS、JavaScript三大要素组成。随着企业需求变,前端开发技术的三要素也演变成现今的HTML5、CSS3、jQuery。响应式布局、微网站等是Web前端未来的发展方向之一。网站前端开发基础知识学习内容:1.HTML基础标签HTML不管前后端…

干货|10个帮程序员减压放松的网站,爽!

工作之余,不妨放下微博跟朋友圈,来这10个网站感受一下。今天播妞给大家推荐的网站,利用代入感强的图片与音频,迅速帮你抹平焦虑,获得平和心态,疲惫的程序员朋友们快来试试吧~✤ 1.Calm这是同类型中最火的网…

推荐10个Java学习神器网站分享给大家肯定有你不知道的哦

不管谁手里都藏着些许自己觉得好用的网站,今天专门找大厂出来的同学同事觉得好用的网站分享给大家,如果这里有你没收藏还不知道觉得还蛮有用的网站可以给我点个赞,大家一起进步,一起学习,同时也可以分享你觉得好用实用…

干货丨网站域名后缀都是什么含义?

互联网技术让信息传递更加快捷,据网络信息,2019年我国网站数量已经达到518万个,每一个网站都有一个唯一的网站域名。细心的同学可能会注意到大部分域名的后缀都是.com。如果你要注册域名就会发现大部分.com域名已经被注册,然而域名…

解决:写的CSDN博客百度搜索不到 (网站/博客/链接 提交百度检索方法)

往往发布了一篇博客,会发现按照博客标题搜索,无法在百度搜索到自己的这篇文章。 这时,我们在以下网站提交我们的博客链接即可: 链接提交_加快网站内容抓取,快速提交数据工具_站长工具_网站支持_百度搜索资源平台 但是…

java中nextint()_「nextint」Java中关于nextInt()、next()和nextLine() - seo实验室

nextint原博客地址:https://www.cnblogs.com/Skyar/p/5892825.htmljava中关于nextint()、next()和nextLine()的理解先看解释:nextInt(): it only reads the int value, nextInt() places the cursor in the same line after reading the input.next(): r…

程序员接私活月入2万?分享10个接私活的网站!

最近,播妞在和身边的程序员聊天中,听不少朋友分享了自己接私活的经历,那收入真是让我“瞠目结舌” ......程序员A:我Java程序员,工作两年,月薪13K,私活20K。程序员B:之前在单位上班&…

Django-oscar 快速搭建商城网站

Django是一个相对容易学习的框架,并且已经发展了许多年,拥有相对活跃的开源环境。像豆瓣、Instagram,Spotify,YouTube等官方网站都是基于Django搭建的。Python实用宝典 曾经发表过Django的实战教程:Python Django快速开…

企业级-Shell案例8——批量检测网站是否异常并邮件通知

批量检测网站是否异常脚本 检测网站运行是否正常,如果不能正常访问,发送邮件通知管理员 curl -o /de/dev/null -s -w "%{http_code}" www.baidu.com访问失败,也又可能和网络等等原因有关。 所以我们要进行次数判断,超…

企业级-Shell案例10——一键部署LNMP网站平台脚本

一键部署LNMP网站平台脚本 网站浏览流程图 L :Linux N : Nginx M :Mysql P :PHP user --> Nginx --> PHP --> Mysql Centos软件安装 1、yum安装 2、源码编译 1)./configure 2)make…

Docker测试一个静态网站

使用Docker测试静态网站 将Docker作为本地Web开发环境是Docker的一个最简单的应用场景。 这样的环境可以完全复制生产环境,并确保用户开发的东西在生产环境中也能运行。下面从将Nginx Web服务器安装到容器来架构一个简 单的网站开始。这个网站暂且命名为Sample。 …

IIS网站报错targetFramework特性仅作用于目标.NET Framework4.0或更高版本

在访问IIS网站时遇到如下报错 根据提示我们知道是系统已经安装的.NET版本低于程序要求的版本,需要安装符合要求的版本来解决此问题,此时如果使用“服务器管理器”采用点选的方式安装.NET4.5,发现并不能解决此问题,报错依旧 原因为我们的系统…

常用面试编程训练5大网站

编程挑战可以极好地:学习另辟蹊径地完成事情练习一种新的编程语言遇到关键问题进行解决保持我们的大脑敏锐且专注玩得开心!在我寻找最好的编程挑战的过程中,我缩小到五个好资源。相信它们可以在你的编程之旅中极大地帮助你,或者可…

.NET程序员必须知道的八个网站

当前全球有数百万的开发人员在使用微软的.NET技术。如果你是其中之一,或者想要成为其中之一的话,我下面将要列出的每一个站点都应该是你的最爱,都应该收藏到书签中去。 对于不熟悉.NET技术的朋友,需要说明一下,.NET提供…

前端设计网站推荐

1、CSS禅意花园(http://www.csszengarden.com/) 这个网站以最有效、最优美的方式展示了CSS的最高境界,任何一个学习CSS的人都不应该错过对CSS禅意花园的研究。目前在csszengarden.com上收录了1000多个作品,它们都充分体现了设计师…

企业网站应用模式之—LAMP架构的源码编译超详细步骤,有手就行!

LAMP架构的源码编译安装一、LAMP架构介绍1.1 LAMP概述1.2 LAMP各组件介绍1.2.1 (平台)Linux1.2.2(前台)Apache1.2.3(后台)MySQL1.2.4(中间连接)PHP/Perl/Python1.3 LAMP各组件安装顺序二、编译安装Apache httpd服务2.1 操作步骤流程2.2 操作详细步骤(含图文&#xf…

企业网站应用模式之—LNMP架构的源码编译超详细步骤,有手就行!

LNMP架构的源码编译一、编译安装Nginx 服务1.1 操作步骤流程1.2 操作详细步骤(含图文)二、编译安装MySQL服务2.1 操作步骤流程2.2 操作详细步骤(含图文)三、编译安装PHP解析环境3.1 操作步骤流程3.2 操作详细步骤(含图…

编译安装Nginx网站服务

文章目录一、Nginx服务1.1Nginx概述1.2Nginx编译安装1.3启动、停止Nginx服务二、Nginx配置文件三、访问状态四、访问控制一、Nginx服务 1.1Nginx概述 一款高性能、轻量级Web服务软件稳定性高系统资源消耗低对HTTP并发连接的处理能力高单台物理服务器可支持30000-50000个并发请…

做SEO我们都能做点什么

初识SEO这个词是在07年3月,在此之前我还是一个业余的草根站长。和现在的一些朋友们一样,也是一个整天为流量发愁的人。尤其当时做的是一些专卖网,作为销售站点,我们无法像门户站点和交流站点那样被搜索引擎大量收录标题和文章内部…

20 个设计很棒的电子商务网站

电子商务火吧?很火!想做吧?想做!知道怎么做才吸引人吗?不知道!下面是一些设计非常帮的电子商务网站,供你山寨。 1. Foureleven Foureleven 有一个很漂亮的布局,看起来清爽而干净&…