吃透分布式系统架构,阿里大佬带你突破瓶颈

46 阅读8分钟

前言

分布式系统

在了解分布式架构之前,我们先来了解下分布式系统。按照维基百科的定义:分布式系统是一组电脑,透过网络相互连接传递消息与通信后并协调它们的行为而形成的系统。组件之间彼此进行交互以实现一个共同的目标。把需要进行大量计算的工程数据分割成小块,由多台计算机分别计算,再上传运算结果后,将结果统一合并得出数据结论的科学。

分布式架构的意义

升级单机处理能力的性价比越来越低

单机的处理能力主要依靠 CPU、内存、磁盘。通过更换硬件 做垂直扩展的方式来提升性能,成本会越来越高。

单机处理能力存在瓶颈

单机处理能力存在瓶颈,CPU、内存都会有自己的性能瓶颈, 也就是说就算你是土豪不惜成本去提升硬件,但是硬件的发 展速度和性能是有限制的。

稳定性和可用性这两个指标很难达到

单机系统存在可用性和稳定性的问题,这两个指标又是我们 必须要去解决的

没有家族和宗门的帮助,多少天才卡在分布式境界不善而终,今日吾打破自身枷锁,领悟分布式系统法则,突破此境界

能突破此境界全仰仗一位大佬给我推荐的分布式系统架构落地与瓶颈突破

本书并没有过多渲染系统架构的理论知识,【+jcc4261获取】而是切切实实站在开发-线角度, 为各位读者诠释了大型网站在架构演变过程中出现一系列技术难题时的解决方案

本书适用于任何对分布式系统架构感兴趣的架构师、开发人员以及运维人员。相信阅读本书你将会有知其然和知其所以然的畅快感

目录

  1. 第1章分布式服务案例
  2. 第2章大流量限流/消峰案例.
  3. 第3章分布式配置管理服务 案例.
  4. 第4章大促场景下 热点数据的读/写优化案例
  5. 第5章数据库分库分表案例

第1章分布式服务案例

1.1 分布式系统的架构演变过程

本章笔者为大家详细介绍了互联网领城分布式系统的架构演变过程。在此大家需要注意,如果用户规模及业务需求的复杂度还没有到量,那么最好保持现有架构不变,毕竞构建一个高性能、高可用,易扩展、可伸缩的分布式系统绝非一件简单的事情,需要解决的技术难题太多。而且,如果业务没有起色,一味地追寻大型网站架构并无任何意义。当然,随着用户规模的线性增长,以及业务需求越来越复杂,从单机系统逐渐演变为分布式系统,以更好地支撑业务发展似乎是必经之路。

第2章大流重限流/消峰例

天猫、淘宝这种级别的大型互联网电商网站,主要的技术挑战来自于庞大的用户规模所带来的大流量和高并发,在“双11". “双12” 等大促场景下尤为明显。如果不对流量进行合理管制,肆意放任大流量冲击系统,那么将导致- - 系列的问题出现,比如一些可用的连接资源被耗尽、分布式缓存的容量被撑爆、数据库吞吐量降低,最终必然会导致系统产生雪崩效应。当然,应对大流量和高并发也没有大家想象得那么复杂和神秘,一般来说,大型互联网站通常采用的做法是通过扩容、动静分离、缓存、服务降级及限流五种常规手段来保护系统的稳定运行。

2.1分布式系统为什么需要进行流量管制

笔者从业务层面和技术层面两个维度为大家详细讲解了应该如何对流量实施管制,从而避免在大促场景下因峰值流量过大对系统造成较大冲击,引发系统出现雪崩现象。笔者先为大家讲解了目前市面上一些常见的限流算法,比如令牌桶算法.漏桶算法及计数器算法等,并演示了如何使用Nginx的限流功能来实现接人层限流,以及使用计数器算法在限时抢购场景下控制单机并发写流量。除了可以运用技术手段实施流量管制,也可以在业务上做调整,换一种思路或玩法,采用基于时间分片的消峰方案也可以有效对流量实施管制。最后,笔者为大家讲解了如何使用MQ进行异步调用、实现系统之间的解构,并为大家演示了阿里开源的消息中间件RocketMQ的具体部署和使用方式,还分享了笔者在实际工作中基于MQ实现流量消峰的一些典型案例。

第3章分布式配置管理服务案例

相信大家对配置信息都不会感到陌生,在实际的开发过程中,无论是访问数据库、分布式缓存系统、消息队列,还是通过Dubbo框架实现RPC调用,都需要提前配置好目标URL.账号/密码等信息,因此这类信息也被称为配置信息。在大部分情况下,我们都会选择将相关配置信息配置在配置文件中,当系统启动时,会从指定的目录下进行加载,通过获取配置文件中的配置信息项来完成环境的初始化工作。除此之外,我们在使用电脑进行办公、娱乐时,也会高频率地与配置信息打交道,比如,通过操作系统的控制面板来设置显示器的分辨率、鼠标的双击速度,以及区域和语言设置等,这些都属于配置信息,所以如果你告诉我你从未接触过配置信息,那么我一定会摇摇头对你说这不可能。

31:1将配置信息耦合在业务代码中

第4章大促场景下热点数据的读/写优化案例

本章笔者会结合实际的工作经验,为大家重点讲解大促场景下热点数据读/写技术难题的一-系列解决方案。

4.1缓存技术简介

热点数据的读/写操作其实是秒杀,抢购场景下最核心的技术难题。本章以为什么需要在系统中使用缓存技术作为开篇,重点讲解了本地缓存Ehcache及分布式缓存Redis技术,并介绍了如何使用Jedis, Redisson 等客户端API与Redis进行交互。

第5章数据库分库分表案例

大型网站几乎时时刻刻都在接受着高并发和海量数据的洗礼,随着用户规模的线性上升,单库的性能瓶颈会逐渐暴露出来,由于数据库的检索效率越来越慢,导致生产环境中产生较多的慢速SQL。对于非结构化的数据,可以将其存储在NoSQL数据库中来提升性能,但是重要的业务数据,仍然要落盘在关系型数据库(如MySQL数据库)中。那么如何提升关系型数据库的并行处理能力和检索效率就成为了架构师需要思考和解决的棘手问题,并且单库如果宕机,业务系统也就随之瘫痪了。因此,在互联网场景下,架构师务必要确保后端存储系统具备高可用性和高性能,为了解决这些问题,目前互联网场景下常见的做法便是对数据库实施分库分表,即Sharding改造。

5.1关系型数据库的架构演变

架构师到底是什么?它真的是开发人员口中所述的不会写代码的“ 技术大忽悠”吗?其实笔者也发现,目前互联网企业的架构师,真正奋斗在一线和程序员们一起Coding的确实太少。当然,并不是说Coding应该是架构师的主要工作,因为大企业的架构师们更主要的工作是负责把控方向,掌舵大局。笔者认为,作为一名合格的架构师,肯定是需要权衡一些东西的,哪个是主要矛盾就优先解决哪一个。但这并不代表给了你不写任何代码的权利,而是你应该比其他人做得更多,付出得更多,这样才能够使你的架构更接地气,更好地将架构落地。除此之外,架构师对于业务的理解一定要透彻, 否则你的架构又为谁而设计呢?