每逢遇到恶劣的天气,使用滴滴打车的用户就会飙升,但是我们的APP从来没有崩溃过,那么滴滴的系统架构是如何设计的呢?是如何抗住千万级甚至亿级的并发量的呢?
相信大家从下面这份滴滴内部亿级并发系统架构设计手册中找到自己想要的答案~
基础篇
我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务和组件处理。
数据库篇
在前面几节课程中,我从宏观的角度带你了解了高并发系统设计的基础知识,你已经知晓了,我们系统设计的目的是为了获得更好的性能、更高的可用性,以及更强的系统扩展能力。
那么从这一讲开始,我们正式进入演进篇,我会再从局部出发,带你逐一了 解完成这些目标会使用到的一些方法,这些方法会针对性地解决高并发系统设计中出现的问题。比如,在15讲中我会提及布隆过滤器,这个组件就是为了解决存在大量缓存穿透的情况下,如何尽量提升缓存命中率的问题。
缓存篇
从整体上看,数据库分了主库和从库,数据也被切分到多个数据库节点上。但随着并发的增加,存储数据量的增多,数据库的磁盘I0逐渐成了系统的瓶颈,我们需要一种访问更快的组件来降低请求响应时间,提升整体系统性能。这时我们就会使用缓存。那么什么是缓存,我们又该如何将它的优势最大化呢?
消息队列篇
在课程一开始, 我就带你了解了高并发系统设计的三个目标:性能、可用性和可扩展性,而在提升系统性能方面,我们- -直关注的是系统的查询性能。也用了很多的篇幅去讲解数据库的分布式改造,各类缓存的原理和使用技巧。究其原因在于,我们遇到的大部分场景都是读多写少,尤其是在一个系统的初级阶段。
分布式服务篇
通过前面几个篇章的内容,你已经从数据库、缓存和消息队列的角度对自己的垂直电商系统在性能、可用性和扩展性上做了优化。
现在,你的系统运行稳定,好评不断,每天高峰期的流量,已经达到了10000/s请求,DAU也涨到了几十万。CEO非常高兴,打算继续完善产品功能,以便进行新- -轮的运营推广,争取在下个双十一可以将DAU冲击过百万。这时,你开始考虑,怎么通过技术上的优化改造,来支撑更高的并发流量,比如支撑过百万的DAU.
于是,你重新审视了自己的系统架构,分析系统中有哪些可以优化的点。
维护篇
在一个项目的生命周期里,运行维护占据着很大的比重,在重要性上,它几乎与项目研发并驾齐驱。而在系统运维过程中,能够及时地发现问题并解决问题,是每一个团队的本职工作。所以,你的垂直电商系统在搭建之初,运维团队肯定完成了对于机器CPU、内存、磁盘、网络等基础监控,期望能在出现问题时,及时地发现并且处理。你本以为万事大吉,却没想到系统在运行过程中,频频得到用户的投诉,原因是:
使用的数据库主从延迟变长,导致业务功能上出现了问题;
接口的响应时间变长,用户反馈商品页面出现空白页;
系统中出现大量错误,影响了用户的正常使用。
这些问题,你本应该及时发现并处理的。但现实是,你只能被动地在问题被用户反馈后,手.忙脚乱地修复。这时,你的团队才意识到,要想快速地发现和定位业务系统中出现的问题,必须搭建一套完善的服务端监控体系。 正所谓“道路千万条,监控第一条,监控不到位,领导两行泪”。不过,在搭建的过程中,你的团队又陷入了困境:
首先,监控的指标要如何选择呢?
采集这些指标可以有哪些方法和途径呢?
指标采集到之后敬要如何处理和展示呢?
这些问题,一环扣一 环,关乎着系统的稳定性和可用性,而本节课,我就带你解决这些问题,搭建一套服务端监控体系。
实战篇
从今天开始,我们正式进入最后的实战篇。在之前的课程中,我分别从数据库、缓存、消息队列和分布式服务化的角度,带你了解了面对高并发的时候要如何保证系统的高性能、舸用和高可扩展。课程中虽然有大量的例子辅助你理解理论知识,但是没有-个完整的实例帮你把知识串起来。
所以,为了将我们提及的知识落地,在实战篇中,我会以微博为背景,用两个完整的案例带你从实践的角度应对高并发大流量的冲击,期望给你一个更加具体的感性认识, 为你在实现类似系统的时候提供一些思路。 今天我要讲的第一个案例是如何设计一个支持高并发大存储量的计数系统。