文章目录
分布式系统
一、单机架构
- 只有一台服务器,来负责所有的工作。(应用程序+数据库服务器在同一台主机上)
- 在前期,用户访问量少,对于性能和安全要求不高,采用简单的单机架构,不需要运维。
- 在单机上提供应用服务和数据库服务
- 如果业务进一步增长,用户量和数据量增多,一太主机无法应付时,就需要引入更多的主机和硬件资源,过度到分布式系统。
二、分布式系统
应用程序和数据库服务器分离。分别放在不同的主机上部署。
一台主机的硬件资源是有限的。(CPU资源、内存、硬盘、网络)服务器每次收到一个请求,都要消耗一些资源。如果同一时刻,收到大量请求,就会导致某项资源不够用,导致服务器处理请求的时间变长,甚至出错。
因此,要进行开源、节流。
开源:增加更多的硬件资源。增加更多的主机,形成分布式系统。
节流:在软件上进行优化,根据性能测试找到哪个环节出现了瓶颈,对症下药。
引入分布式,会提高系统的复杂度、提高出现bug的概率。
应用服务 和 数据库服务进行分离。应用服务器,会包含更多的业务逻辑,可能会吃CPU和内存,给应用服务器进行CPU和内存的补强。 数据库服务器,需要更大是硬盘空间、更快的访问速度,需要配置更大的硬盘、上SSD。针对不同的硬件资源需求,进行合理的配置。
三、应用服务器集群
引入负载均衡,应用服务器进行集群。当集群中的某个主机挂了,其他的主机仍任可以承担服务,从而提高系统的可用性。
应用服务器比较吃CPU和内存,引入更多的应用服务器来缓解CPU和内存资源的消耗。
用户的请求,先访问负载均衡器 / 网关服务器(单独的服务器),由负载均衡器(根据算法)来对请求进行分发。(相当于领导,把任务平均分配给属下)
负载均衡器对于请求的承载能力,要远超于应用服务器。负载服务器只进行分配工作,应用服务器来执行任务。
负载均衡器只需要分配就可以了,而应用服务器考虑的事情就多了~(沟槽的公式)
如果请求量大到负载均衡器扛不住了,就引入更多的负载均衡器(引入多个机房)
网络游戏中,一个区用户满了,再开一个新区。
四、读写分离 / 主从分离架构
- 主从数据库,读写分离。降低单个数据库的访问压力
- 主数据库(master)只复制写文件 ,并把写的数据同步给从数据库
- 从数据库 (slave)只复制读文件,在实际中,读操作的频率比写操作高
- 主服务器一般是一个,从服务器可以有多个(一主多从),从服务器可以通过负载均衡的方式让应用服务器来访问。
五、引入缓存/冷热分离架构
- 将数据区分“冷热”。将热点数据放在缓存中。缓存的访问速度要比数据库快很多
- 缓存服务器中,只存放一小部分热点数据(频繁被访问的数据 28定律)
- 缓存速度快,而代价就是容量小
- 先访问缓存,如果存在,就不需要再读取数据库了。从而提高速度
- 再修改主数据库的数据时,要同步到缓存和从数据库。
六、垂直分库
引入分布式系统,是为了应对更高的请求量(并发量)的同时,也能应对更大的数据量。当一台主机存不下的时候,就需要引入多台主机来存储数据
- 针对数据库,进行进一步的拆分(分库分表)
- 每个数据库服务器,只存储一个、一部分数据库。从而解决数据存储不足的问题。
- 如果某个表特别大,大到一台主机装不下,也可以对数据表进行拆分(分表)。
- 在实际中,根据具体的业务场景,来灵活进行拆分。(业余决定技术)
七、微服务架构——业务拆分
- 当应用服务器中,功能太多太复杂时,为了代码的维护。就需要把应用服务器,拆分成更多的部分。
- 每个部分只负载一小部分功能,变成功能单一、更小的服务器(微服务)
将应用服务器的业务进行拆分。每组都是多台服务器,来处理更多的并发量。同时,每组服务器,有各自的存储集群和缓存模块
分布式(解决硬件资源)->负载均衡(解决高并发量)->读写分离(降低数据库访问压力)->引入缓存(提高读取速度)->分库分表(解决存储空间不足的问题)->微服务(解决人的问题)
当应用服务器变得复杂时,就需要更多的人来进行维护。按照功能拆分成多组微服务,也有利于组织人员的分配。
代价
- 系统性能下降:引入微服务,解决了人的问题。但是跨主机网络通信,下降了整个系统的性能。拆分出的更多服务,多个功能之间依赖网络通信,网络通信的速度很可能比硬盘还慢。要想保证性能,就需要引入更多的硬件资源。(为了好的管理成本而对硬件进行充值,万兆网卡,嘎嘎贵!嘎嘎快!引入万兆网卡,就不会因为微服务的网络速度而下降太多的性能)
- 系统复杂程度提高,服务器更多,出现问题的概率变大,需要一系列手段(更丰富的监控报警、和配套的运维团队),来保证系统的可用性。
优势
- 1.解决了人的问题。
- 2.更方便实现功能的服用。
- 3.可以给不同的服务进行不同的部署。(负载量大的模块配置更好的机器)
八、名词解释
1.应用(Application)/系统(System)
一个应用,就是一个、一组服务器程序
2.模块(Model)/组件(Component)
一个应用里有很多功能,每个独立的功能,就可以成为一个模块/组件
3.分布式(Distributed)
引入多个主机/服务器,协同配合来完成一系列的工作(物理上的多个主机)
4.集群(Cluster)
引入多个主机/服务器,协同配合来完成一系列的工作(逻辑上的多个主机,一个主机上部署了多个服务器程序。这些服务器程序也是通过网络通信,在逻辑上和多个主机没有区别)
5.主(Master)/从(Slave)
分布式系统中比较典型的结构。多个服务器节点,其中一个是主,其余是从。以主节点为为,从节点的数据要从主节点上进行同步
6.中间件(Middleware)
一个、一组和业务无关的服务(功能更通用的服务 :数据库、缓存、消息队列)
评价指标
7.可用性(Availability)
系统整体可用的时间 / 总的时间 (可用性,是一个系统的第一要务)
8.响应时间(RT)
衡量服务器的性能,处理一次请求,要消耗多长时间。越小越好
9.吞吐率(Throughout)、并发量(Concurrent)
衡量系统处理请求的能力,是衡量性能的一种方式