phython在file同时写入两个_几个明星同时出轨能把微博的服务器搞垮?(答案:赵丽颖冯绍)...

64d6aaefb0a8741ad3ce4fe8c36ac9d5.png

前段时间,二胖在网上看到一个词儿——“星轨”,说是新浪微博衡量服务器抗压能力的新单位,当时我就觉得既形象又有趣,还有些搞笑。

先给大家解释一下什么是星轨。

一星轨表示一个一线明星出轨所带来的流量,据说微博的服务器现在能同时扛8星轨。

也就是说:8个一线明星同一时间爆出出轨的新闻,微博都能扛得住!

当然哈,这只是一句调侃的话,用于证明微博服务器的抗压能力已经很强了。

其实,微博的程序员小哥们可真不容易,因为微博的流量波动是很难预测的,指不定什么时候出来一个热点话题,微博的流量就会垂直上升。

这也是微博和其他网站最大的区别。

淘宝、地图、京东这些应用平时的流量是很稳定的,不会出现短时间的暴增也不会出现断崖式的下跌。

在一些特殊时点,比如双十一,淘宝的工程师们会提前增加N倍的线上服务器,而京东的工程师们早就做好了迎接618的准备,地图的同学们也早在节假日之前就扩充了服务器。

也就是说,上述应用都能准确知道自己的流量高峰会在什么时候出现,所以可以在流量高峰到来以前扩充服务器资源,保证自己的应用能够正常运行。

可能有同学会疑问,为什么平时不多部署一些机器呢?这样服务就不怕流量暴增了哇。

道理是这么个道理,可是事儿不是这么个事儿。服务器资源是比较昂贵的,平时部署太多的机器会徒增很多额外的开销,所以大部分企业平时都只会部署能承受正常流量3~4倍流量的机器。

它们采取的方式都是在流量高峰到来之前扩充更多的服务器(不少企业都是租用亚马逊、阿里云等云服务提供商的服务器),用完之后就释放,这样能节约不少成本。

而微博就很无奈了,因为它无法预测流量高峰,谁也不知道明星们啥时候就搞个出轨或是其他新闻出来,流量短时间暴增,微博的服务器就扛不住了。

下图是邓超2015年12月20日刷屏的微博,那一天他的刷屏就把微博服务器给搞挂了不少。

94612644efea48051a6e87ec24308ff2.png

我们可以看到,上图中,邓超发布的微博评论量都是10万以下,加起来也不过几十万,这并不是一个很大的数字,至少和明星出轨、偷税漏税这种新闻比起来,流量算小的。不过即使是这样,也都把微博服务器搞挂了,那明星出轨能带来多大流量呢?

下图是2014年文章爆出出轨新闻后马伊琍的回应微博截图,评论过百万,转发46万。

99c123d7855d29c977b9f83b921797b6.png

2015年陈赫出轨后认错的微博评论更是高达299万。

92e1695443efce92dc6ee21de8c3be4c.png

所以,微博的程序员们最怕什么?

不是怕代码出bug。

怕的是明星出轨。

而和明星出轨比起来,程序员们更怕的是明星出轨的新闻被晚上爆出来。

一个明星的出轨可能会导致几十个、上百个人半夜爬起来加班。

所以,各位大佬,请别出轨了,就算要出轨,请一定要在工作日的正常工作时间被曝出轨,程序员很辛苦的。

012f46b234ba1368fefb67a6d3dd23f3.png

好不容易要下班了,WTF???

下面这一条微博带来的流量起码等于三个一线明星同时出轨带来的流量。

ed8b4a22d4d4eeca5e5c89a7652ffccd.png

程序员内心OS:

加班!加班!加班!

613d27855b509f992905acd45e1f75e3.png

在无休止的加班中,程序员小哥哥们终于忍不住了,想着要改变这个现象!!!

所以,程序员们日夜不休地优化代码,终于!微博的抗压能力上去了!

现在能扛8星轨,8个明星同时出轨也不虚了。

1d9832bd101006104b44cd5f900ea487.png

最近没有听说明星出轨的新闻把微博服务器搞挂的消息了吧。

30873cfca09844de0402be4ae1707753.png

好啦,段子讲完了,下面来点干货,今天给大家聊一聊“消息队列”,以及如何用“消息队列”来应对大流量高并发下用户提交内容的入库问题。

在讲消息队列之前,先给大家介绍一个互联网术语——UGC。

下面对UGC的解释来自百度百科:

“互联网术语,全称为User Generated Content,也就是用户生成内容的意思。UGC的概念最早起源于互联网领域,即用户将自己原创的内容通过互联网平台进行展示或者提供给其他用户。UGC是伴随着以提倡个性化为主要特点的Web2.0概念兴起的。”

在本文中,大家可以认为UGC指的是用户的评论内容。

下图是互联网企业在线服务常见的部署方式:

0e1e2b5f5b6dd128ddb11ab0a590dba0.png

当用户发送请求之后(评论操作或者消息请求操作),中转设备就把流量分摊到集群中的各个物理节点上,比如使用Nginx做代理以及负载均衡。

当流量短时间暴增的时候,假设正常情况下一台服务器的qps(每秒的请求量)是300,突然某个明星出轨的事情上热搜了,qps暴增到3000,导致其中某些稍微脆弱的服务器先跪了,那么剩下的服务器就要承担更多的流量(跪了的服务器的流量被分到了其他剩下的服务器上),服务器承受的压力越来越大,然后就一台一台地跪了。

相信大家都知道,对于存储系统而言(比如MySQL,MongoDB等),正常情况下的写入压力、更新压力是大于查询压力的,而恰好,微博的评论短时间轰炸,后端集群只要有一个环节扛不住就很容易瘫痪了,这时候用户看到的结果就是——操作无响应。

那么问题来了,我们该怎么去应对这种情况呢?

给在线服务加一个消息中间件是个不错的选择。

什么是消息中间件?

百度百科对消息队列的解释是“在消息的传输过程中保存消息的容器”。

我相信很多朋友看了这个解释也还没有明白什么是"消息队列",所以我们还是以微博为例来看一个具体的场景。

54037e5d163fd56c639df1a97451dcc0.png

这里我们做一个抽象,把产生消息的用户比喻成生产者,把服务器集群比喻成消费者(生产者消费者是不是很熟啊,哈哈,学过操作系统的同学肯定很熟)。

我们在生产者和消费者之间加了一个中间件——消息队列,用它可以来干嘛呢?

它是来做消息转发的,当请求过来之后,不是直接发给服务器,而是发给消息队列,然后消息队列把消息中转一下再发给服务器。

很多同学可能会想,这不是多此一举吗?

其实不然。

  1. 消息队列可以把消息分类,分别下发,比如点赞、评论和转发,各自走各自的通道。
  2. 消息队列可以暂存消息。当用户的请求到达消息队列以后,消息队列就给用户发出响应,显示评论成功,即使这时候该评论还没写入数据库,可是用户是不感知的。当流量暴增的时候,生产者生成的消息大于消费者的处理能力,消息就会先被暂存在消息队列里,然后消费者全力去处理,这样就避免了服务器压力过大。消息队列并不是全部存储在内存中,也是可以写入硬盘的,所以能存储很大量的消息。

这里二胖只是给大家介绍了消息队列相关知识的冰山一角,更多的知识,大家可以下来自己去了解。

两个常见的消息队列,Redis、KafKa。

各位大佬,不用提醒我Redis是存储了,我知道,但是Redis能不能做消息队列,烦请各位大佬百度或者谷歌一下,我就不帮你们截图了,谢谢!


更多文章,请关注一个不仅仅写技术的个人公众号:大数据前沿(bigdataqianyan)

推荐阅读:

二胖:这可能是我见过最好的编程指南了!​zhuanlan.zhihu.com
fa45d4ea504cba620b795471b5c7c2ab.png
二胖:用Python抓取某东购买记录并统计MM的bra大小​zhuanlan.zhihu.com
a9f2a16527e844684509fde934c9d87d.png
二胖:用python挖一挖知乎上宅男们最喜欢的1000个妹子​zhuanlan.zhihu.com
3986ab3a9244dcc0671288cb0d6c3b4a.png
二胖:开源一段代码-微信好友分析​zhuanlan.zhihu.com
79a518aa586d57426a86903cd52969d3.png
二胖:从《深入理解计算机系统》谈一谈编程入门​zhuanlan.zhihu.com
95930330a64ccbad604e4228bd5eeac1.png

6dd4fbff59dd030690d9eee240699e29.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值