1. 聚能聊>
  2. 话题详情

阿里开发者招聘节 | 面试题09-14:为什么鹿晗发布恋情的时候,微博系统会崩溃,如何解决?

为帮助开发者们提升面试技能、有机会入职阿里,云栖社区特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的面试真题这一次将陆续放出(面试题官方参考答案将在专辑结束后统一汇总分享,点此进入答题并围观他人答案)。并通过这些笔试真题开放阿里巴巴工作机会,让更多的开发者加入到阿里这个大平台。

这一次,不仅是知识的收获,还将间接地与技术大牛们做了直观的沟通,了解他们的出题思路与考察要点,并加以消化吸收,这对自己技术能力本身就是一种极大的提升。走上编程之路,不断丰富自己方能与世接轨,努力做最优秀的自己。

5月9日,我们给开发者的第14道面试题。

14.关于并行计算的一些基本开放问题

  • 如何定义并行计算,请分别阐述分布式内存到共享内存模式并行编程的区别和实现(例子代码)?
  • 请使用MPI和OpenMP分别实现N个处理器对M个变量的求和?
  • 请说明SIMD指令在循环中使用的限制?向量化优化有哪些手段?
  • 请用Amdahl定律说明什么是并行效率以及并行算法的扩展性?并说明扩展性的性能指标和限制因素,最后请说明在共享内存计算机中,共享内存的限制?OpenMP 是怎样实现共享内存编程环境的?MPI阻塞和非阻塞读写的区别?

阿里巴巴出题专家:何万青

_

点击进入聚能聊答题,并围观大家的回答!

5月8日,我们给开发者的第13道面试题。

13.如何实现两金额数据相加(最多小数点两位)

阿里巴巴出题专家:御术

数据可视化高级技术专家,从 ECharts 创始人到 AntV 产品架构师、蚂蚁金服数据可视化方向负责人,多年来一直积极推进国内数据可视化技术建设,现任蚂蚁金服-平台数据技术事业群-体验技术部-平台前端技术部 Leader,带领团队维护着 Ant Design、AntV、UmiJS、Dva 等多个领域知名的开源项目,负责着蚂蚁金服核心中台应用以及蚂蚁金融科技产品的前端研发工作。

_4

招聘职位:资深前端研发工程师
点击进入聚能聊答题,并围观大家的回答!


5月7日,我们给开发者的第10~12道面试题。

12.有一批气象观测站,现需要获取这些站点的观测数据,并存储到Hive中。但是气象局只提供了api查询,每次只能查询单个观测点。那么如果能够方便快速地获取到所有的观测点的数据?

11.现有一批邮件需要发送给订阅顾客,且有一个集群(集群的节点数不定,会动态扩容缩容)来负责具体的邮件发送任务,如何让系统尽快地完成发送?请详述技术方案!

10.解释下为什么鹿晗发布恋情的时候,微博系统会崩溃,如何解决?!

阿里巴巴出题专家:江岚

阿里云数据技术高级技术专家,2010年毕业后加入阿里,一直在数据部门从事数据研发的工作。目前就职于数据技术产品部的数据建设平台,负责Dataphin智能建模的后台研发。

_02

招聘职位:阿里数据研发工程师
点击进入聚能聊答题,并围观大家的回答!


5月6日,我们给开发者的第9道面试题。

09.输入ping IP后敲回车,发包前会发生什么?

阿里巴巴出题专家:怀虎

阿里云云效平台负责人,DevOps资深专家,译有《微服务设计》。曾在ThoughtWorks任职软件交付和敏捷顾问;对持续集成、自动化测试有丰富经验;目前专注于持续交付SaaS产品的开发,提供精益需求管理、软件设计、敏捷转型相关咨询服务。

_

招聘职位:阿里云研发效能研发工程师
点击进入聚能聊答题,并围观大家的回答!

阿里开发者招聘节 | 面试题01:如何实现一个高效的单向链表逆序输出?
阿里开发者招聘节 |面试题02-08:NAS(Network Attached Storage)协议NFS和SMB相关问题

参与话题

奖品区域 活动规则 已 结束

  • 奖品一

    云栖定制电脑包 x 1

  • 奖品二

    运动手环 x 1

  • 奖品三

    福禄寿淘公仔 x 1

11个回答

2

北方的郎 已获得福禄寿淘公仔 复制链接去分享

为什么鹿晗发布恋情的时候,微博系统会崩溃,如何解决?
因为流量上来的太快了。解决方案其实都差不多,而且微博应该已经有了:
1,服务端自动扩容,在请求量大的时候增加ECS。这个现在的SLB就可以i做到。
2,采用异步处理,最终一致性。网站尽量静态化等等
3,造成崩溃以及问题关键是数据端,服务端其实可以堆的,数据端可以采用读写分离,分库分表,内存库等等
4,限流,在流量超过最大处理能力的时候进行限流。

2

s4lm0x 复制链接去分享

崩溃原因:戏子家事天下知
解决方案:限流、降级、提高缓存,scale out

1

aliyu.wong 复制链接去分享

流量暴增,应用服务器不够,搭EIP,还有redis

0

头发发狂 复制链接去分享

由新浪微博崩溃想开的
前言:微博又崩了,这是每当娱乐圈有什么热点新闻时,常常出现的情况,从鹿晗关晓彤在一起,到最近范冰冰李晨,新浪微博作为大厂,为什么这个问题这么多年还屡屡出现?

关于微博
微博的整体负载量级
微博平时的量级:日活1.6亿,平台接口日 百亿级别 cache 内存百T级 cache 访问万亿级
核心记录千亿级 单个核心数据 cache qps 百万级

微博的整体架构

一条正常的微博发出来,会发生什么
类比tweet,这里有了解到架构是:
Tweet 第一版
中心化的tweets,每个人插入都在那里,读取的时候读取自己的和自己follow的,随着规模扩大,无法完成

Tweet 第二版
为每一个用户维护一个时间线,每一个人发了tweet,都会推送到他的followee上,那些用户都更新自己的时间线,放入缓存
有什么问题?
一个大明星更新状态,需要给几千万的用户作推送,然后tweet的目标是5s内完成,这个不太现实

Tweet最终版
为大部分人采用维护单独时间线的方式,平均一个人75个followee,但为大V等人,采用单独的服务器,采用方案1的中心时间线, 每一个用户读取tweets的时候, merge自己的时间线和大V的中心时间线,最终返回

我们先假设新浪微博和tweet技术方案一致进行分析,一个明星发微博,其实只是在中心时间线加入了一条数据,在良好缓存机制情况下,应该一点儿问题都没有。

关于鹿晗和关晓彤事件的相关信息
2017年鹿晗关晓彤事件,新浪从阿里云服务器临时增加1000台机器抗住了压力
最终结果那一条微博为 转发46万次,评论100万,点赞250万
鹿晗的最新粉丝数:6000万 关晓彤2500万

比较一条2019年鹿晗的比较热门的微博

我们不考虑新浪后台的过滤,100万的转发,16万的评论,45万的点赞

转发/w    评论/w    点赞/w

2017 鹿晗关晓彤 46 100 250
2019 鹿晗 100 16 45
2019 范冰冰 20 25 103

看上去数量级上,相差也不太多,为什么有些导致新浪崩溃,有些反而没问题呢?

微博宕机分析
首先,定性的讲,微博崩溃肯定是由于短时间,访问过于密集导致的。但由于缺乏数据,无法比较平时和高峰时,具体的数据差异,但从有限的资料可知
2017年服务宕机,微博找阿里云临时调配1000台服务器,才最终扛过压力可知,这个差异是很大的

以下分析,纯属我个人查阅资料整理后的猜测评估
 数据库和缓存
按理说新浪的微博肯定会有良好的缓存设计,但新浪涉及到的数据有很多

参考之前新浪的数据量,所有的数据全部缓存肯定是不可能的,继续分析

  1. 微博内容,就是一条微博,一段文字,一个图片,缓存不至于扛不住
  2. 点赞,主要是短时间的计数器,但百万级的点赞,应该也还行
  3. 私信应该不涉及
  4. Feed流各种推荐算法(不知道是不是离线的,但最差也能通过降级搞定,不至于数个小时恢复不了)
  5. 由转发带来的各种关系,用户和评论才是最可怕的

微博用户目前在5亿左右,日活1.6亿,但这1.6亿在全天的登录,会有高峰,但不至于很大差别。
我们刚刚提到,大部分的普通用户是单独的时间线维护,不可能把所有的用户所有时间线全部缓存
Feed多次缓存架构
用户分析

我们先假设微博把5亿用户的前3页内容给缓存起来是什么数量级
考虑到微博一般都是图文,还动不动就是长微博,也假设你有75个好友,每个好友5天发一条微博,以一条100k计算
5亿75100k=3750T
实际上cache 内存百T级,相差1个数量级,怎么办?更不用说还有更多的相关的评论等

取舍取舍还是取舍

  1. 不缓存5亿用户的,而是通过算法分析出活跃用户,将活跃用户的进行缓存
  2. 不缓存5天了,缓存个2天
  3. 评论也不所有缓存了,只缓存第一页评论的,包括子评论
  4. 更多的不缓存

又一些资料:
资料一:截止目前17点10分,鹿晗关晓彤 的第一条评论的子评论,第二页依旧无法刷新。 显示该评论已被删除,事实上这条评论并未被删除。一般热点数据,首屏都是会缓存的,但是如果把每一条评论都缓存,代价就太高,所以当访问第二页没有被缓存的评论时,会穿透访问数据库,这时由于服务限流或降级原因,没有获取到第二页的评论,这时候就展示兜底数据评论被删除。

说明不让评论击穿到数据库,确实是服务降级了,可能后续可以通过更细粒度的热门微博评论控制提升服务质量

资料二:能查到对鹿晗微博的分析

可以看到,这个微博的覆盖人次,有8亿人,这个肯定包含很多非活跃用户,如果收到热门事件影响,大量非活跃用户冷启动加载数据,数据库确实扛不住

 中间环节

整个微博的转发,评论,点赞等,会涉及到大量的中间环节

如短时间大量的RPC调用,技术服务,列表长度,消息队列等大量环节,一个个尽我所能分析

  1. Rpc 框架都有超时时间,如果服务方无法及时处理,会导致在用户看来宕机的感觉,中间环节涉及到大量的rpc调用,大量用户密集访问,可能引起问题
  2. MQ,消息队列,大量的普通用户转发,可能会导致,大量的用户转发的微博导入到相应followee的个人时间线上
    粗略分析,30分钟内30w的普通用户转发

30w*75
假设MQ使用kafka,10w/s的处理性能,假设消费者性能跟得上的情况下,约5分钟。如果考虑到消费者更新自己时间线的消耗,但实际每个用户更新自己的时间线,如果先更新缓存,再异步落库,应该可以解耦,使得缓存提供服务

  1. 计数服务,每个微博都要对点赞,收藏,评论等功能进行计数,高峰和非高峰可能会相差很大
  2. Timeline服务,根据我们提过的服务,时间线有个人时间线和中心时间线,大量用户的登录看微博,每个人都需要对时间线内容进行排序,这是极其消耗计算性能的
0

游客xg2ly2pfnpm3k 复制链接去分享

人的嘴不比网络慢,突发事件解决方法就是对任何情况都要有一套应对系统。考虑成本问题准备

0

季雨林 复制链接去分享

压力大了当然崩溃,微博增加服务器的速度,没跟上人们的热度

0

黄二刀 复制链接去分享

鹿晗是谁????不认识

0

游客vymdg6awoydju 复制链接去分享

10 .因为爱情让人疯狂 孟婆汤可解!!!

0

游客vymdg6awoydju 复制链接去分享

IP ICMP TIME

0

游客vymdg6awoydju 复制链接去分享

shell 嵌套for i in ip
do
echo "....." &> 目录
done

0

游客fobih6tyvjq4m 复制链接去分享

递归!