双十一已经过去挺久了,不知道大家的快递是否都收到了啊,买的过瘾不,虽然今年双十一又创造了一个新高,但是没有之前双十一那样的冲动,可能是因为今年活动方式改变的缘故,但是不知道大家最近在刷抖音的时候有没有发现这样一个视频:双十一之前,阿里进行各种突发状况的演练,为的就是保障大家的购物体验,但是,这展示的只是硬件资源方面的突击,但是软件方面呢?就像手机,同样8G内存,有的运行流畅,有的就不太行,大家都知道是操作系统的原因,同样的,软件也是这样,当硬件资源已经被保证之后的问题就是软件的东西,毕竟淘宝号称10亿用户,哪怕只有一半的人,上亿用户同时在一个平台进行操作,平台怎么反应过来呢?
那这个时候,我们的头秃战神这个时候就展现出来他们的实力了,这也是外界在宣传的关于阿里内部高并发架构设计手册,这里也和大家分享一下,看阿里内部是如何进行高并发设计的!
需要免费领取这份十亿级系统架构设计手册的朋友,麻烦点赞一下文章,然后添加下小助理vx:bjmsb2020 可以免费领取!
基础入门篇
首先肯定是入门的技术介绍,其实,基础的才是最重要的,不要只是图新的技术,以淘宝为例,当时也是从0开始的,一个简简单单的小系统,随着它的发展,后期流量的增长,原有的架构已经不足以满足他的系统要求,这个时候,才开始逐步的往里填充技术,来满足对于高并发处理能力的需求,比如数据库存储引擎的改变、中间件的研发、系统架构设计等,逐步的改变才完成现在的项目架构
归根结底一句话:高并发系统的演进应该是循序渐进,以解决系统中存在的问题为目的和驱动力的。
这是基础的内容,我上面说过数据库,中间件、缓存、分布式服务、维护等方面,下面我一一介绍这些方面是如何进行的
数据库技术优化篇
其实这个方式是我们现在很多公司都在进行的,当数据量增大之后,最优先考虑的就是数据库的优化工作,因为在最一开始设计架构的时候,为的就是项目能够准时完整的上线,这个时候,一些不好的设计习惯或者比较复杂的sql语句当时没什么问题,但是当运行一段时间之后,慢慢的就会展现出来问题,这个时候,优化一下数据库可以帮忙提升很大的一块性能
缓存篇
缓存算是一个双刃剑,既可以帮你在实际的工作过程中能够解决很大的问题,但是,使用不当的话又会起到反作用,拖累整体系统的性能,那这个是欧,如果能更好的理解缓存的特性,把它放在合适的岗位上,系统的整体性能,就能得到很大的提升
消息队列篇
在学习本篇前先举一个例子:一个社区的系统初期一定是只有少量的种子用户在生产内容,而大部分的用户都在“围观”别人在说什么。此时,整体的流量比较小,而写流量可能只占整体流量的百分之一,那么即使整体的QPS到了10000次/秒,写请求也只是到了每秒100次,如果要对写请求做性能优化,它的性价比确实不太高。
但是,随着业务的发展,你可能会遇到一些存在高并发写请求的场景,其中秒杀抢购就是最典型的场景。假设你的商城策划了一-期秒杀活动,活动在第五天的00:00开始,仅限前200名,那么秒杀即将开始时,后台会显示用户正在疯狂地刷新APP或者浏览器来保证自己能够尽量早的看到商品。
这时,你面对的依旧是读请求过高,那么应对的措施有哪些呢?
因为用户查询的是少量的商品数据,属于查询的热点数据,你可以采用缓存策略,将请求尽量挡在上层的缓存中,能被静态化的数据,比如说商城里的图片和视频数据,尽量做到静态化,这样就可以命中CDN节点缓存,减少Web服务器的查询量和带宽负担。Web服务器比如Nginx可以直接访问分布式缓存节点,这样可以避免请求到达Tomcat等业务服务器。
当然,你可以加上一些限流的策略,比如,对于短时间之内来自某一个用户、 某-个IP或者某一台设备的重复请求做丢弃处理。
通过这几种方式,你发现自己可以将请求尽量挡在数据库之外了。
稍微缓解了读请求之后,00:00 分秒杀活动准时开始,用户瞬间向电商系统请求生成订单,扣减库存,用户的这些写操作都是不经过缓存直达数据库的。1 秒钟之内,有1万个数据库连接同时达到,系统的数据库濒临崩溃,寻找能够应对如此高并发的写请求方案迫在眉睫。这时你想到了消息队列。
分布式微服务篇
异常火爆的大数据为什么火起来的?有的人会说那不是很简单吗?不就是数据在传统架构中已经不能满足处理需求了呀,同样的,当工程的部署还是单体架构的时候,你敏锐的感觉好像要出问题,但是有说不清,随着数据量的增加,系统性能逐渐出现问题,那这个时候,你发现问题所在,单个模块已经能和之前的一个系统媲美,你需要将项目拆分,那这个时候,分布式微服务架构是你的首要选择,可是该怎么拆分又出麻烦了
公司不想增加成本,而你又说不明白问题出现的重要性,自己也拿不准什么时候会出问题,公司也没人有经验,那该怎么办?有没有什么参考标准呢?
维护篇
在一个项目的生命周期里,运行维护占据着很大的比重,因为在系统开发上线之后,剩下的几乎就是运维与提升了,而运维在其中占据了大多数的半壁江山,可能有人会说运维不就是监控一下性能指标吗?开玩笑,太片面了,兄弟,运维在重要性上,它几乎与项目研发并驾齐驱。而在系统运维过程中,能够及时地发现问题并解决问题,是每一个团队的本职工作。当你的项目上线之后,频频得到用户的投诉,原因是:
使用的数据库主从延迟变长,导致业务功能上出现了问题;
接口的响应时间变长,用户反馈商品页面出现空白页;
系统中出现大量错误,影响了用户的正常使用。
这些方面本可以提前发现和规避的,但是你没有,所以这个时候,你又开始考虑要搭建这样一个团队来监控性能指标,但是你的团队又陷入了困境:
首先,监控的指标要如何选择呢?
采集这些指标可以有哪些方法和途径呢?
指标采集到之后又要如何处理和展示呢?
这些问题,一环扣一环,所有的步骤看似不重要,却决定着你的系统后期性能,这影响着用户体验怎么用,所以,不要小看开发过程中的每一个环节
实战篇
在前面的内容中,我分别从数据库、缓存、消息队列和分布式服务化的角度,带你了解了面对高并发的时候要如何保证系统的高性能、高可用和高可扩展。但是这些讲的再好也就是理论的东西,纸上谈兵要不得,那这个时候,实际的案例的重要性就体现的淋漓尽致,这里我也给大家展示两个完整的案例来实践一下,找找感觉
总结
最后的最后就是这份十级并发手册的免费获方式了:点赞文章,喜欢我的话也可以关注一手哦,然后添加小助理vx:bjmsb2020 免费获取!