大型网站之高可用篇

news/2024/5/20 12:06:23/文章来源:https://xiyuan.blog.csdn.net/article/details/102328256

网站的高可用架构(高可用)

由于种种情况,在业务中硬件故障是常态,所以网站的高可用架构设计的主要目的就是保证服务器硬件故障时服务依然可用、数据依然保持并能够并访问。
高可用的主要手段:数据和服务的冗余备份及失效转移

高可用的应用

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

a.通过负载均衡进行无状态服务的失效转移
负载均衡服务器能够很好实现应用服务器可用状态实时监测、自动转移失败。

b.解决有状态服务的高可用
事实上,业务总是有状态的,在交易类的电子商务网站,需要有购物车记录用户的购买信息,而这些信息通常会存储在
session(上下文对象)中,但是session往往只在一个服务器当中。
通常有以下方式来在集群环境下管理session

  • Session复制:在集群中的几台服务器之间同步Session对象,每台服务器都保存所有的用户的Sessio。(这种方式只使用比较小的网站)
  • Session绑定:根据IP或者Cookie内容,把某个Session绑定在一个服务器上。(异常情况难以应对)
  • 利用Cookie记录Session:但是Cookie的使用往往会限制性能。(很少去使用)
  • Session服务器:利用独立部署的Session服务器(集群)统一管理Session,应用服务器每次读写Session时,都访问Session服务器。(如借助Redis集群)

高可用的服务

a.分级管理
根据业务的重要程度进行分级管理,让核心应用和服务优先使用更好的硬件。
b.超时设置
在应用程序中设置服务调用的超时时间,一旦超时,通信框架就抛出异常,应用程序根据服务调度策略,可继续重试或将请求转移到提供相同
服务的其他服务器上。
c.异步调用
对于那些不需要立刻获取反馈结果的业务,采用消息中间件的方式进行异步调用。
d.服务降级
服务降级通常有两种方式

  • 拒绝服务:拒绝低优先级的或者随机部分请求,从而缓解高峰时期的并行压力,避免服务器陷入大规模的宕机
  • 关闭功能:在高峰期,暂时关闭部分不重要的功能,为核心服务和功能让出资源。

e.幂等性设计
为了避免由于网络故障,没有收到响应而导致重复的服务调用,要保证服务的幂等性。
即在服务层保证服务重复调用和调用一次产生的结果相同。

高可用的数据

a.CAP原理
一个提供数据服务的存储系统无法同时满足:数据一致性、数据可用性、分区耐受性。
在这里插入图片描述
C数据一致性:所有应用程序都能访问到相同的数据。
A数据可用性:任何时候,任何应用程序都可以读写访问。
P分区耐受性:系统可以跨网络分区线性伸缩。(通俗来说就是数据的规模可扩展)

在大型网站中通常都是牺牲C,选择AP。为了可能减小数据不一致带来的影响,都会采取各种手段保证数据最终一致。

  • 数据强一致:各个副本的数据在物理存储中总是一致的。
  • 数据用户一致:数据在物理存储的各个副本可能是不一致的,但是通过纠错和校验机制,会确定一个一致的且正确的数据返回给用户。
  • 数据最终一致:物理存储的数据可能不一致,终端用户访问也可能不一致,但是一段时间内数据会达成一致。

b.数据备份
数据备份分为冷备与热备

  • 冷备:在关闭数据库的情况下进行数据备份。
  • 热备:在数据库对外提供服务的同时,进行数据备份。

同时热备也分为:

  • 异步热备:应用程序收到数据库服务系统的写操作成功时,只成功了一份,存储系统将异步地写入其他副本(这个时候分成Master-Slave关系 )
  • 同步热备:应用程序收到数据库服务系统的写操作成功时,多份数据已经写入成功。

c.失效转移
失效转移操作由三部分组成:失效确认、访问转移、数据恢复
1. 失效确认:通过心跳检测工具来确认服务器的运行情况。
2. 访问转移:如果存在对等的服务器(主从关系),当其中一台服务器宕机后,应用程序直接切换到对等服务器上。如果存储是不对等的,那么需要重新计算路由,选择存储服务器。
3. 数据恢复:通常来说数据会设置一个副本数,当一个节点宕机,数据副本必然会降低,这个时候要讲数据恢复到设定的值。

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

a.网站的发布
大型网站的发布通常采用脚本完成,将服务器分为A和B两组,分批次平滑上线。
java平滑上线的方案:
1. 在流量低谷时,将服务器分成A、B两组,先让A组服务器下线(负载均衡服务器lvs 断开A组服务器)
2. 更改A组服务器代码和配置后,重启服务器后,分配到测试lvs中进行测试(此过程控制在10分钟内)
3. 断开测试lv,将A组挂到lvs中,瞬间关闭B组连接
4. 之后对B组进行代码和配置进行更改后,重启服务器,进过测试后,挂会到主lvs,完成平滑上线

b.自动化测试
使用Selenium运行在浏览器中,模拟用户操作。

c.预发布验证
在网站发布时,并不是把测试通过的代码包直接发布到线上服务器,而是先发布到预发布机器上,开发工程师和测试工程师在预发布服务器上进行预发布验证,
执行一些典型的业务流程,确认系统没有问题后才正式发布。

d.代码控制
通过svn工具,区分主干与分支。
主干开发、分支发布:便于管理和控制,也利于持续集成。
分支开发,主线发布:便于开发任务同时进行。

e.自动化发布
开发一个自动化发布工具,可以根据响应驱动流程,自动构造代码分支,进行代码合并,执行发布脚本等。

f.灰度发布
将集群服务器分成若干部分,每天只发布一部分服务器,观察运行稳定没有故障后,再继续发布一部分,持续几天才把整个集群全部发布完毕。
这个方式就是那部分用户做测试,从而获取反馈。

网站运行监控

不允许没有监控的系统上线
a.监控数据采集
1.用户行为日志收集

  • 服务器端日志收集:利用Log4j日志系统进行收集。
  • 客户端浏览器日志收集:通过JS进行埋点收集用户操作日志。
  • 使用基于实时计算框架Storm的日志统计与分析工具。

2.服务器性能监控
使用Ganglia工具,以图形的方式在浏览器展示实时性能曲线。

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

b.监控管理
监控管理应实现系统报警、失效转移、自动优雅降级。

在这里插入图片描述

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

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

相关文章

大型网站之伸缩篇

网站的伸缩性架构(伸缩性) 绝大数网站都是渐进式成长的,在这个过程中最重要的技术是就是使用服务器集群,通过不断地向集群中添加服务器来增加整个集群的处理能力。 网站架构的伸缩性设计 网站的伸缩性设计分为两大类 根据功能进…

大型网站之扩展篇

网站的可扩展架构(扩展性) 伸缩性:通常指利用集群的方式增加服务器数量、提高系统的整体事务吞吐能力。 扩展性:指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。 网站的可扩展性,依托于系…

大型网站之安全篇

网站的安全框架(安全性) a.黑客攻击 XSS攻击 XSS攻击即跨站点脚本攻击,指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。 常见的XSS攻击分为 反射型&am…

使用openssl 模拟ca进行证书的申请和颁发,并使用证书部署网站的安全连接访问,即https的加密通信

亲测,已经建立了https链接 参考链接: https://blog.csdn.net/guoxiaojie_415/article/details/80554109 https://www.cnblogs.com/kezi/articles/11512420.html

浏览器版本过高导致无法访问网站 burpSuiteBrowser

错误: 建立安全连接失败 连接到 172.24.11.101 时发生错误。对等端使用了不支持的安全协议版本。 错误代码:SSL_ERROR_UNSUPPORTED_VERSION 由于不能验证所收到的数据是否可信,无法显示您想要查看的页面。 建议向此网站的管理员反馈这…

js 获取服务器ip_如何提高香港服务器网站的访问速度

从选择服务器上入手1.选择直连国内网络骨干的机房 直连国内网络骨干机房通常节点都比较少。通常数据在经过路由器进行转发时,都需要花费一定的时间,因而节点比较少的机房,它所提供的香港服务器多相对快一些,具体我们可以通过ping服…

php一维数组合并为二维数组,php输出数据并转换成若干一维数组最后合并为一条二维数组 - 傲世零零个人技术网站...

代码功能:php输出数据并转换成若干一维数组最后合并为一条二维数组//数据库连接require(db.php);//查询语句$sql2 "select * from xc_pic where xcid89 ";$result2 mysql_query($sql2,$conn);$dd0;while($row2 mysql_fetch_array($result2)){$dd$dd1…

逆向某电影网站signKey参数

1.打开我们要获取数据的页面 这里我们可以看到,这个有个加密参数signKey,猫眼好像改了,这个页面一些东西变成动态渲染了。他会发送一个请求去请求这个数据 我们打开这个页面,可以看到 这里面都是我们要的参数,像评分呀…

补某视频网站的js,进行视频解密

前言: 前不久,有个群友在群里发了一个视频的m3u8文件,其中的key是16字节,但是就是无法进行下载。但是用m3u8下载器进行下载时,无法下载下来,我开始怀疑是有请求头检验,用代码请求了一下&#x…

java web gzip_java使用gzip对静态资源的压缩,提供web网站访问速度

一、gzip简介Gzip是若干种文件压缩程序的简称,通常指GNU计划的实现,此处的gzip代表GNU zip。也经常用来表示gzip这种文件格式。软件的作者是Jean-loup Gailly和Mark Adler。在1992年10月31日第一次公开发布,版本号0.1,1993年2月&a…

Web大作业-关于创业计划网站制作的第二天......

嘶......转专业真的是麻烦,前有C语言大作业算法实现,现有Web工程网页要做..... 贴几张预览图吧,第一部分算是完成了,接下来还有两个部分,分别是宣传视频和个人计划的安排。 另外,学校的校园网真菜&#x…

Web大作业-关于创业计划网站制作的第三天......

代码都是我一行一行敲下来的,虽然我相信得分不会很高(确信)。 但是第二部分算是完成了,就是宣传视频部分,让三个网页互相连接,其实我还想用用js把网站写活,奈何能力有限。 第三部分我打算讲述自己的创业计划&#xf…

Web大作业-关于创业计划网站制作的第四天......

主要是登录和注册界面。 还有自己的创业计划。差不多完工了。

5 qlineedit获取内容_SEO内容营销:你应该关注的5个考核指标!

在SEO工作中制定内容营销策略是一个必不可少的工作,毕竟内容为王的时代,任何的营销与推广我们都脱离不了内容,每隔一段时间SEO主管都会对内容营销做复盘,通过数据分析,查看相关指标,是否达到预期。 那么&am…

爬虫学习记录(四)————利用pyquery,re爬取静态网站信息存储到mongodb中

爬虫学习记录(四)————利用pyquery,re爬取静态网站信息存储到mongodb中静态页面爬取引入需要的包定义获取html文件的基本函数定义获取所有详情页的url函数定义解析详细信息的函数将函数链接起来存储到mongodb中链接mongodb的基本参数定义存…

《筑巢引凤:高黏度社会化网站设计秘诀》读书笔记

难怪所有人都想在亚马逊购物,它有其他任何网站都没有的信息——真相(*备注:我们网站的特点:真实性、扩展性) 处于群体之中,围绕群体活动,却又保持个人独立性,这种关系深刻地影响着我…

Java实现一个GUI的SEO软文生成器v1

项目CODE地址: https://code.csdn.net/u012995856/autogenseoarticle/tree/master 效果图: 目录结构: 功能: GUI输入,替换现成模板里的变量,生成新文件 Generator.java package cn.pangPy…

网站搭建的环境配置:Apache+PHP+MySQL

1 网站基本概念 网站说白了就是把一些东西放到哪里供其他人访问,并提供了一些可以交互的接口的地方。如果要实现这样一个地方首先,需要一个能放东西的地方这就是服务器。其次,我们要找到这个地方,然而有很多这样的地方&#xff0c…

ASP.NET MVC5 网站开发实践 - 概述

ASP.NET MVC5 网站开发实践 - 概述前段时间一直在用MVC4写个网站开发的demo,由于刚开始学所有的代码都写在一个项目中,越写越混乱,到后来有些代码自己都理不清了。1月26日晚上在群里跟怒放 他们讨论这个问题,结论是即使只是一个小…

URL访问网站的过程(三次握手、四次挥手),发送RST包的四种情况,常用协议

URL访问网站(三次握手、四次挥手) 1)获得域名所对应的IP地址,若DNS缓存中没有相关数据,则IE浏览器向DNS服务器发出DNS请求,以获取域名所对应的IP地址。 2)IE浏览器与域名地址建立TCP连接&#…