一文讲懂高并发分布式系统,听不懂你来打我

news2025/1/10 23:31:58

众所周知,在分布式系统的设计与建立中,其中一个要考虑的问题就是高并发。

那么,到底什么是高并发呢?

简单来说高并发就是指通过设计系统,使之实现可以同时处理多个请求的能力。

现在的高并发系统主要存在有两种实现方式,一种是垂直扩展,一种是水平扩展;平常我们使用较多的通常是水平扩展,但这是到底是为什么呢?

主要是由于垂直扩展就是提升单体计算机的性能,从而达到提升系统的效率和灵活性。

然而,单体计算机的上限是十分有限的,除非再来一个乔布斯型天才选手并创新了硬件层面的技术,否则单体计算机的提升成本真的是远远高于提升系统效率,优化算法灵活度的提升成本。

而且就效果来说,提升整体算法的收益是要远远大于单体计算机的提升的,不仅仅是因为系统更具有抗击风险的能力,更重要的是我们可以避免依赖于单个计算机的计算能力,这样在实际应用的过程中,如果有某个计算机下线无法实现该计算机应该实现的功能时,如果系统构建得当,系统应该会委任其他的计算机代偿实现该台计算机遗留的问题。

而在这时,如果我们保持对于单体计算机计算能力的依赖,那么面对类似的风险时抗击风险和解决问题的能力就会相应地得到不重视。

那么我们最终决定在水平扩展层面继续前进~

其实在水平扩展层面是有很多选择的,比如反向代理层,站点层,服务层或者数据库层。

那么具体应该如何选择呢?

首先是反向代理层,可以通过DNS轮询来实现。

DNS轮询主要是用于实现多个web服务器之间的负载平衡,每个用户的请求被轮番发给不同的服务器,并且一遍过后又会回到最开始的第一个IP。但是这不是最好的负载均衡方式,因为它只能实现分配的工作,而且会使客户端的缓存难以管理。、

其次是站点层的水平扩展,在这个层面的扩展还是非常有前景的,主要有Nginx,这是一款免费的linux网页服务器,可以用于反向代理和缓存。唯一的问题在于他是一个static的软件,不是dynamic的,这导致了每次处理dynamic的事件时,他都需要把事件传输给PHP然后等待处理的结果,之后在传输给客户,所以效率上存在一点问题。这一步也可以用Apache代替,但是作为一个免费的开源软件来说,Nginx的适用面还是更加广阔的。

再然后是服务层,一般通过服务连接池来扩展。一个程序在连接DB数据库的时候经常需要占用很长时间进行网络上的认证和确认,这占用了很多资源和时间成本,而为了加快效率出里和简化这些流程,优化服务器性能,使用服务连接池就是一个很好的方式。

简单来说就是在遇到新的认证时候先查看数据连接池里是否有已经建立好的数据,如果有就可以节约时间和服务区直接使用,没有就建立一个新的连接放进去;放满了就检查一下已经用的是否已经用过了,用过了就删掉没有用过就留下。

市面上现在常用的连接池有c3p0,dbcp与druid。

最后是数据库层的水平扩展,一般通过数据Hash的方式,时间原因就不再这里展开叙述了。

总结下来,一个共分为四个部分,而市面上的高并发系统大部分都在站点层进行扩展,那么你觉得还有什么地方可以创新一下呢?

欢迎点赞留言,我们来一起探讨~ 

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

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

相关文章

Utilizing Transformer Representations Efficiently

ContentsIntroductionDifferent Pooling StrategiesPooler OutputLast Hidden State OutputHidden States OutputMore...ReferencesIntroduction 在用预训练模型微调时,我们比较习惯于直接用 Transformer 最后一层的输出经过 FC / Bi-LSTM… 后输出最终结果。但实际…

Perforce P4V 资源汇总

Perforce P4V 入门https://download.csdn.net/download/love_xiaozhao/20533522 P4 Command Referencehttps://download.csdn.net/download/love_xiaozhao/20534062 P4V文件状态命令速查表https://download.csdn.net/download/love_xiaozhao/20533404PerforcexHelix分支策略_…

【android Framework 探究】android 13 aosp编译全记录

写在开始 自从关注Framework这一块儿,就有了自己编译aosp刷机的想法,模拟器当然是可以的,但是体验感还不能和真机想比,于是买一个二手piexl的想法就有了,根据预算选定piexl 5,支持最新的android 13&#xf…

编码命名方式知多少

文章目录1.camel case (驼峰式)2.snake case (蛇形式)3.kebab case (烤串式)4.匈牙利命名法5.小结参考文献编码时,命名无处不在。比如我们需要对文件命令,对目录命名,对变…

m低信噪比下GPS信号的捕获算法研究,使用matlab算法进行仿真

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 GPS系统的星座部分是由21颗工作卫星和3颗在轨备用卫星组成,其高度为20183km,这24颗卫星均匀分布在6个等间隔的、相对轨道面倾角为55的近圆轨道上。 ​ GPS卫星的…

处理csv、bmp等常用数据分析操作--python

请先看思维导图,看是否包含你所需要的东西,如果没有,就可以划走了,免得浪费时间,谢谢 条条大路通罗马,我只是介绍了我掌握的这一条,不喜勿喷,谢谢。 目录 一、创建文件夹&#xff0…

一行日志,让整个文件导出服务导出内容都为空..

输出一行日志&#xff0c;却让整个文件上传服务挂了...问题分析小结问题 直接上代码&#xff0c;看看有无眼尖的小伙伴发现问题&#xff1a; // 设置参数 MultiValueMap<String, Object> param new LinkedMultiValueMap<>(); FileSystemResource resource new …

log4cpp初入门

目录下载与安装log4cpp框架CategoryAppenderLayoutPriortyOutput功能日志级别⽇志格式化⽇志输出日志回滚日志配置文件下载与安装 https://sourceforge.net/projects/log4cpp/ tar xvf log4cpp-1.1.3.tar.gz cd log4cpp ./configure make make check make install ldconfig…

轻松玩转树莓派Pico之三、Windows+Ubuntu虚拟机模式下VSCode C语言开发环境搭建

目录 1、VSCode下载与安装 2、VSCode基础插件安装 3、SSH连接与配置 4、SSH免密登录 5、Pico编译 工欲善其事&#xff0c;必先利其器。之前的介绍的Pico流程都是通过命令行编译&#xff0c;没有进行更深入的介绍&#xff0c;本文将介绍Pico的VSCode-C语言开发环境搭建与配…

Rust WASM 与 JS 计算素数性能对比

前言 刚接触Rust wasm&#xff0c;请各看官高抬贵手。 简介 根据网上资料&#xff0c;使用 wasm-pack 搭配wasm-bindgen将Rust代码编译成 wasm。 搭好环境后&#xff0c;想对比一下rust-wasm与js的性能差距。 环境 OS: Deepin 20.7.1 apricotKernel: Linux 5.15.34CPU: Int…

LeetCode单周赛第320场 AcWing周赛第78场总结

1. LeetCode单周赛第320场 1.1 数组中不等三元组的数目 1.1.1 原题链接&#xff1a;力扣https://leetcode.cn/problems/number-of-unequal-triplets-in-array/ 1.1.2 解题思路&#xff1a; 暴力遍历咯。 1.1.3 代码&#xff1a; class Solution { public:int unequalTripl…

JAVA的学习心路历程之JDK基础入门(上)

任务需要&#xff0c;需要我学java调用linux下的动态库&#xff0c;于是搜寻java知识更新这篇。 从我上大学起我就听别人说JAVA&#xff0c;不不&#xff0c;应该是初中&#xff0c;那时候流行带键盘的智能手机&#xff0c;里面有好些个游戏都是JAVA写的&#xff0c;可见JAVA有…

【JavaWeb】HTML

HTML1 HTML概念1.1 超文本1.2 标记语言2 HTML的入门程序3 HTML语法规则4 使用idea创建StaticWeb工程5 HTML的各个标签的使用5.1标题标签5.2段落标签5.3换行标签5.4无序列表标签5.5超链接标签5.6图像标签5.7块标签6.使用表格标签展示数据6.1未合并单元格6.2合并单元格-合并列6.3…

套接字+网络套接字函数+客户端大小写程序

NAT映射 一般来说&#xff1a;源主机和目的主机都属于局域网&#xff0c;也就是ip地址可能相同 但是&#xff1a;路由器一般是公网ip,即整个网络环境可见 每一个路由器会维护一个NAT映射表 路由器的ip一般是固定的公网ip路由器与把与它相连的主机&#xff1a;私有ip端口号映射…

Java-多线程-ThreadPoolExecutor

前言 前面我们讲解线程的时候&#xff0c;讲到了使用Executors创建线程池&#xff0c;但是它里面所有方法可变的参数太少&#xff0c;不能很好的进行自定义设置&#xff0c;以及以后的扩展&#xff0c;更合理的使用cpu线程的操作&#xff0c;所以使用ThreadPoolExecutor创建线程…

SpringBoot集成webservice

前言 之前在工作中&#xff0c;有时候需要去对接第三方的医院&#xff0c;而很多医院的his系统用的都是老技术&#xff08;WebService&#xff09;。一直在对接webservice接口&#xff0c;却不知道webservice接口是怎么实现的&#xff0c;这一次&#xff0c;我们来一探究竟。 …

Android Compose Bloom 项目实战 (一) : 项目说明与配置

1. 项目介绍 Bloom是谷歌 AndroidDevChallenge (Android 开发挑战赛) 中的一期活动&#xff0c;目的是为了推广Compose&#xff0c;非常适合用来练手&#xff0c;通过这个项目&#xff0c;我们可以很好的入门Compose。本文介绍了如何从零开始&#xff0c;开发这个Compose项目。…

计算机系统结构期末复习

名词解释 程序访问局部性 时间局部性是指最近被访问过的数据很可能再次被访问 空间局部性是指最近被访问过的存储空间的附近空间可能会被访问 计算机体系结构 计算机体系结构是程序员所看到的计算机属性&#xff0c;即概念性结构与功能特性 窗口重叠技术 为了能更简单、更直接…

UE5笔记【五】操作细节——光源、光线参数配置、光照图修复

设置光线重载质量模式为预览&#xff1a;可以加快重构速度。 为了更快速高效的学习&#xff0c;直接查看别人已经建好的素材实例。 在EpicGames启动器中打开示例&#xff0c;找到这个照片级渲染。查看别人建好的效果图。 创建工程以UE5版本打开。进入查看。 观察Baked和碰撞测…

MySQL常用函数大全(面试篇)

本篇文章讲解是是MySQL的函数方法&#xff0c;涵盖所有的MySQL常见的方法。主要介绍了面试常问函数。 一、数字函数二、字符串函数三、日期函数四、MySQL高级函数 &#xff08;一&#xff09;数字函数 1、ABS(x) 返回x的绝对值 2、AVG(expression) 返回一个表达式的平均值&am…