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

文章目录

现在说起服务端,经常听到的就是分布式、集群、微服务这类词汇,这些到底是什么呢?又是如何而来的呢?本篇博客记录相关学习

前景概念

在认识上述架构之前,需要有些前景知识

应用(Application) / 系统(System)

应用是为了完整一整套服务的一个程序,而系统是一组互相配合的程序群。

类比生活中的篮球队,中锋、后卫、自由人都是一个个应用,有各自的功能,而他们相互配合组成的队伍就是一个系统,有强大的功能

模块(Module) / 组件(Conponent)

当应用功能复杂时,可以从中分离职责,将其中具有清晰职责、内聚性强的部分抽离出来,单独为一部分

类比军队将人员分为突击小组、爆破小组、掩护小组、通信等

分布式(Distributed)

系统中的多个模块可以被部署在不同的服务器上,模块之前通过网络进行通信,这样的系统就被称为分布式系统

常见的有Web服务器和数据库分别工作在不同的服务器上,或者多个Web服务器部署在不同的服务器之上

集群(Cluster)

部署在多台服务器上的,为了实现特定目标的一个或多个组件,被称为集群

如多个MySQL工作在不同的服务器上,共同提供数据库服务

主(Master) / 从(Slave)

集群中,一般有一个程序需要承担更多的职责,称为主;其他承担附属职责的被称为从

比如MySQL集群中,外界只对一台主服务器上的MySQL进行操作(增/删/改),其他从服务器的MySQL只对主服务器作数据同步。当主服务器挂掉了,再找个从服务器顶上,变成主服务器

中间件(Middleware)

常常说"没有什么是加一层中间层解决不了的,如果有就再加一层 "

中间件就是互通不同技术、工具和数据库之间的桥梁,用于相互通信

架构演进

单机架构

单机架构即业务处理,数据存储都在一台服务器上,甚至单线程。此时用户访问量不大,没有对性能、安全提出很高的要求,而且系统架构简单,运维起来成本不大


相关软件

Web服务器:Tomcat、Netty、Nginx、Apache等

数据库:MySQL、Oracle、PostgreSQL、SQL Server等

应用数据分离架构

数据持久化往往是比较耗时的,因为磁盘IO速度较慢,当系统的访问量逐步上升后,在业务处理的时候,不希望因为数据持久而拖慢了系统的性能,此时就可以把数据库服务独立出去,成为存储服务器,将业务和存储分离

应用服务器通过网络访问存储服务器,虽然网络通信也比较慢,但比磁盘IO还是要快一些的,而且分离后,数据存储并不会影响应用服务器的业务处理

应用服务集群架构

当系统访问量再次上升后,可能单台应用服务器已经无法满足需求,此时有两种方案:

  • 垂直扩展 / 纵向扩展 Scale Up:购买性能更优、价格更高的服务器
  • 水平扩展 / 横向扩展 Scale Out:调整软件架构,增加应用服务器,将用户流量分摊到不同的应用服务器

集群就是水平扩展的产物,有了多台服务器,还需要对用户流量进行分流,常见的方法有:

  1. Round-Robin 轮询算法:公平地将请求依次分给不同的应用服务器。优点是不会出现有服务器没有分摊到流量的情况;缺点就是性能好的服务器没有完全发挥性能,因为是公平分配给差的和好的
  2. Weight-Round-Robin 轮询算法:为不同的服务器(比如性能不同) 赋予不同的权重(weight),解决方法1的缺点。但新的缺点是同一用户的多个请求可能分配到不同的服务器
  3. 一致哈希散列算法 :通过计算用户的特征值(如IP地址)得到哈希值,根据哈希值做分发,这样同个用户的请求就可以被分配给同一个服务器。这就是专项客户经理服务


相关软件

负载均衡软件:Nginx、HAProxy、LVS、F5等

读写分离 / 主从分离架构

应用服务器扩展后,用户流量已经可以抗住了,但是数据库读写数据性能还不足以支撑,到一定程度后,数据的压力称为系统承载能力的瓶颈点。

如果像应用服务器一样进行纵向扩展,那么数据就会被分散,一致性无法保证。这就用到上述的主从思想

保留一个主数据库作为写入数据库,其他从数据库同步主数据库数据。因为二八定律 :用户的操作20%是写,80%是读,写操作并不会那么频繁,所以可以将写数据请求全部交给主库处理 ,主库也一般是性能更强的服务器,读请求则分散到各个从库中,因为从库同步主库数据,所以也保证了一致性

应用服务器需要对读写请求做分离处理,可以利用一些数据库中间件,将请求分离的职责托管出去

相关软件

MyCat、TDDL、Amoeba、Cobar等类似数据库中间件等

冷热分离架构

引入缓存

随着访问量继续增大,发现业务中一些数据的读取频率远大于其他数据的读取频率。这部分数据被称为热点数据,与之相对的是冷数据。

为了提取读取的响应时间,可以将这些数据缓存,如此还减少了磁盘的读取开销


相关软件

Memcached、Redis等缓存软件

垂直分库

业务数据量再增大后,大量数据存储在同一个库中已经有些力不从心了,所以可以根据业务,对数据分别存储


相关软件

Greenplum、TiDB、Postgresql XC、HAWQ等,商用的如南大通用的GBase、华为的LibrA

微服务

随着业务发展,可以将业务分给不同的开发团队去维护,每个团队独立实现自己的微服务,然后互相之间对数据的直接访问进行隔离


以上就是本篇博客的所有内容,感谢你的阅读

如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。

相关推荐
20242817李臻5 分钟前
李臻20242817_安全文件传输系统项目报告_第9周
数据库·安全
小白考证进阶中8 分钟前
0基础可以考MySQL OCP么?备考时间需要多久?
数据库·mysql·开闭原则
观无14 分钟前
Redis远程链接应用案例
数据库·redis·缓存·c#
星星点点洲21 分钟前
【缓存与数据库结合方案】伪从技术 vs 直接同步/MQ方案的深度对比
数据库·缓存
努力奋斗的小杨25 分钟前
学习MySQL的第十二天
数据库·笔记·学习·mysql·navicat
慧一居士1 小时前
Zookeeper HA集群搭建
分布式·zookeeper
冼紫菜1 小时前
[特殊字符] 分布式定时任务调度实战:XXL-JOB工作原理与路由策略详解
分布式
枫叶20001 小时前
OceanBase数据库-学习笔记1-概论
数据库·笔记·学习·oceanbase
Ethon_王1 小时前
走进Qt--工程文件解析与构建系统
c++·qt
仲夏plus1 小时前
MySQL:慢SQL索引优化-使用explain/analyze进行耗时分析的方法
数据库