中午吃饭刷着刷着微博发现微博突然挂了。我一开始以为是家里网不好,后来换了流量刷还是刷不出内容,并且报error,我就知道微博应该是挂了。往朋友圈一看,原来是鹿晗和关晓彤微博互圈“宣布恋情”了。要不是以前看过《好先生》这部剧没准我还真不认识关晓彤。陆地cp前几天不是还在炒着吗?怎么这么突然?诶..贵圈贼乱啊。

作为一名程序员,我更感兴趣的是微博如何应对瞬时涌来的高并发大流量。从很久很久以前文章马伊琍的“周一见”,到后来“出轨队”、“吸毒队”的争相夺分,再到前段时间的郭敬明事件、薛之谦事件,再到今天的鹿晗宣布恋情......微博看似每次都在挂,一直都没有进步,大家每次遇到热点事件刷不出内容的时候都会吐槽微博的应用平台很辣鸡。但是呢,微博的后台系统肯定一直在重构升级优化,我觉得能够做到今天这种水平已经很不错了。

从用户的角度(主要是我的角度hhhhh)来看

遇到热点事件的时候微博大概率在短时间内(大约10~15)可能会完全刷不出内容,过了一段时间之后(大约半小时)进行间隔刷新(间隔10秒左右),有可能某些时候会看到5xx的error,5开头的http状态码代表服务器或者是网关存在问题,比如说服务器拒绝连接、网关超时或者是应用代码存在bug等都会导致5xx的错误。在热点事件发生1小时内,系统应该可以恢复正常的服务。

从网站开发、运维人员的角度来看

  • 运维:卧槽?怎么访问流量这么高?是出啥bug了吗?卧槽!不会是又有人出轨吸毒了吧?emmmm....我的国庆假期可还没结束啊!
  • 运维:兄弟们,快醒醒!快加机器啊!系统要崩了!
  • 开发:别催!再催自杀!
  • leader:测试在扩容之后赶紧拉出来测测!
  • 测试:人在家中躺,锅从天上来!

上面都是我乱说的!

为什么我觉得微博在高并发大流量访问方面的表现已经很不错了呢?举个例子吧:淘宝每年在双11购物节的时候也要应对高并发的场景,但是这是可以提前做很多准备的,比如说提前购买带宽资源、增加服务器资源、进行完备的异地容灾等等,很多都是可预测的。而微博呢?热点事件随时都可能发生,所以这对于微博的运维工程师来说是很大的考验。当然,现在的运维平台也是非常的智能了,可以对各项指标进行实时监控,一有异常,马上进行短信或者邮件报警,之后就是各个岗位的工程师人肉上场调配各类资源了。

那微博在平时为什么不增加一些服务器资源呢?

服务器资源、网络带宽资源等既重要,又昂贵。由于并不是每时每刻都必须应对高并发的场景,因此如果说在平时增加了冗余的服务器资源导致大量机器空载,也是一种很大的浪费。我们在考虑提供可用服务的同时,也必须考虑一下成本。

本来我开始写这篇博客的时候就是想回顾一下自己以前学习过的大型网站高可用架构相关知识。但是由于高性能、伸缩性、拓展性与高可用性密不可分,所以我写着写着就感觉写不下去了。想写的东西太多了,有点不知道从哪里开始写。所以下面我就针对高可用性架构中经常会提到的几个点来讲讲。

大型网站高可用架构

不管是对于小型网站还是大型网站来说,分层都是必须的:粗粒度的分层一般为应用层、业务层和数据层。横向分层之后,可能还会根据模块的不同对每一层进行纵向的分割。拿微博举例,我觉得它的评论模块和点赞模块应该是解耦的。越是复杂的系统,横向和纵向的分层分割粒度就会越细。很多时候你用起来以为它就是一个系统,其实后面可能是由几百上千个独立部署的系统对外提供服务。

集群

集群在大型网站架构中是一个非常非常重要的概念。由于服务器(不管是应用服务器还是数据服务器)容易发生单点问题,一旦一台服务器gg了,就必须进行失效转移。

应用服务器集群

一般来说,应用服务器必须是无状态的。什么叫无状态服务器呢?在介绍它之前,我们先来说一下状态服务器:状态服务器一般会保存请求相关的信息,每个请求会默认地使用以前的请求信息。这样就很容易导致会话粘滞问题:如果一台状态服务器宕机了,那么它保存的请求信息(例如session)就丢失了,可能会导致不可预知的问题。
那么相对的,无状态服务器就不保存请求信息,它处理的客户信息必须由请求自己携带,或者是从其他服务器集群获取。因此无状态服务器相对于状态服务器来说更加地健壮,就算是重启服务器甚至是服务器宕机都不会丢失状态。由此引申出来的另一个优点就是方便扩容:只要在增加的服务器上部署相同的应用并做好反向代理就能对外提供正常的服务。

session管理

既然应用服务器是无状态的,那么用户的登录信息(session)如何管理呢?比较常见的有下面四种方式。但是由于前三种都有很大的局限性,这里只聊聊基于集群的session服务器管理方式。

  • session复制
  • 源地址hash(session绑定)
  • 用cookie记录session
  • session服务器

    我们在这里是将服务器的状态进行分离:分为无状态的应用服务器和有状态的session服务器。当然,这里说的session服务器肯定说的是session服务器集群。我们可以借助分布式缓存或者是关系型数据库来存储session。对于微博来说,这里肯定得用分布式缓存了:因为用关系型数据库的话数据库连接资源容易成为瓶颈,并且I/O操作也很耗时间。比较常见的K-V内存数据库有Redis。我觉得微博内容中的赞数、用户的关注数和粉丝数用Redis来存应该算是比较合适的。

负载均衡

既然提到了集群,肯定得说说负载均衡。但是感觉负载均衡应该可以归类到可伸缩性里面去,所以这里就不详细讲啦,就简单说说有哪些常见的负载均衡的方式以及负载均衡算法。

负载均衡方式
  • HTTP重定向负载均衡
  • DNS域名解析负载均衡
  • 反向代理负载均衡
  • IP负载均衡
  • 数据链路层负载均衡
负载均衡算法
  • 轮询法
  • 随机法
  • 源地址哈希
  • 加权轮询
  • 加权随机
  • 最小连接数

插播点别的

突然想到一个比较有意思的东西:在微博的架构中,应该采用的是异步拉模型而不是同步推模型。什么意思呢?我们举个例子:鹿晗的粉丝有3000多万,关晓彤的粉丝有1000多万。假如他俩发了条微博的同时需要往这4000万粉丝的内容列表中(假设这里用的是关系型数据库)推送过去,这就是简化的同步推模型。

那这样有什么缺点呢?首先,这样会消耗大量的数据库连接资源,更重要的是这样不太符合软件设计规范:因为对于两人的粉丝来说,分别由有3000多万和1000多万的数据是冗余的。假如说陈赫、邓超在第一时间对他俩的微博进行了点赞,此时瓶颈就来了:刚才往数据库里插入4000多万感觉还可以接受,但是现在四人的粉丝数加起来好几亿了,同时往数据库插这么多数据是不是感觉不太合适?

没关系,我们现在换一种内容推送方式:我们现在不用同步推了,而是用异步拉。我们每次在手机上刷微博的时候,如果想要看到更新的内容是不是都要下拉刷新获取?没错这就是异步拉。异步拉有什么好处呢?很明显的一个好处就是可以将热点数据进行集中管理,并且不用进行大量的数据插入冗余操作。另外对系统资源的消耗也较少。那么微博内容从哪里拉呢?主流的解决方案是把热点内容放到缓存中,每次都去查缓存,这样可以减少I/O操作并且避免发生因资源枯竭造成的超时问题。

PS:写到这里的时候我开始水群了,现在回过头来继续写感觉没法儿写下去了。太久没写博客了,很多知识略有遗忘。不过今天算是在脑海中把相关的东西梳理了一下,因为毕业设计也打算做高并发大流量相关的东西。今天算是蹭蹭热点顺便复习一下以前学过的知识吧~

其实高可用性架构还包括服务升级、服务降级、数据备份、失效转移等等。关于网站高可用、高性能、高拓展方面感觉其实还有很多很多东西来写。但是有些知识没有一定的实践经验呢,又不能很好的掌握。那么就等我后面再慢慢聊吧~

就鹿晗宣布恋情导致微博宕机事件浅谈大型网站高可用性架构相关推荐

  1. “如何避免总线错误或不可纠正的错误导致的宕机事件”之tolerant介绍

    实验目的:证明修改tolerant参数为3时,uncorrected error和fatal error等不可纠正错误.总线错误不会导致机器宕机. 实验意义:对于已发生的硬件MCE error导致的宕 ...

  2. 某项目Oracle RAC基础库发生ASM磁盘文件头损坏宕机事件分析排查

    问题描述: 2021年2月26日收到某现场项目经理电话反馈现场Oracle RAC数据库发生宕机事件,但数据库已恢复正常,需要我方进行故障分析排查原因. 日志分析: 到了现场后通过现场人员对接登录到此 ...

  3. 微博宕机背后,高并发有哪些常见问题?

    上周,赵丽颖.冯绍峰结婚官宣造成微博宕机,那么回归技术,面对如此大的高并发流量和屡次崩溃的系统,作为程序员是否有较好的方法来应对及解决?在此,技术专家丁浪为我们分享了一篇缓存在高并发场景下的常见问题的 ...

  4. oracle11g ora 29927,【案例】Oracle内存泄漏 进行10046跟踪分析07445导致数据库宕机

    天萃荷净 在一次ORA-7445导致oracle数据库down掉故障分析中,发现sql因某种原因导致大量的sql area中很多内存泄露,最终导致数据库down掉.通过实验找出类此奇怪SQL. SEL ...

  5. 下载丨云和恩墨技术通讯:OCR无法正常读取导致节点宕机

    墨墨导读:为了及时共享行业案例,通知共性问题,达成共享和提前预防,我们整理和编辑了<云和恩墨技术通讯>,通过对过去一段时间的知识回顾,故障归纳,以期提供有价值的信息供大家参考.同时,我们也 ...

  6. 记-ItextPDF+freemaker 生成PDF文件---导致服务宕机

    摘要:已经上线的项目,出现服务挂掉的情况. 介绍:该服务是专门做打印的,业务需求是生成PDF文件进行页面预览,主要是使用ItextPDF+freemaker技术生成一系列PDF文件,其中生成流程有:解 ...

  7. 模拟私网问题导致节点宕机无法启动

    模拟私网问题导致节点宕机无法启动 目的 分析过程 GI alert日志 os日志 ocssd.log 日志 参考文档 目的 本文章通过模拟私网问题,导致集群节点宕机,来进行日志分析. # ifconf ...

  8. window tomcat 启动后 点击cmd窗口 快速编辑模式导致项目宕机问题

    window tomcat cmd启动后 快速编辑模式导致项目宕机问题 新版本的window 操作系统,cmd默认是开启快速编辑模式 tomcat启动后,如果鼠标无意点击到tomcat cmd窗口 c ...

  9. oracle重启root,案例:Oracle报错ORA-15025 ORA-27041 root用户操作rac导致节点宕机

    天萃荷净 运维DBA反映Oracle RAC环境中节点宕机,alert发现报错ORA-15025 ORA-27041,分析原因为使用root用户操作rac导致节点宕机 接到同事请求,说客户的linux ...

最新文章

  1. 在CentOS 6.3 64bit上使用 smartmontools和MageCli 监测硬盘的健康状态
  2. 平时的你VS面试的你
  3. 029_jQuery Ajax简介
  4. java的圆周率_java学习日记,圆周率的打印
  5. ITK:打开一个二进制图像
  6. 机器学习快速截图工具matlab版本——文件夹批量处理(原创)
  7. etag java_你知道HTTP协议的ETag是干什么的吗?
  8. 结果出来了!视觉中国被罚30万 再次发布道歉声明...
  9. NSURLConnection-网络访问(同步异步)
  10. keepalived 负载 mysql 3306端口问题
  11. DL_C1_week_2_2(Logistic Regression)
  12. 分享11个web前端开发实战项目案例+源码
  13. kb931125—rootsupd_kb931125-rootsupd补丁下载
  14. java同构数_统计同构数关键算法
  15. php+检测是否是手机浏览器,php 判断是否是手机浏览器访问?
  16. video标签使用controls属性怎么去掉三个点
  17. Cesium 相机视角控制
  18. 「释放自我」后,敢说真话的人干趴了会写PPT的人!
  19. Tomcat与JDK版本的对应
  20. 自动解魔方机器人1 [算法篇]

热门文章

  1. 易特鞋店销售管理后台软件(3)
  2. 企业常用的微博营销技巧都有哪些呢?
  3. 百度输入法 v3.25 for android,【图片】【3.25皮肤更新】LeoStyleHD布局全键盘/双键/中英9键/双拼23键【百度手机输入法吧】_百度贴吧...
  4. 讲台计算机风扇的英语怎么说,讲台的英文单词
  5. 【论文阅读】时序动作检测系列论文精读(2020年)
  6. 淘宝天猫商家运营,店铺如何抓住消费者心理做活动促销
  7. ArcGIS创建图层包:分享图层数据以及符号
  8. Windows10系统升级1903后护眼模式无效
  9. 工程师和程序员的区别
  10. DXT纹理压缩,Multiple Render Targets