首页 > 其他分享 >系统设计-基础篇

系统设计-基础篇

时间:2023-12-19 18:33:56浏览次数:19  
标签:缓存 并发 基础 性能 系统 业务 响应 设计

如何提升系统性能?

高并发系统设计的三大目标:高性能、高可用、可扩展

高并发:高性能(响应时间)、高可用(down机、故障、维护)、可扩展(应急扩容)

响应时间(平均值、最大值、分位值),响应为1s,吞吐量为每秒1次,响应缩短到10ms,吞吐量上升到每秒100次,从用户体验来说:200ms分界点,1s为另一个分界点,健康系统的99分位值的响应时间控制在200ms以内,不超过1s的请求占比要超过99.99%

高并发下的性能优化手段:

1.提高系统的处理核心数(吞吐量=核心数(并发进程数)/响应时间(s)) 但并非无限增加核心数就可以增加吞吐量,随着进程数增加,并行的任务对于资源的争夺也增加,在某 个临界点,进程增加导致系统的性能下降,这就是性能测试中的拐点模型,所以在评估系统性能时,需要做压力测试,找到拐点

2.减少单次任务响应时间

cpu密集型:优化算法

io密集型:

1.采用工具,linux的工具集

2.通过监控,对任务的每一个步骤做分时统计,从而找到任务中哪一步小号消耗了更多的时间

 

tips:

1.业务价值->承载高并发->性能优化。一切的前提是业务价值需要。如果没有足够的价值,那么可读性才是第一,性能在需要的地方是no.1,但不需要的地方可能就是倒数第一稞。当下技术框架出来的软件差不到哪去,没有这种及时响应诉求的地方,削峰下慢慢跑就是了。(工作需要,常在缺少价值的地方着手性能优化,让我对这种就为个数字的操作很反感。要知道,异步,并发编程,逻辑缓存,算法真的会加剧系统的复杂度,得不偿失。如果没那个价值,简单才是王道)

2.提高并发度。要么加硬件,要么降低服务响应时间。做为开发,我们的目光更聚焦在降低响应时间这块。

1.采用非阻塞的rpc调用(高效的远端请求模式,采用容器的覆盖网络我认为也算)

2.将计算密集和io密集的的逻辑分割开,单独线程池,调整线程比例压榨单机性能(或者说找拐点)。

3.做缓存,io耗时的缓存和计算耗时的缓存(多级缓存,数据压缩降低带宽)。

4.采用享元模式,用好对象池和本地线程空间,尽量减少对象创建与销毁的开销,提高复用。

5.业务拆分,像状态变化后的外部系统通知,业务监控,es或solr等副本数据同步等操作,无需在主流程中做的事都拆掉。走canal监听表数据变化,推mq保最终一致的方式从业务项目完全解偶出来。

6.fork_join,分而治之的处理大任务。并发编程,采用多线程并行的方式处理业务。(规避伪共享,减小锁力度,采用合适的锁)。

7.数据库配置优化,查询优化。(存储优化比较头疼,毕竟不按业务拆单点跑不掉,单点性能就要命。基本只能内存库先行,后台同步数据做持久。然后内存库多副本,自修复,保留一系列自修复失败的修复手段)

系统怎样做到高可用?

1.开发设计层面

冗余---主备,负载均衡,failover(故障转移)

取舍----降级,限流,熔断,超时控制

降级是为了保证核心服务的稳定而牺牲非核心服务的做法。比方说我们发一条微博会先经过反垃圾服务检测,检测内容是否是广告,通过后才会完成诸如写数据库等逻辑。

限流完全是另外一种思路,它通过对并发的请求进行限速来保护系统。

 

2.运维层面

灰度发布,故障演练,监控报警

如何让系统易于扩展?

1.业务拆分

照业务拆分,在一定程度上提升了系统的扩展性,但系统运行时间长了之后,单一的业务数据库在容量和并发请求量上仍然会超过单机的限制。这时,我们就需要针对数据库做第二次拆分。

我们还可以根据业务接口的重要程度,把业务分为核心池和非核心池。打个比方,就关系池而言,关注、取消关注接口相对重要一些,可以放在核心池里面;拉黑和取消拉黑的操作就相对不那么重要,可以放在非核心池里面。这样,我们可以优先保证核心池的性能,当整体流量上升时优先扩容核心池,降级部分非核心池的接口,从而保证整体系统的稳定性。

2.存储扩展

水平拆分之后,我们就可以让数据库突破单机的限制了。但这里要注意,我们不能随意地增加节点,因为一旦增加节点就需要手动地迁移数据,成本还是很高的。所以基于长远的考虑,我们最好一次性增加足够的节点以避免频繁的扩容。

标签:缓存,并发,基础,性能,系统,业务,响应,设计
From: https://www.cnblogs.com/twh233/p/17914407.html

相关文章

  • 以 Git 为例演示 CentOS 系统安装软件的方式
    前言在Linux系统上安装软件有两种常用的方式。一种是通过包管理工具,直接安装;另一种是先下载源码,然后再手动编译,再安装。本文以Git为例,演示这两种安装软件的方式。使用yum安装Yum是CentOS的包管理工具。使用前先更新下Yum源:yumupdate使用包管理器安装软件非常简单,直接一......
  • 制作安装Linux操作系统的启动U盘方法
    制作安装操作系统的启动U盘安装系统前,我们需要制作系统安装启动U盘(或者DVD,但已经很少使用DVD,所以不再介绍),通过启动U盘来帮助我们安装下载好的Linux系统。接下来我们来介绍在Windows、Linux和MacOS三种系统下的制作启动U盘方法。准备条件:1.已经下载到本地的Linux系统安装镜像......
  • 租赁系统|租赁小程序开发|北京租赁系统提升行业发展
    租赁小程序定制功能是为了满足特定租赁服务的个性化需求而开发的一套功能模块。通过定制化开发,我们能够根据您的业务模式和需求,量身打造出适合您的租赁小程序。无论您是汽车租赁、房屋租赁、设备租赁或其他租赁服务,我们都能够为您提供定制化的解决方案。系统开发优势是我们在租赁......
  • 比赛模拟程序设计
    模拟体育竞技分析:a.采用乒乓球比赛规则(学号尾号为0,1,2,3同学必做及格题)。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬......
  • 构建可扩展的网校平台:在线教育系统源码设计与架构最佳实践
    随着科技的不断发展,在线教育系统在教育领域扮演着越来越重要的角色。本文将深入探讨如何构建一个可扩展的网校平台,重点关注在线教育系统的源码设计和架构最佳实践。 一、引言在当前信息时代,教育已经超越了传统的教学方式,转向更加灵活和便捷的在线教育平台。构建一个可扩展的网校平......
  • 模拟集成电路设计系列博客——4.3.1 有源RC滤波器
    4.3.1有源RC滤波器除了Gm-C滤波器外,另一种实现模拟集成滤波器的方案是有源RC滤波器或者MOSFET-C滤波器。在这两个技术中,电流的积分都是通过反馈连接在一个高增益放大器的电容上实现的,这与将电流积分电容连接到地的Gm-C滤波器方案不同。有时这种方案被叫做米勒积分,因为就像两级放......
  • 「从ES到CK 04」Clickhouse表引擎选择和表结构设计
    导航在完成将公司日志数据从Elasticsearch(下称ES)转战到Clickhouse后,个人认为有必要将过程记录分享。限于篇幅及便于分类组织,我会以一个系列文章的形式记录:01《ElasticsearchvsClickhouse》02《Clickhouse的基础知识扫盲》03《Clickhouse多分片多副本集群部署》04《Clic......
  • 客服系统接入抖音授权登录-在线客服接入抖音开放平台登录授权
    抖音授权简介抖音登录是基于OAuth2.0协议标准构建的授权登录系统。抖音OAuth2.0授权登录让用户安全登录接入的第三方应用或网站,在抖音用户授权登录已接入抖音OAuth2.0的第三方应用或网站后,第三方可以获取到用户的接口调用凭证(access_token),通过该凭证可以实现获取......
  • Linux系统下kafka集群安装部署
    Linux系统下kafka集群安装部署 Linux系统下kafka集群安装部署|系统运维(osyunwei.com)2023年05月01日 ⁄ kafka ⁄ 暂无评论 ⁄被围观1,254次+Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。操作系统:CentOS-7.xkafka版本:kafka_2.12-3......
  • ITSM软件与工单管理系统的区别是什么?
    随着信息技术的快速发展,IT服务管理(ITServiceManagement,ITSM)已成为许多企业和组织中的重要组成部分。为了更好地管理IT服务和满足用户需求,许多组织选择使用ITSM软件或工单管理系统。虽然它们在某种程度上有相似之处,但它们在功能和范围上存在着一些不同。 首先,ITSM软件是一种......