服务端高并发分布式结构演进之路

(一).前言

在介绍Redis之前,还是先来介绍一下服务端⾼并发分布式结构演进之路。首先了解一下基础的概念

(二).基础概念

1.应用/系统

为完成一整套服务的一个程序或者一组相互配合的程序群。

2.模板/组件

当应用比较复杂时,为了分离职责,将其中具有清晰职责的,内聚性强的部分,抽象出概念,便于理解。

3.分布式

系统中的多个模块被部署于不同服务器上,既可以将系统称为分布式系统。例如,Web服务i去于数据库分别工作在不同的服务器上,或者多台Web服务器被分别部署在不同的服务器上。

4.集群

被部署于多台服务器上的,为了实现特定功能的一个/组特定的组件,整个整体被称为集群。

分布式vs集群

分布式强调的是物理形态,即工作在不同服务器上,并且通过通信配合完成任务;

集群更在意逻辑形态,即是否为了完成特定的服务目标。

5.主/从

汲取那种,通常有一个程序需要承担更多的职责,被称为主;其他承担附属职责的被称为从。

例如,在MySQL集群中,只有一台服务器上数据库允许进行数据的写入(增,删,改),其他数据库的数据修改全部要从这台数据库同步而来,则把那台数据库称为"主库",其他数据库被称为从库

6.中间件

一类提供不同应用程序用于相互通信的软件,即处理不同技术,工具,数据库之间的桥梁。

(三).评价指标

1.可用性

可用性,指的是,考察单位时间内,系统可以正常提供服务的概率。例如,年化系统可用性=系统正常提供服务时长/一年总时长。

2.响应时长

指的是用户完成输入到系统给出用户反映的时长。

3.吞吐vs并发

吞吐考察单位时间段内,系统可以成功处理的请求的数量。并发指的是系统同一时刻支持的请求最高量。

(四).架构推进

1.单机架构

初期,由于用户访问量很少,没有对性能,安全等提出很高的要求,并且系统架构简单,所以选择的是单机架构。

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

但是,随着用户量和数据量慢慢的增多,一台主机就慢慢的难以应对,此时,一般有两种方式,第一种方式是"节流","节流"指的是在软件上进行优化,需要通过性能测试,找出是哪个环节出现了平静, 再去优化。

第二种方式就是"开源",直接增加更多的硬件资源,引入更多的主机,但是,一旦引入了多台主机,那么,系统的复杂度就越来越高了,出现bug的概率也就越来越高了。只要引入了多台主机,此时这个系统就可以被称为**"分布式系统"**。

2.应用服务和数据库服务分离

此时,在应用程序中,里面包含了很多的业务逻辑。数据库服务器,需要更大的硬盘空间,更快的数据访问速度。

3.应用服务集群架构

如果用户的访问量持续上升,此时就需要引入更多的应用服务器。

"负载均衡器"负责进行管理,把任务分配给每个应用服务器。

例如,现在有1w个用户请求,有两个应用服务器,此时按照负载均衡的方式,就可以让每个应用服务器承担5000的访问量,和"多线程类似"

负载均衡器对于请求量的承担能力,是远远超过应用服务器的。但是也会有负载均衡器扛不住的,此时就可以引入更多的负载均衡器

4.读写分离/主从分离架构

随着用户的访问量逐渐增多,无论扩展多少台服务器,这些请求最终都会从数据库读写数据,此时就意味着数据库的压力也就逐渐增多了,那么就需要引入更多的服务器,并且可以将一台服务器作为"主数据库服务器",其他服务器作为"从数据库服务器"。主数据库只负责增删改操作,从数据库只负责读数据,即读写分离,主从分离。

主服务器一般只有一个,从服务器可以有多个,同时"从数据库"通过负载均衡的方式,让应用服务器进行访问。

5.引入缓存---冷热分离架构

即使引入的数据库服务器再多,数据库始终有一个天然的问题,就是响应速度慢。

此时,可以把数据区分为"冷热",将"热点数据"放到缓存中,缓存的访问速度比数据库要快很多。

对于"缓存服务器"来说,它存放的只是一小部分热点数据(会频繁用到的数据)。

6.分库分表

引入分布式系统之后,除了要能够应对更高的请求量,同时也要应对更大的数据量。

如果数据量持续增长,导致,多台主机也存不下。此时,可以对数据库进行进一步的拆分,即"分库分表"

本来一个数据库服务器,这个数据库服务器上有很多数据库,那么现在就可以引入多个数据库服务器,每个数据库服务器存储一部分数据库。

如果一个表特别大,此时也可以针对表进行拆分,具体如何拆,需要根据具体的业务场景进行拆分

7.微服务架构

之前的应用服务器,一个服务器程序中作何很多的业务,这就可能导致一个服务器代码变得越来越复杂。为了更方便代码的维护,就可以把一个复杂的服务器,拆分成更多的,功能更单一,但是更小的服务器,即"微服务"

一旦引入了微服务,这就意味着,服务器的种类和数量就增加了。当服务器复杂了,那么就会需要更多的人来维护,一旦人多了,就需要配套的管理,把这些人组织好,划分组织结构,分成多个组。

但是,微服务也有缺点。一旦引入微服务,就意味着,系统的性能下降了,因为拆出来的更多的服务,多个功能之间要更依赖网络通信,此时,如果想要性能不下降太多,只能引入更多的硬件资源。

同时,引入微服务,系统的复杂程度提交了,可用性会受到影响,服务器更多了,那么问题的概率就更大了,此时就需要一系列手段,来保证系统的可用性

相关推荐
MC皮蛋侠客1 小时前
Redis 系列(三):底层实现(一)——对象系统、SDS 与 dict
数据库·redis·缓存
杜子不疼.1 小时前
不会SQL也能改数据库?我用NocoDB把MySQL变成了表格界面
数据库·sql·mysql
今天AI了吗1 小时前
AI辅助数据库工具链对比:从SQL优化到架构设计的主流方案评估
数据库·人工智能·sql
企查查数据服务2 小时前
从席位订阅到用量计费:Agent 正在重写企业软件商业模式
大数据·人工智能
渣渣盟2 小时前
当 Redis 集群发生主从切换(Failover)时,Flink 任务会崩溃吗?如何利用 Sentinel 实现高可用?
redis·flink·sentinel
蓝鸟19742 小时前
Oracle 19c JSON_OBJECT 完全实战指南|嵌套、多行多列数组合并、空值踩坑、医保报文落地
数据库·oracle·json_arrayagg·多行转json数组·sql实战踩坑·数据库json拼装·json_object
晴天162 小时前
Agent 全栈学习笔记 1-Day14
数据库·笔记·学习
瀚高PG实验室2 小时前
几种因网络波动导致应用与数据库操作异常的现象
运维·网络·数据库·postgresql·瀚高数据库
科莱特SAP2 小时前
精准匹配双向赋能:科莱特数智人才猎场重塑数字化人才服务模式
大数据·人工智能·物联网·人力资源·科莱特·科莱特人才服务