微服务在微博的运用:为什么现在不怕流量小生的DDOS攻击了?

2018 年 9 月 2 日 InfoQ
作者 | 胡忠想
编辑 | 张娜
剪辑 | 杨大明

建议在WiFi环境下观看,土豪随意~

胡忠想,微博技术专家,极客时间《从 0 开始学微服务》专栏作者。从 2012 年加入微博到现在,从事微博首页信息流相关的业务研发,几乎亲历了微博后端架构的每一次重大升级。不仅参与了微博后端架构从大的单体应用迁移到微服务架构的改造;还作为主要负责人之一,主导了微服务架构在公司多个业务线的推广和落地。在极客 Live 与大家作了主题为“阿忠伯趣谈微服务”的分享,今天将直播回顾文分享给大家。

微服务架构那些事儿
微服务监控如何上报?

一般微服务是在很多台机器上同时部署的,微服务的监控上报主要有两种技术方案:一种是你在不同服务上部署一个 agent,相当于一个代理程序,然后你的程序往本地打日志,或者往代理上传输日志,代理来负责把各个日志搜集起来,再统一放到一个地方,比如 scribe 和 kafka,它们都是相当于在你的机器上有个代理,统一把日志输出到一个统一的地方来进行处理。

还有一种就是各个服务器上指标数据直接通过 UDP 协议传给 Statsd,由 Statsd 收集起来,比如说微博就是采用的 Statsd 搜集日志,再发给 graphite 处理,处理完了之后,再提供各种的图形化界面,或者提供接口给 grafana 调用展示。

微服务和分布式有什么关系?

现在各大的网站,或者说是应用,基本上都采用分布式。分布式简单理解,只要不是在一台服务器上部署的,就可以为认为它是分布式。

分布式涉及分布式缓存,分布式数据库,分布式系统,分布式文件系统,只要有多台机器上提供同样的服务,都要涉及分布式。

微服务肯定是建立在分布式基础上,是一个架构,分布式相比于单机,你可以认为它是一种访问模型。

微服务的服务发现和服务追踪怎么做?

首先服务发现的问题需要通过注册中心来解决,它的原理是服务启动的时候调用注册中心给的接口,相当于在注册中心里注册一下服务的地址,IP 端口,另外一边服务调用方启动的时候,在配置文件里配一下需要调用哪些服务,启动时候访问注册中心去查一下得到相应的 IP 地址然后建立连接,如果有服务调用的时候,就根据负载均衡算法去选择一台机器来调用。

再来看下服务追踪系统,每一次调用的前后,会通过各种方式,不管是通过 AOP 切面方式,还是通过字节码注入的方式,在调用前后把服务追踪信息存储起来再上报。跟服务监控原理类似,把这个调用的信息上报到一个统一的地方,然后就是统一的地方再把这个调用的链路,根据你的调用 ID 把它串联起来,串联起来之后你就可以在一个统一的系统里去看,这里边专栏里会细讲,如果有什么问题,可以在专栏里留言。

学习微服务的前提是什么?如何学习?

微服务的话,首先要具备基础的语言知识和编程经验,另外有写过大型的工程代码的经历,哪怕你是在校生,写过课程管理系统,有上万行的代码经验都行。因为这是理解微服务技术所必须的,如果你没写过几行代码来看微服务,那肯定是不靠谱,有工程经验之后,再学微服务会顺畅很多。

微服务整个架构涉及的知识点比较多,包括服务注册,发现,服务监控,服务治理,服务调用,服务追踪这些东西,每个点你都必须掌握,每块涉及的知识点又不同,刚才有提到微服务监控上报的,有不同的解决方案,每个解决方案优缺点是什么,还有服务治理方面的,比如说熔断、双发、超时重试,包括故障节点的自动摘除、自动扩容等,整个微服务架构涉及的知识点是比较多的,所以如果想掌握整个微服务架构,每个知识点都必须详细掌握。

如果你想在微服务架构这方面有比较深刻的理解,或者说有充足的经验的话,这些都必须掌握的,如果主要是做业务开发的话,了解一下基本原理,知道一些常见业务的错误处理方式,知道怎么部署,怎么运维就可以了。

分布式事务的可靠性怎么保证?

微服务拆分并不是把所有的东西都拆成微服务,而是根据瓶颈来决定采不采用微服务,不要为了拆微服务而拆微服务,如果引入分布式事务的话,会是一个很麻烦的事情。常用的手段有补偿,还有分布式锁来决定成功没成功之后,如果没成功要回滚,再重新执行,处理非常复杂,对性能也会有影响,所以说在拆分微服务的时候,最好不要涉及这方面。

微服务在微博的应用
微博如何应对突发事件的流量冲击?

在两年前,那时候微博的热点事件还没有这么集中,自动扩容都是纯是靠人肉运维,服务有问题报警,报警完了,开发运维立马介入,给运维人员带来不少的麻烦。去年微博热点事件比较集中,经常有明星恋爱出轨之类的新闻,会给微博带来突发的大的流量,群众一涌而进,有时候经常出现卡顿,或者刷不出来,后来我们做了一个自动扩缩容系统,他能在分钟级别,就把服务器给扩容起来,自动处理,不用人为去职守。现在微博都是用自动扩缩容来处理这种问题。

鹿晗事件是怎么造成微博瘫痪的?

鹿晗那次情况比较特殊。因为事件发生在去年,去年中秋节和国庆假期一起 8 天长假,前 7 天风平浪静,到第 8 天的时候,鹿晗突然公布恋情。很多用户在国庆期间很少登录微博,看到这个新闻,就全登陆微博看热点,这一部分用户相当于是一个召回用户,这些用户在我们系统里,可以认为是一个冷数据,系统访问性能很差,一差拖慢,一个系统一慢,就发生雪崩效应了,依赖的系统,再往上,整个系统都会拖慢,从底层到上层,整个都被拖死了,造成短时间的系统瘫痪。

支持 8 位明星并发出轨的梗是什么情况?

首先在公开场合正式辟谣一下,我没有说过支持 8 对,几对不重要,重要的是微博目前能支持很大的整体流量,这也跟我们刚才讲的自动扩缩容整个系统有关,可以理解为我们自动扩缩容系统它是不管有多大容量能进来我们都会不断的扩容机器,微博这边用的是阿里云,从阿里云上创建机器,能在十分钟内完成上千台的规模的部署,只要后端有机器,理论上多少对应该是没问题,可能系统上还会有瓶颈,但目前已经发生的各种娱乐事件还没有检测出来。

微博的 Go 语言运用情况?

微博应用的语言比较广泛,主站跟移动服务端都用的 PHP, API 的服务端用的主要是 Java,大数据这边还有 C++。随着后来的发展,我们在高性能方面,需求越来越大,在高并发的情况下,Go 语言还是有一定的优势的。所以我们的一些基础中间件,就已经有用 GO 语言来实现了。后来做的跨语言的微服务框架也是用 GO 语言开发的,还有一些底层基础组件也有用到 GO 语言开发,GO 语言现在在微博的技术占比已经非常大了,微博的混合云平台 DCP 系统,主要也都是用 GO 写的。可以说我们后来几个大的平台系统基本上都是用 GO 语言写的,我们对 GO 语言的需求也是非常强烈的。

微博的微服务相比其他大厂的优势?

大家的微服务架构发展都是跟各自的历史有关的,比如说微博这边历史是从 13 年前开始,微博这边自己做了自己的服务框架 motan,主要因为微博后端是用 Java 语言写的,写了一个自己的服务框架 motan,自己研发注册了配套中心,并且研发了这种服务的监控,还有包括后来演进服务治理平台,都是一步一步迭代来的,去年做得跨语言服务框架 motan-go,都是一步一步演进,由需求不断来催生的。

每家公司选择自己的技术方案也都是根据自己的公司的架构不断演进的,比如说美团点评,他们最早可能是采用开源的方案实现的,后来开源方案逐步不能满足他们自己的需求,有很多自己需要定制二次开发的,在开源上实现就比较麻烦,自己重写,先写一套服务框架,然后又自己演进,就变成现在这种模式,所以说每家公司这种都是有自己的发展历史来决定的,没有说那种方案是最好的,只有说是适合自己的。

微博的容器部署平台是采用的 K8S 吗?

微博的容器平台是自研的,16 年在研制这个容器平台的时候, K8S 还不成熟,需要跟我们自己的运维系统对接,还是自研比较合适。跟 K8S 是有区别,K8S 更通用,更适合从 0 开始,在什么基础系统都没有的前提下,直接上一套 K8S 这种比较合适。

对应届生的建议
应届生该怎么样去选择岗位和方向呢?

应届生,我这里只针对程序员,大部分人可能是看哪个方向比较火,就找那个方向。比如说,这两年这种人工智能比较火,一部分学生去学习机器学习,算法之类的,各大公司招聘的岗位也很多,但岗位要求也比较高,基本都是需要的是有经验的。刚毕业的大学生想应聘这类初级岗位,除非是算法比较好,或者需要拿过什么国际奥林匹克竞赛之类,互联网公司会抢着要,不然也是很难找到工作。另外一部分应届毕业生,还是想从事基础的系统工程师,或者测试工程师这些方向,有些可能想做测试的,有些想做产品的,有些想做系统开发的,这些是方向问题。

应届生如何选择岗位,我建议是,第一先看公司,第二个要看平台,你在一个公司进入到什么平台内,这个平台属不属于这个公司的当前的核心的一个部门,比如说各大互联网公司都有自己的核心领域,只要是核心领域,他的技术肯定不是最差的,至少是业界领先的,理论上它的技术是值得学习的。

所以说,如果你在第一份工作的时候,我建议还是以学习为主,你再投入两到三年的时间,学好基本功,学好这些大公司的工程经验,把它的那种线上经验,线上各种东西能扎实掌握的话,其实两到三年后的话,基本上就可以达到一个另外一个层级了,进入一个高级工程师的角色。从高级工程师再往上,考察的不仅是技术能力了,考察更多的是协调和项目推动能力。

所以前几年的话,找工作时候还是注重要看中平台,能带给你什么,如果你实习过更好,实习的话,你能了解你实习的公司的这个地方到底是一个什么样的情况,如果没实习过,建议还是多咨询一下,哪些平台,是不是这个公司里比较核心的。

如果想往基础架构方向发展,该如何学习?

首先得有平台给你提供这种机会,如果说所在的公司没有这种机会,或者说是没有这种平台来给你提供这种机会的话,靠自学其实挺难的,因为架构这个东西,你没有实际的项目来做支撑,其实没有什么意义的,所以说还必须有这种大的,有体量的这种项目来作为支撑,这样的话,你的架构才有意义。

现在流行的,包括微服务、异地多活,都是建立在业务有这个需求的基础上,或者说有这种挑战,才会有这种架构需求,才能在这方面做一些事情,所以说首先你得有这个平台,有这种项目给你这个机会。

第二个,做基础架构与做业务开发最大不同之处在于,自我驱动能力要求更高,不像做业务开发你是面向产品的,整个项目周期都是由产品来控制,大部分时间跟着产品的节奏走就行了,而做基础架构,你要有自我驱动力,有自己的目标,有自己的方向。如果说是刚开始学习,还是建议从最基础的知识学习,基础架构需要的各种知识,比如说网络知识,高可用性方面的知识,都是在学这些架构之前必须掌握的,或者说你往这种架构师方向前进都必须掌握的。


微博技术专家胡忠想老师在极客时间开了专栏《从 0 开始学微服务》。微服务是当下最火热的后端架构之一,不管你是一个什么级别的程序员,也不论你在一个什么体量的公司,服务化都是你迟早会遇到的难题。号称能够支持 8 位明星并发出轨的微服务系统是如何设计的,胡忠想老师在专栏中给出答案。

登录查看更多
1

相关内容

模型优化基础,Sayak Paul,67页ppt
专知会员服务
76+阅读 · 2020年6月8日
【SIGMOD2020-腾讯】Web规模本体可扩展构建
专知会员服务
30+阅读 · 2020年4月12日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
68+阅读 · 2020年3月9日
广东疾控中心《新型冠状病毒感染防护》,65页pdf
专知会员服务
19+阅读 · 2020年1月26日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
96+阅读 · 2019年12月4日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
30+阅读 · 2019年10月17日
腾讯推荐引擎组员工:谈谈推荐系统架构
腾讯大讲堂
14+阅读 · 2019年10月23日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
今日头条技术架构分析
互联网架构师
11+阅读 · 2019年8月19日
防代码泄漏的监控系统架构与实践
FreeBuf
5+阅读 · 2019年4月30日
2019,再不做私域流量就晚了?
互联网er的早读课
16+阅读 · 2019年4月10日
改了3次APP首页后,我的一些认知
从0到1
11+阅读 · 2019年1月13日
蚂蚁金服微服务实践(附演讲PPT)
开源中国
18+阅读 · 2018年12月21日
一个人的企业安全建设之路
FreeBuf
5+阅读 · 2017年7月7日
Arxiv
20+阅读 · 2019年11月23日
Arxiv
4+阅读 · 2019年8月7日
Arxiv
3+阅读 · 2018年10月25日
Arxiv
5+阅读 · 2018年10月23日
VIP会员
相关资讯
腾讯推荐引擎组员工:谈谈推荐系统架构
腾讯大讲堂
14+阅读 · 2019年10月23日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
今日头条技术架构分析
互联网架构师
11+阅读 · 2019年8月19日
防代码泄漏的监控系统架构与实践
FreeBuf
5+阅读 · 2019年4月30日
2019,再不做私域流量就晚了?
互联网er的早读课
16+阅读 · 2019年4月10日
改了3次APP首页后,我的一些认知
从0到1
11+阅读 · 2019年1月13日
蚂蚁金服微服务实践(附演讲PPT)
开源中国
18+阅读 · 2018年12月21日
一个人的企业安全建设之路
FreeBuf
5+阅读 · 2017年7月7日
Top
微信扫码咨询专知VIP会员