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

news2024/9/20 22:31:00

目录

一、常见概念

1.1基本概念

二、架构演进

2.1单机架构

2.2应用数据分离架构

2.3应用服务集群架构

2.4读写分离 / 主从分离架构

2.5引入缓存 —— 冷热分离架构

2.6垂直分库

2.7业务拆分 —— 微服务 


一、常见概念

1.1基本概念

应用(Application)/ 系统(System):

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

模块(Module)/ 组件(Component):

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

分布式(Distributed):

系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。

集群(Cluster):

被部署于多台服务器上的、为了实现特定目标的一个/组特定的组件,整个整体被称为集群。比如
多个 MySQL 工作在不同服务器上,共同提供数据库服务目标,可以被称为一组数据库集群。

主(Master)/ 从(Slave):

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

中间件(Middleware):

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

可用性(Availability):

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

响应时长(Response Time RT):

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

吞吐(Throughput)vs 并发(Concurrent):

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


二、架构演进

2.1单机架构

初期,我们需要利用我们精干的技术团队,快速将业务系统投入市场进行检验,并且可以迅速响
应变化要求。但好在前期用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单,无需专业的运维团队,所以选择单机架构是合适的。

2.2应用数据分离架构

随着系统的上线,我们不出意外地获得了成功。市场上出现了一批忠实于我们的用户,使得系统
的访问量逐步上升,逐渐逼近了硬件资源的极限,同时团队也在此期间积累了对业务流程的一批经
验。面对当前的性能压力,我们需要未雨绸缪去进行系统重构、架构挑战,以提升系统的承载能力。但由于预算仍然很紧张,我们选择了将应用和数据分离的做法,可以最小代价的提升系统的承载能力。 

和之前架构的主要区别在于将数据库服务独立部署在同一个数据中心的其他服务器上,应用服务通过网络访问数据。 

2.3应用服务集群架构

负载均衡:为了解决用户流量向哪台应用服务器分发的问题,需要一个专门的系统组件做流
量分发。实际中负载均衡不仅仅指的是工作在应用层的,甚至可能是其他的网络层之中。同时流量调度算法也有很多种。

2.4读写分离 / 主从分离架构

保留一个主要的数据库作为写入数据库,其他的数据库作为从属数据库。从库的所有数据全部来自主库的数据,经过同步后,从库可以维护着与主库一致的数据。然后为了分担数据库的压力,我们可以将写数据请求全部交给主库处理,但读请求分散到各个从库中。由于大部分的系统中,读写请求都是不成比例的,例如 100 次读 1 次写,所以只要将读请求由各个从库分担之后,数据库的压力就没有那么大了。当然这个过程不是无代价的,主库到从库的数据同步其实是由时间成本的 

2.5引入缓存 —— 冷热分离架构

随着访问量继续增加,发现业务中一些数据的读取频率远大于其他数据的读取频率。我们把这部
分数据称为热点数据,与之相对应的是冷数据。针对热数据,为了提升其读取的响应时间,可以增加本地缓存,并在外部增加分布式缓存,缓存热门商品信息或热门商品的 html 页面等。通过缓存能把绝大多数请求在读写数据库前拦截掉,大大降低数据库压力。其中涉及的技术包括:使用memcached作为本地缓存,使用 Redis 作为分布式缓存,还会涉及缓存一致性、缓存穿透/击穿、缓存雪崩、热点数据集中失效等问题。 

2.6垂直分库

随着业务的数据量增大,大量的数据存储在同一个库中已经显得有些力不从心了,所以可以按照
业务,将数据分别存储。比如针对评论数据,可按照商品ID进行hash,路由到对应的表中存储;针对支付记录,可按照小时创建表,每个小时表继续拆分为小表,使用用户ID或记录编号来路由数据。只要实时操作的表数据量足够小,请求能够足够均匀的分发到多台服务器上的小表,那数据库就能通过水平扩展的方式来提高性能。 

2.7业务拆分 —— 微服务 

随着人员增加,业务发展,我们将业务分给不同的开发团队去维护,每个团队独立实现自己的微
服务,然后互相之间对数据的直接访问进行隔离,可以利用 Gateway、消息总线等技术,实现相互之间的调用关联。甚至可以把一些类似用户管理、安全管理、数据采集等业务提成公共服务。

  • 至此,一个还算合理的高可用、高并发系统的基本雏形已显。注意,以上所说的架构演变顺序只是针对某个侧面进行单独的改进,在实际场景中,可能同一时间会有几个问题需要解决,或者可能先达到瓶颈的是另外的方面,这时候就应该按照实际问题实际解决。如在政府类的并发量可能不大,但业务可能很丰富的场景,高并发就不是重点解决的问题,此时优先需要的可能会是丰富需求的解决方案。
  • 对于单次实施并且性能指标明确的系统,架构设计到能够支持系统的性能指标要求就足够了,但要留有扩展架构的接口以便不备之需。对于不断发展的系统,如电商平台,应设计到能满足下一阶段用户量和性能指标要求的程度,并根据业务的增长不断的迭代升级架构,以支持更高的并发和更丰富的业务。
  • 所谓的“大数据”其实是海量数据采集清洗转换、数据存储、数据分析、数据服务等场景解决方案的一个统称,在每一个场景都包含了多种可选的技术,如数据采集有Flume、Sqoop、Kettle等,数据存储有分布式文件系统HDFS、FastDFS,NoSQL数据库HBase、MongoDB等,数据分析有Spark技术栈、机器学习算法等。总的来说大数据架构就是根据业务的需求,整合各种大数据组件组合而成的架构,一般会提供分布式存储、分布式计算、多维分析、数据仓库、机器学习算法等能力。而服务端架构更多指的是应用组织层面的架构,底层能力往往是由大数据架构来提供。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/835377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

powerdesigner各种字体设置;preview字体设置;sql字体设置

1.设置左侧菜单: 步骤如下: tools —> general options —> fonts —> defalut UI font ,选择字体样式及大小即可,同下图。 2.设置preview字体大小(sql预览) 步骤如下: tools —> general o…

问道管理:两市股指冲高回落,沪指一度突破3300点,券商、保险板块领涨

8月4日,两市股指高开高走,沪指一度突破3300点。开盘后,沪指、深成指涨近1%,创业板指、上证50指数涨幅超1%。职业方面,券商、稳妥板块领涨,传媒、石油、半导体、银行、煤炭等板块均上扬,互联金融…

Oracle锁的学习

Oracle数据库中的锁机制 数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 在数据库中有两种基本的锁类…

拓展商业视野:利用企业变更记录 API 剖析企业策略与决策

引言 随着商业竞争日益激烈,企业的战略与决策成为成功与否的关键因素。在这样的背景下,利用变更记录查询API成为了企业洞察竞争对手、揭示市场动态、发现商业机会的重要工具。本文将深入探讨变更记录查询API的应用,揭示它如何拓展商业视野&a…

【项目 进程14】2.30 守护进程(1) 2.31 守护进程(2)

文章目录 2.30 守护进程(1)终端进程组会话进程组、会话、控制终端之间的关系进程组、会话操作函数守护进程2.31 守护进程(2)守护进程的创建步骤写一个守护进程,每隔2s获取一下系统时间,将这个时间写入到磁盘…

【枚举+trie+dfs】CF514 C

Problem - 514C - Codeforces 题意: 思路: 其实是trie上dfs的板题 先把字符串插入到字典树中 对于每次询问,都去字典树上dfs 注意到字符集只有3,因此如果发现有不同的字符,去枚举新的字符 Code: #in…

会用这个医疗小技巧,升职加薪不加班!

在医药领域,温湿度监控是确保药品质量和安全性的重要环节。药品的生产、存储、运输和展示过程中,温湿度变化可能对药品的有效性产生不良影响,因此需要实时监测和管理环境条件。 通过有效的温湿度监控系统,医药企业和医疗机构能够确…

docker系列--解决hyper-v导致docker无法启动问题

一、问题 windows docker desktop 启动报错异常,导致docker无法启动成功 我们看到问题出在hyper-v的问题上,搜索解决方法,官网常见问题如下 Overview | Docker Documentation 二、解决 Hyper-V 已安装并正常工作 在BIOS中启用虚拟化 Wind…

mapstruct 错误 java.lang.NoSuchMethodError: Ljava/lang/Double 错误

问题描述 在使用 mapstruct 的过程中遇到错误 java.lang.NoSuchMethodError: Ljava/lang/Double 错误 问题解决 maven clean, 然后 maven install Build -> Rebuild Project 执行 maven install 时, 如果报错 找不到 xxx 类, 但 ctrl鼠标左键 发现可以点进去这个类, 那…

[openCV]基于赛道追踪的智能车巡线方案V1

import cv2 as cv import os import numpy as npimport time# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir:文件夹根目录输入 ext: 扩展名返回: 文件路径列表""&quo…

【Axure 教程】动态面板

【动态面板】是 Axure 中另外一个神级的元件,它的江湖地位可以说跟【中继器】不相上下,【动态面板】提供了简单的配置,却可以实现非常丰富的效果,在实际设计中应用非常广泛。 对于刚入门的产品经理来说,学习【动态面板…

02 持久层 - 客制化

文章目录 OverView[0] Provision[1] New Package[2] Create Table[3] Insert MockData[4] Check Data OverView 创建 ABAP Package客制化底表向底表写入测试数据查看测试数据 [0] Provision 没有创建 BTP Trail User Account 的需先申请账号,并通过 Eclipse 连接到…

「2024」预备研究生mem- 等差数列与列项相消Sn的最值奇数项与偶数项

一、等差数列与列项相消 二、Sn的最值 三、奇数项与偶数项 方法二:

一文学透设计模式——工厂模式

工厂模式 概念 牛马人生公司最近开启了线上直播,直播中牛马人生公司宣称他们建造了一家世界上最为先进的工厂,任何人只要去到工厂面前,告诉工厂你要什么牌子的汽车,工厂就会给你一辆什么牌子的汽车。 这引起了粉丝朋友的注意&a…

App Cleaner Uninstaller for Mac 苹果电脑软件卸载工具

App Cleaner & Uninstaller 是一款非常有用的 Mac 应用程序清理和卸载工具。它可以彻底地清理系统中的应用程序、扩展和残留文件,以释放磁盘空间并优化系统性能。 此外,它还提供了磁盘空间监控和智能清理建议等功能,使用户可以轻松地管理…

Java自定义校验注解实现List、set集合字段唯一性校验

文章目录 一: 使用场景二: 定义FieldUniqueValid注解2.1 FieldUniqueValid2.2 注解说明2.3 Constraint 注解介绍2.4 FieldUniqueValid注解使用 三:自定义FieldUniqueValidator校验类3.1 实现ConstraintValidator3.2 重写initialize方法3.3 重…

解决mvn clean install遇到testng单元测试失败时打包也失败的问题

解决mvn clean install遇到testng单元测试失败时打包也失败的问题 看这个之前请先看这个 Jenkins执行Testng 比如我现在就有一个单元测试失败的项目 执行mvn clean install的时候就会报错 下面是我现在的pom.xml 但我们不希望这样&#xff0c;怎么办 <plugin><gr…

【Vs Code】如何配置保存cpolar所建立的隧道参数?

文章目录 &#x1f4cb; 前言1.如何配置保存cpolar所建立的隧道参数&#xff1f;2.本地安装 VS Code并修改隧道参数2.1 Visual studio Code 下载2.2 配置Visual studio Code 相关参数2.3 编辑 cpolar.yml 隧道参数文件2.3 修改website隧道参数 3. 检查 cpolar.yml 文件配置是否…

2023年 Java 面试八股文(20w字)

目录 第一章-Java基础篇 1、你是怎样理解OOP面向对象 难度系数&#xff1a;⭐ 2、重载与重写区别 难度系数&#xff1a;⭐ 3、接口与抽象类的区别 难度系数&#xff1a;⭐ 4、深拷贝与浅拷贝的理解 难度系数&#xff1a;⭐ 5、sleep和wait区别 难度系数&a…

苹果提交审核出现“您的 App 包含 NSUserTrackingUsageDescription...”解决办法

您的 App 包含 NSUserTrackingUsageDescription&#xff0c;这表示您将会请求追踪用户。要在 App 产品页上更新此信息&#xff0c;您必须注明哪些数据类型会追踪用户。如果此描述有误&#xff0c;请更新您的 App 二进制文件&#xff0c;并将新的构建版本上传到 App Store Conne…