浅谈分布式系统


目录


一、单机架构

单机架构,只有一台服务器,这个服务器负责所有工作。

绝大多数公司的产品,都是这种单机架构。现在计算机硬件发展迅速,哪怕只有一台服务器,但是这台服务器性能很好,可以支持非常高的并发,非常大的数据存储。单机架构足以支撑。

二、分布式架构

一台主机的硬件资源是有上限的,包括不限于:CPU、内存、硬盘、网络...等等。服务器每次收到一个请求,都是需要消耗上述的一些资源的。如果同一时刻,处理的请求多了就可能会导致某个硬件资源不够用了。无论是那个方面不够用了,都可能会导致服务器处理请求的时间变得很长,甚至于处理出错。而一台主机上面能增加的硬件资源是有限的,取决于主板的拓展能力。如果一台主机拓展到了极限还是不够,就只能引入多台主机了。一旦引入了多台主机,系统就可以称作为"分布式系统"。引入分布式,一定是万不得已。

1、应用服务与数据库分离

针对不同的服务配备不同的服务器,例如应用服务器里面可能会包含很多的业务逻辑,会占用大量的CPU资源。而数据库服务器,则需要更大的硬盘空间,更快的数据访问速度,可以配备更大的硬盘服务器。

2、负载均衡

假设在上述情况下,应用服务器还是没有抗住,就需要再引入更多的应用服务器来解决上述问题。

用户的请求,会先到达负载均衡器/网关服务器。假设现在有1w个用户请求,有2个应用服务器,此时按照负载均衡的方式,就可以让每个应用服务器承担5k的访问量。负载均衡器对于请求量的承担能力,是远远超过应用服务器的。负载均衡器是分配工作,不需要执行任务。

3、数据库读写分离

增加应用服务器,确实能够处理更高的请求量。但是随之存储服务器要承担的请求量也更多了。

实际应用场景种,读的频率是远高于写的频率。主服务器一般是一个,从服务器要有很多个(一主多从)。从节点的数据,要从主节点这同步过来,以主节点为主。

4、引入缓存

数据库天然就有个问题,那就是响应速度慢。我们可以把数据区分为"冷热"数据,热点数据放到缓存中,缓存的访问速度往往比数据库快很多。

缓存服务器中会存放一些小部分的热点数据,热点数据是会被频繁访问到的数据。这里的缓存服务器,就可以用Redis,从数据库存储的仍然是全量数据。这时候,缓存服务器就帮数据库服务器缓解了压力。

5、数据库分库分表

引入分布式系统,不光要能够去应对更高的请求量(并发量),同时也要能应对更大的数据量。一台主句存不下,就需要多台主机来存储。针对数据库进行进一步的拆分,分库分表。引入多个数据库服务器,每个数据库服务器存储一个或者一部分的数据库。

具体如何分库分表,要结合实际的业务场景来展开。业务至关重要,技术知识给业务提高支持。业务决定了技术。

6、引入微服务

前面的应用服务器通常都是一个服务器程序,其中包含了很多的业务逻辑,这可能导致单个服务器的代码变得越来越复杂。为了便于代码的维护,可以将这样一个复杂的服务器拆分为更多、功能更单一但更小的服务器,这就是所谓的微服务。

引入微服务的代价:

  1. 系统的性能会下降:拆除更多的服务,多个功能之间要更依赖网络通信,网络通信的速度可能会比硬盘慢。
  2. 系统复杂程度更高,可用性收到影响:服务器更多了,出问题的概率更大了。

引入微服务的优势:

  1. 解决了人的管理问题。
  2. 使用微服务,可以更方便于功能的复用。
  3. 给不同的服务进行不同的部署。
相关推荐
zquwei7 分钟前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
道一云黑板报4 小时前
Flink集群批作业实践:七析BI批作业执行
大数据·分布式·数据分析·flink·kubernetes
飞来又飞去5 小时前
kafka sasl和acl之间的关系
分布式·kafka
MZWeiei6 小时前
Zookeeper的监听机制
分布式·zookeeper
莹雨潇潇6 小时前
Hadoop完全分布式环境部署
大数据·hadoop·分布式
浩哲Zhe7 小时前
RabbitMQ
java·分布式·rabbitmq
明达技术8 小时前
分布式 IO 模块:赋能造纸业,革新高速纸机主传动
分布式
Allen Bright8 小时前
RabbitMQ中的Topic模式
分布式·rabbitmq
李洋-蛟龙腾飞公司10 小时前
HarmonyOS Next 应用元服务开发-分布式数据对象迁移数据权限与基础数据
分布式·华为·harmonyos
rainoway10 小时前
CRDT宝典 - Multi-Value-Register
前端·分布式·算法