左耳听风_024_23_分布式系统的技术栈
你好,我是陈浩网名猪耳朵house.那正如我们前面所说的,构建分布式系统的目的呢是增加系统的容量,提高系统的可用性。
那转换成技术方面呢,也就是完成这两件事儿。
第一呢是大流量处理,通过集群技术把大规模并发请求的负载分散到不同的机器上。
那第二呢是关键业务保护通高后台服务的可用性,把故障呢隔离起来,阻止多米诺骨牌效应。
那如果流量过大呢,就需要对业务降级,以此来保护。
关键业务流转,说白了就是干两件事儿,一是提高整体架构的吞吐量服务更多的并发和流量。
二呢是为了提高系统的稳定性,把系统的可用性啊更高。
那我们先来说第一件事,提高架构的性能。
咱们先来看一看提高系统性能的常用技术。
那这里呢我在文中总结的一张图啊,你可以看一下。
首先呢是缓存系统。
第一缓存系统呢可以有效的提高系统的访问能力。
从前端的浏览器啊到网络再到后端的服务,底层的数据库、文件系统、硬盘和CPU全都有缓存。
因为这是可以快速访问能力最有效的手段。
那对于分布式系统下的缓存系统呢,需要的是一个缓存集群,这其中呢就需要一个proxy啊来做缓存的分片和路由。
第二呢是负载均衡系统,负载均衡系统呢是水平扩展的关键技术,它可以可用多台机器来共同分担一部分流量请求。
第三呢是异步调用。
那异步系统呢主要通过消息队列来对请求做排队处理。
那这样呢就可以把前端的请求的峰值啊给消屏了。
而后端呢还过自己能够处理的速度来处理请求。
那这样可以增加系统的吞吐量啊,但是实时性啊就差很多了。
同时呢还会引入消息丢失的问题,所以呢要对消息做持久化。
那这样呢又会造成有状态的节点,从而增加的服务调度的难度。
那第四呢是数据分区和数据镜像。
那所谓数据分区呢,就是把数据按照一定的方式啊分成多个区,比如通过地理位置,而不同的数据区呢来分担不同区的流量。
那这就需要一个数据路由的中间件会导致跨库的join和跨库的事物非常复杂。
而数据镜像呢就是把一个数据库镜像成多份一样的数据。
那这样呢就不需要数据路由的中间件了,你可以在任意节点上进行读写内部呢会自行同步数据。
然而数据镜像中最大的问题呢就是数据的一致性问题。
那对于一般公司来说呢,在初期会使用读写分离的数据镜像模式,而后期呢会采用分库分表的方式。
那接下来呢咱们再来看一看提高系统稳定性的一些常用技术。
我同样呢给你在文中总结了一张图。
第一个技术呢是服务拆分。
服务拆分呢主要有两个目的,一是为了隔离故障,而呢是为了重用服务模块。
但服务拆分完之后呢,会引入服务调用间的依赖问题。
那第二呢是服务冗余。
服务冗余呢是为了去除单点故障,并且可以支持服务的弹性伸缩和故障迁移。
一是对于一些有状态的服务来说呢,冗余这些有状态的服务啊带来了更高的复杂性。
那其中一个呢就是弹性伸缩的时候啊,需要考虑到数据的复制啊,或者重新分片。
那迁移的时候呢,还要迁移数据到其他机器上。
那提高系统稳定性的第三个技术呢是限流降级啊,当系统实在扛不住压力的时候呢,只能通过限流或者功能降级的方式来停掉一部分服务啊,或者是拒绝一部分用户来确保整个架构不会挂掉。
那这这些技术呢属于保护措施。
那第四呢就是高可用架构。
那通常来说呢,高可用架构啊是从冗余架构的角度来保障可用性,比如多租户隔离啊,灾位多活或者数据可以在其中复制保持一致性的集群。
总之呢就是为了布出单件故障。
最后呢第五个技术是高可用运维。
那高可用运维呢指的是develoo s中的CICD啊,也就是持续集成,持续部署一个良好的运维啊,应该是一条很流畅的软件发布管线。
那其中做了足够的自动化控制,还可以做相应的灰度发布,还有对线上系统的自动化控制。
那这样呢可以做到计划内啊或者非计划内档期事件的时长最短。
那以上讲的这些技术啊非常有技术含量,而且需要投入大量的时间和精力。
而通过上面的分析,我们可以看到引入分布式系统呢会引入一堆的技术问题,那就需要从这几个方面来解决。
第一个呢是服务治理,包括服务拆分、服务调用、服务发现、服务依赖服务的关键度定义等等。
那服务治理的最大意义呢是需要把服务间的依赖关系、服务调用链和关键的服务啊给梳理出来。
并且呢对这些服务进行性能和可用性方面的管理。
那第二呢是架构软件管理服务之间有依赖,并且呢还有兼容性问题。
所以整体服务所形成的架构呢需要有架构版本管理,整体架构的生命周期管理,还有呢对服务的编排、聚合、事务处理等等服务调度功能。
第三呢是DVOBS,分布式系统呢可以更加快速的更新服务。
但是对于服务的测试和部署呢都会是一种挑战。
所以呢还需要DVVOPS的全流程啊,其中包括环境的构建、持续集成啊,持续部署等等。
那第四个方面呢是自动化运维。
那有了带vos之后呢,我们就可以对服务啊进行自动伸缩、故障迁移、配置管理状态管理等一系列的自动化运维系系统。
那第五个呢是资源调度管理,应用层的自动化运维啊,需要基础层的调度支持,也就是云计算IS层的计算理理应络等资源的调度隔离和管理。
那第六呢是整体架构的监控。
如果没有一个好的监控系统呢,那么自动化运维和资源调度管理啊只可能成为一个系影。
因为监控啊是你的眼睛,没有眼睛,没有数据就无法进行高效的运维。
所以说呢监控啊是资源重要的部分。
那这里的监控啊需要对应用层、中间件层、基础层这三层系统啊进行监控。
那最后呢第七个方面是流量控制、负载均衡、服务路由、熔断降级,还有限流等等和流量相关的调度啊,都会在这里,包括灰度发布啊之类的功能啊,也在这里这个时候呢你会发现要做好这么多的技术啊,或者说要具备这么多能力啊,简直就是一个门槛槛,是一个成本啊非常高的技术战。
看着就头晕要实现出来啊,得投入多少人力、物理和时间啊。
是的,这个就是分布式系统中啊最大的坑。
不过呢我们应该庆幸自己生活在了一个非常不错的年代。
今天呢有个技术叫docker, docker和它衍生出来的cuber netice之类的软件啊或解决方案大大的降低了。
做以上很多事情的门槛,docker把软件和它的运行环境啊打成了一个包,然后比较轻量级的启动和运行。
那在运行过程中呢,因为软件变成了服务啊,可能会变变现有的环境。
但是呢没关系,当你重新启动一个docker的时候呢,环境又会变回初始化的状态。
那这样一来呢,我们就可以利用docker的这个特性,把软件在不同的机器上进行部署、调度和管理。
那如果没有docker或者cuber netice啊,那么你可以认为我们还活在原始时代。
现在你知道为什么dolpher这样的容器化虚拟技术是未来了吧?因为分布式系统啊已经是完全不可逆转的技术趋势了。
但是呢上面还有很多的技术是docker和他的周边技术啊没有解决的。
所以呢我们依然还有很多事情要做。
但如果是一个一个的去做这些技术的话,就像是我们在撑开一张网里面的一个一个的网眼。
本质上呢这是始蛮力的做法。
我们希望可以找到系统的纲,一把呢就能张开整张网。
那么这个缸在哪里呢?那总结一下刚才讲述的自动化,你不难发现,分布式系统呢有五个关键技术,他们分别是全站系统监控服务和资源调度、流量调度状态和数据调度。
还有呢开发和运维的自动化,而最后一项开发和运维的自动化是需要把前面的四项都做到了啊才有可能实现的。
所以最为关键的是,这四项技术,也就是应用整体监控资源和服务调度,资态和数据调度和流量调度。
我们是构建分布式系统啊最最核心的东西。
我把这四项技术啊总结成了一张图啊,你可以在文中看一看,在后面的课程中呢,我会一项一项的解析这些关键技术。
那这节课到这里就结束了让我们回顾一下今天的要点内容。
首先呢我总结了分布式系统啊需要做的两件事儿。
一是提高整体架构的吞吐量服务更多的并发和流量。
二呢是为了提高系统的稳定性,让系统的可用性啊更高。
然后呢,我分别从这两个方面去阐释,需要通过哪些技术来实现,并且呢梳理出其中的技术难点和可能会带来的问题。
最后呢欢迎你也来分享一下你在解决系统的性能和可用性方面使用到的方法和技巧。
虽然docker和他衍生出来的cobonnetice等软件或者解决方案,能大大的降低很多事儿的门槛,但是他们没有解决的事情啊,还有很多我们需要掌握分布式系统的五大关键技术啊,从根本上解决问题。
那在后面呢,我将陆续撰写几篇文章来讲一讲这几大关键技术。
那详细情况呢,你可以看一看文末给出的分布式系统架构的本质系列文章的目录。