我的天!20年IT老民工苦心编撰成超大流量分布式系统架构解决方案
前言
本文融入了作者及其团队实践中的思考、心得与方法,可以帮助大家解决大型网站架构演变过程中遇到的诸多难题。
本文的所有内容,并不是对架构理论的泛泛而谈,而是云集技术架构从 0 到 1 演变的宝贵实践经验。我崇尚技术,也推崇技术,业务能够推动技术迅速成长,技术反过来也能推动业务加速增长。
我从本书的内容中感受到:超大流量分布式系统的架构必然是简单和清晰的,是需要不断PDCA(计划、执行、查验与行动)的,也在不断的迭代、演进中。
相信,本文所呈现的宝贵实战经验对大家大有裨益,会为大家的实际工作带来诸多帮助!因为篇幅限制只能给大家展示部分内容,需要完整版的小伙伴,希望本文能够得到大家的喜欢!!
目录
主要内容讲解
在第 1 章中,特意选择了以服务化架构作为全文的开篇,结合多年来的实践经验,从 0 到 1 为大家讲解了大型网站架构的演变过程,以及在大规模服务化场景下企业应该如何实施服务治理。
本章为大家详细介绍了互联网领域分布式系统的架构演变过程,以及大规模服务化场景下企业应该如何实施服务治理。在此大家需要注意,如果用户规模及业务需求的复杂度还没有到量,那么最好保持现有架构不变,毕竟构建一个高性能、高可用、易扩展、可伸缩的分布式系统绝非一件简单的事情,需要解决的技术难题太多。而且,如果业务没有起色,一味地追寻大型网站架构并无任何意义。
当然,随着用户规模的线性增长,以及业务需求越来越复杂,从单机系统逐渐演变为分布式系统,以更好地支撑业务发展似乎是必经之路。
在第 2 章中,重点为大家介绍了如何在大促前夕对线上环境实施全链路压测,以及如何做到有指导地在大促前进行容量规划和性能优化,让系统坚如磐石。
验证系统所能够承受的最大负载是否接近于预期,是否经得住大流量的冲击,绝非是一件易事。有过分布式系统开发经验的同学都应该非常清楚,简单对某个接口、子系统进行压测,并不能够准确探测出系统整体的容量水位,这是由分布式系统与生俱来的复杂性决定的,并且对环境、目标都有着极为严苛的要求。近些年,全链路压测似乎备受追捧,基本上各大互联网企业,比如,阿里、京东等都会在大促前夕利用自研的“军演系统”在线上进行压测实战演练,其目的就是确保大促来临时核心链路的整体稳定。
本章着重为大家介绍了企业为什么需要实施全链路压测,以及在实施全链路压测过程中业务系统、中间件,以及相应的组件应该如何配套改造升级,如何有效避免压测流量污染线上数据。在本章的最后,还为大家分享了自研军演系统的一些经验,希望大家能有所裨益。
在第 3 章中,重点讲解了如何有效地对流量实施管制,只要我们能够采用合理且有效的方式管制住峰值流量,使其井然有序地对系统进行访问,那么无论在任何情况下,系统都能够稳定运行。
像天猫这种级别的大型电商网站,主要的技术挑战是来自庞大的用户规模所带来的大流量、高并发,以及海量数据,在“双11”“双12”等大促场景下尤为明显。如果不对流量进行合理管制,肆意放任大流量冲击系统,那么将会导致一系列的问题出现,比如一些可用的连接资源被耗尽、分布式缓存的容量被撑爆、数据库吞吐量降低,最终必然会导致系统产生雪崩效应。
本章首先讲解了目前市面上一些常见的限流算法,比如令牌桶算法、漏桶算法及计数器算法等,并分享了接入层和应用层的限流方案。除使用限流技术来对外提供有损服务外,我们也可以在业务上稍作调整,采用基于时间分片的削峰方案也能够有效对流量实施管制。
最后,还为大家分享了如何基于消息中间件实现异步调用解耦、流量削峰,以及最终一致性的相关案例。
在第4章中,会重点为大家讲解大促抢购核心技术难题的一系列解决方案。
热点数据的大并发读/写操作,可谓是秒杀、限时抢购等场景下最核心的2 个技术难题。针对热点数据的大并发读操作,尽管我们可以通过分布式缓存来提升系统的 QPS,但是缓存系统的单点容量还是存在上限的,一旦超过临界水位,分布式缓存容易被瞬间击穿。而热点数据的大并发写操作,势必会下潜至数据库,那么这就会引起大量的线程相互竞争InnoDB的行锁,并发越大时,等待的线程就越多,这会严重影响数据库的TPS,导致RT线性上升,最终导致系统发生雪崩。
本章的重点则是为大家分享大促场景下针对同一热卖商品的高并发读/写技术难题的解决方案。读难题,本文为大家提供了多级缓存+RedisCluster 模式下的读/写分离方案。而写难题,则提供基于Redis乐观锁的库存扣减方案,以及嵌入Lua脚本的库存扣减方案。最后,还为大家介绍了阿里开源的AliSQL高性能关系数据库。
在第 5 章中,详细为大家讲解了在互联网场景下关系型数据库的架构演变过程。
大型电商网站几乎随时都在接受着大流量、高并发,以及海量数据的洗礼,随着用户规模的线性上升,单库的性能瓶颈会逐渐开始暴露,由于数据库的检索效率越来越低,将会导致生产环境中产生较多的慢速 SQL。对于那些非结构化的数据,可以将其存储在NoSQL数据库中来提升性能,但是重要的业务数据,仍然需要落盘在关系数据库(如MySQL数据库)中。那么如何提升关系数据库的并行处理能力和检索效率就成为架构师们需要思考和解决的难题,并且单库如果宕机,业务系统也就随之瘫痪了。因此,在互联网场景下,架构师们务必确保后端存储系统具备高容错、容灾能力,为了解决这些问题,目前互联网场景下常见的做法便是对数据库实施分库分表,即Sharding改造。
当大家清楚为什么关系型数据库需要进行分库分表后,又实战演示了如何使用Shark中间件来完成数据路由,以及业务实施分库分表后的诸多注意事项和数据库的HA方案等。最后,还结合了实际的订单业务场景为大家重点讲解了如何保证数据的最终一致性。
这份【超大流量分布式系统架构解决方案:人人都是架构师2.0】文档共有241页,因为篇幅限制 在这里就不做过多介绍了,需要完整版的小伙伴可以转发此文关注小编,点击此处来获取!
本文面向的读者
本文适用于任何对大型网站架构感兴趣的架构师、开发人员及运维人员。尽量用通俗易懂的文字描绘书中的各章知识点,更是结合了实际的业务场景引入了大量的真实案例,相信阅读完本文后你将能有所裨益。
希望大家能够把文中的技术知识牢牢记在自己的脑海之中,并且能够动手来实践,读与写相互配合,不断地提升自己,让自己的技术变得更有深度和广度,也希望本文能够得到大家的喜欢!