如何设计一个高性能的分布式系统?

news2024/9/22 9:38:59

本文讨论的主题是高性能,主要思路是围绕快展开,这么设计为什么会快?

文章目录

    • 架构设计:微服务架构
    • 负载均衡
    • 数据一致性方案选择
    • 容错处理:双机互备
    • 消息队列
    • 缓存
    • 总结

架构设计:微服务架构

第一个设计是应用架构的设计,下图是单体架构与微服务架构的一个对比图。接下来的设计思路大家可以对比这个图来看
image.png

  1. **针对性的资源分配:**假设有10台服务器,单体架构下资源是共享的,每台服务器的资源是订单,会员,积分等模块共享的。我们知道订单模块是电商中的核心应用,完全可以把更多的资源倾斜给订单域,比如订单6机器,会员2机器,积分域2机器。获得的资源更多了,性能自然就会高。
  2. 模块化与独立性:这里我们用线程池来举例,只是举例哈,主要为了好理解。大家都知道线程池的线程数可能跟应用是CPU密集型还是IO密集型有关,假设订单是IO密集型,积分是CPU密集型,那么单体应用的话要么IO密集,要么CPU密集,但是微服务相对独立,可以但对针对订单优化成IO密集型应用,积分优化成CPU密集型。这里主要想表达的是,独立后可以针对性的优化,以达到每个模块最好的性能。

负载均衡

负载均衡的主要作用就是分发请求,那么均匀分发请求就很重要了。如下图,假设用户发起300请求,理想情况是3台机器,每台机器处理100请求。但是如果出现下面的情况请求是290,5,5分布的话就不能完全使用所有机器的全部性能。
因此负载均衡通过合理的分发请求,以达到资源的最大利用,从而可以提高性能。
image.png

数据一致性方案选择

这里很多人理解上有偏差,有人可能觉得数据一致性与高性能没有关系,实际这里是给系统中的一致性场景设计一种方案。设计方案的不同会导致系统应能的不同。简单说下强一致性跟最终一致性,只要能理解是如何影响性能的即可。
强一致性的实现方案比如分布式事务,需要任何时候数据都保证一致。ACID属性的保证通常需要更复杂的事务管理机制,这可能会增加延迟并影响性能。
最终一致性的方案允许短时间数据不一致,最终一致可以通过本地消息表等方案来实现,这可以更快响应请求,从而提高性能。

容错处理:双机互备

双机房是主流的容错方案。那么容错跟性能有什么关系呢?这里其实是间接影响了性能,当服务出现了问题,如果立即切换到另一个机房,缩短了服务不可用的时间,是否可以等同于提高了性能。
image.png

消息队列

在系统中引入消息队列,可以大大提高系统的性能,主要体现在以下几个方面

  • 解耦系统中的不同组件,使得它们可以独立运行。
  • 提供异步处理能力,从而提高系统的响应时间和吞吐量。
  • 支持流量削峰,在高峰期吸收大量请求,平滑处理负载。

缓存

缓存是基于内存的,解决是数据库的IO耗时,常见的缓存有redis,也有本地缓存等。由于少了数据库IO的这部分消耗,所以使用缓存可以提高系统的性能。更详细的如下:

  • 缓存减轻后端数据库的压力,提高数据读取速度。
  • 通过存储频繁访问的数据副本来减少延迟。
  • 常见的缓存技术包括Redis、Memcached等。

总结

以上对高性能的设计主要是架构设计与组件相关的选择。提高性能的方式可能还有很多,比如并发编程,增加索引等,但这些更偏向于对具体代码的设计。

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

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

相关文章

“再来一单“业务功能开发

文章目录 概要整体架构流程技术细节小结 概要 再来一单”功能常见于餐饮、零售、外卖等行业,主要目的是为了简化用户的重复购买流程,提高用户体验和效率。 需求分析以及接口设计 再来一单就是将原订单中的商品重新加入到购物车中,所以本质上是"增…

人工智能助力芯片半导体发展,开拓芯片设计技术新趋势

微型硅片上可以容纳多少个晶体管?这些晶体管是构成世界各地技术的集成电路(IC)的基础。1971年,第一款微处理器集成有2,300个晶体管,而如今的硅片上却超过了1000亿个晶体管。在摩尔定律失效之前,每两年晶体管…

10、billu-b0x2

难度 中 目标 root权限 首先确定靶机ip地址 netdiscover -i eth0 -r 192.168.189.0/24 kali 192.168.189.58 靶机 192.168.189.184 信息收集端口扫描 看到一个80和8080,先重点摸一下网站的内容 然后看到信息里有个robots.txt 首先就去访问一下 看到有许多不允许…

高频JMeter软件测试面试题

近期,有很多粉丝在催更关于Jmeter的面试题,索性抽空整理了一波,以下是一些高频JMeter面试题,拿走不谢~ 一、JMeter的工作原理 JMeter就像一群将请求发送到目标服务器的用户一样,它收集来自目标服务器的响应以及其他统计…

传统产品经理VS现在AI产品经理,你要学习的太多了,超详细收藏我这一篇就够了

传统产品经理想要转行成为AI产品经理,需要经历一系列的学习和实践过程。下面是一份详细的学习路线图,旨在帮助你顺利转型。 学习路线图 了解AI基础知识 AI概览:阅读《人工智能:一种现代的方法》这样的书籍,以获得对AI…

初谈Linux多线程--线程控制

文章目录 线程的概述理解线程Linux中的线程重新理解的进程Windows的线程线程的优点线程的缺点理解线程调度成本低 进程VS线程 线程控制创建线程等待线程线程函数传参线程的返回值新线程的返回值新线程返回值错误返回值为类对象 创建多线程线程的终止线程的分离pthread_detach 线…

AIExpo2024奖项申报正式启动,三大奖项为你闪耀

由新一代人工智能产业技术创新战略联盟、苏州市人工智能协同创新中心联合主办,苏州启智创新科技有限公司、苏州工业园区科技发展有限公司共同承办的第六届全球人工智能产品应用博览会(以下简称“智博会”)将于2024年9月11-12日在苏州国际博览…

二叉搜索树,Map,Set,LeetCode刷题

二叉搜索树&#xff0c;Map&#xff0c;Set 1. 二叉搜索树2. 二叉搜索树的模拟实现1.1 插入操作1.2 查找操作1.3 删除操作 3. 二叉搜索树时间复杂度分析4. TreeMap和TreeSet5. Map5.1 Map的常用方法5.2 Map.Entry<K,V> 6. Set6.1 Set的常用方法 LeetCode刷题1. 二叉搜索树…

Total Eclipse 挑战赛:在以太坊首个 SVM L2 上开发应用

摘要&#xff1a;Eclipse 基金会宣布了其首届黑客马拉松计划&#xff0c;即"The Total Eclipse Challenge"&#xff0c;作为一场独一无二的黑客松活动 &#xff0c;邀请了优秀的开发者们在链上开发创新的应用。 "The Total Eclipse 挑战赛" 是一项为期两周…

如何更好地做出判断?

笛卡尔有句名言&#xff1a;无法下判断的人&#xff0c;不是欲望太奢侈&#xff0c;就是觉悟还不够。 这里说的判断&#xff0c;其实也就是选择。我们人生面临着各种维度的选择&#xff0c;大到人生方向&#xff0c;小到一顿饭吃什么&#xff0c;可以说&#xff0c;选择伴随着我…

全志T113i移植LAN8720指南

1、根据硬件修改设备树 gmac0_pins_a: gmac0 {allwinner,pins "PG0", "PG1", "PG2", "PG3", "PG4","PG5", "PG11", "PG12", "PG13", "PG14", "PG15";allwin…

vue3+TS+nest+mysql实现网站访问统计系统

网站采用了vue3tsnestmysql的技术选型&#xff0c;目前初步实现第一版开发 访问地址&#xff1a;点我进入网站 网站访问统计 主要通过插入script来调用上传接口来实现数据统计,目前仅存储了用户的ip和访问时间&#xff0c;后期也可根据ip来获取用户的城市信息 async pageUplo…

探索TinyDB的轻量级魅力:Python中的微型数据库

文章目录 探索TinyDB的轻量级魅力&#xff1a;Python中的微型数据库背景&#xff1a;为何选择TinyDB&#xff1f;什么是TinyDB&#xff1f;如何安装TinyDB&#xff1f;5个简单的库函数使用方法3个场景下的应用实例常见问题与解决方案总结 探索TinyDB的轻量级魅力&#xff1a;Py…

社区志愿服务管理平台小程序/社区志愿者管理系统

获取源码联系方式请查看文章结尾&#x1f345; 摘 要 随着当今网络的发展&#xff0c;时代的进步&#xff0c;各行各业也在发生着变化&#xff0c;于是小程序也逐步进入人们的生活&#xff0c;给我们生活或者工作提供了新的方向新的可能。 本毕业设计的内容是设计实现一个基…

芯片解密技术可以应用在哪些领域?

芯片解密技术可以在以下一些领域得到应用&#xff1a; 电子产品维修&#xff1a;对于一些老旧或难以获取原厂技术支持的设备&#xff0c;通过解密芯片获取程序代码可以更有效地进行故障诊断和维修。技术研究和学习&#xff1a;帮助科研机构和技术人员深入了解先进芯片的设计和工…

python绘图 | 横坐标是日期,纵坐标是数值

需求 profit_value [0.084, 0.225, 0.234, 0.264, 0.328] time_stamp [20221111, 20230511, 20230704, 20231212, 20240315] 横坐标是日期&#xff0c;纵坐标是数值&#xff0c;我想绘图的时候&#xff0c;横坐标是按日期格式来 代码 from matplotlib import pyplot as pl…

黄水与酿好酒有啥关系?

执笔 | 敏 敏 编辑 | 古利特 上个世纪&#xff0c;白酒泰斗周恒刚先生曾到四川考察&#xff0c;不禁感慨四川生产浓香型白酒占尽天时、地利、人和&#xff0c;其中“黄水”尤为特别。 “黄水”与酿好酒有何关系&#xff1f;,长江酒道,4分钟 近期&#xff0c;五粮液科研团队联…

word预览方式---插件,vue-office-docx、docx-preview、mammoth.js

提示&#xff1a;word预览方式—插件 文章目录 [TOC](文章目录) 前言一、vue-office-docx二、docx-preview三、mammoth.js总结 前言 word预览 一、vue-office-docx npm install vue-office-docx -S-DofficeDocx.vue <template><div class"preview_box">…

前端面试题整理-HTML

1. 从用户输入 url 到页面展示发生了什么&#xff1f; &#xff08;1&#xff09;首先进行url合法性校验&#xff1a;包括协议域名端口号 &#xff08;2&#xff09;进行强缓存判断&#xff0c;判断本地缓存是否已经存在需要的资源文件&#xff0c;存在直接使用本地缓存即可 &…

无捆绑软件!Windows7纯净版镜像等你来下载!

在电脑操作中&#xff0c;很多用户都喜欢纯净版操作系统&#xff0c;但不知道在哪里可以下载到没有捆绑软件的Windows7纯净版系统&#xff1f;接下来系统之家小编给大家带来最新的Windows7纯净版镜像&#xff0c;这些镜像文件经过优化&#xff0c;不包含捆绑软件&#xff0c;安…