从单台服务器到分布式服务器的演化过程

1.单台服务器

image-20230905093238635

并发量过大就会出现各种问题

2.把服务器和数据库分离

image-20230905101626184

我把应用和数据库分别部署到不同的服务器上,缓解了负载压力

3.应用服务器集群

image-20230905102225579

出现的问题是:

a.需要使用session和cookie维护用户:

  • session用来跟踪用户状态,cookie用来在用户浏览器存储的信息

  • session从一台请求服务器切换到另一台的时候需要做一个信息共享

  • 为了保证会话状态,需要将会话请求固定在一个服务器上

  • 需要采取安全措施保证cookie的安全性

b.到底应该访问哪一台服务器才能做到不聚堆(负载均衡)

4.负载均衡服务器(见博客)

image-20230905104403682

问题:数据库负载太高了

5.数据库服务器集群

image-20230907094118556

把数据库分成读和写,主数据库(写)处理增删改操作,只有一个,从数据库(读)处理读操作,可以有多个。这样能减轻负载压力。

(也可以是多主数据库,每个数据库既能处理读又能处理写)

这样的问题是:

a.数据一致性问题:读写分离模式中,写数据库把写的过程发给读数据库,做相应修改。多主模式中,各个数据库同步修改。有可能出现数据库的数据延迟问题。

b.数据库路由策略:本质上和负载均衡差不多,访问读数据库的时候到底访问哪个(有待展开,轮询/权重/延迟/动态路由等)

6.搜索引擎集群

image-20230907140532746

搜索引擎存的是索引,请求来了先查询索引再去找真实数据

问题在于:怎么保证引擎的索引和真实数据的一致性(同步问题)

7.缓存服务器

image-20230907141743752

把经常查询的数据存到缓存服务器里,下次查询的时候,要是缓存服务器有的话就不用上读服务器里查去了。能减轻一部分负载压力。

缓存服务器基于内存存储的,读取速度比数据库和搜索引擎快,能处理更多请求。这一版用户量没有上限。

而且后端服务不可用的时候,缓存服务器还能获取到一部分数据,不是完全瘫痪。

问题:仍然是数据一致性问题。

8.数据库水平和垂直拆分

image-20230907143606629

水平拆分是将相同类别的数据分块,比如处理订单的时候按照月份划分成不同的数据库,可以实现并行操作,并且能够在扩展的时候增加结点即可,不用迁移整个数据库。还能提高查询效率,访问特定节点即可,不用扫描整个数据库。(数据划分和分散处理)

垂直拆分是将不同业务拆分成不同数据库,比如用户信息,商品信息和订单信息。访问其中一个数据库的时候避免对其他数据库的干扰。增加了独立性。(解耦和业务关联性)

9.应用服务器垂直拆分

image-20230907145119591

把一个应用服务器的不同功能模块按照业务进行拆分,增强独立性,可扩展性

问题:可能会有交互调用的问题,假如访问用户信息的时候又需要访问商品信息,那么有可能就会出现用户访问用户信息服务器,而用户信息服务器去访问商品信息服务器的情况出现(个人理解

为什么没有水平的(之前的服务器集群类似于水平拆分,但是有一些区别:个人理解水平拆分是对相同业务的拆分,服务器集群只是把并发量分散了,水平拆分是按照特定的规律,如果是水平拆分应用服务器,可能会有信息一致性的问题无法保证,还有将应用程序拆分成多个部分,本身难度大,还不便于扩展)

10.SOA服务分布式(微服务版)

分布式架构将原本的垂直拆分应用服务器进一步拆分成更小的微服务节点。垂直拆分应用服务器通常是将应用按照功能或业务逻辑进行划分,将不同的功能模块部署到不同的服务器上。而分布式架构在此基础上,将这些功能模块进一步拆分为独立的微服务节点,每个微服务负责处理特定的业务功能。

image-20230907153442741

注意:分布式架构是一种很大的模型,有很多种实现形式,微服务只是其中一种个人理解

参考:

【分布式】应用从单机到分布式的演进过程 - 知乎 (zhihu.com)

从单体到分布式,必须解决的四个问题_Jav进阶道路的博客-CSDN博客

posted on 2023-09-07 15:59  托马斯源  阅读(22)  评论(0编辑  收藏  举报