首页 > 其他分享 >5分钟了解系统架构设计(5)

5分钟了解系统架构设计(5)

时间:2023-02-11 11:44:56浏览次数:44  
标签:架构设计 zone 2s 系统 分钟 并发 了解 limit 限流

最近梳理了之前学习的架构设计相关的一些课程学习总结,将其整理成了一个大纲脑图,以每篇5分钟系列展现出来,希望对你有所帮助。

如何设计一个高性能的系统架构,这是面试中一般常见的问题,明白回答该类问题的套路可以帮助我们理清思路。

本篇会聚焦high-level的思路,实际场景中还需要根据实际条件约束综合考虑。

首先,对于这类问题,回答套路为:

明确性能指标 => 保护系统措施 => 保护用户体验 => 快速扩容预备

其次,我们以后端服务为例,下面是回答思路。

画外音>如果不仅是后端视角,那就还需要站在系统的全链路视角来分析到底各个环节的具体指标。

1、明确系统性能指标

假设要求TP99=2s,即保证99%的请求的响应时间都在2s内。

画外音>如果你对TP99概念还不太熟悉,建议阅读本系列的第一篇推文

但是需要确认并发用户数,即确认系统的承载能力范围,因此明确为:“保证系统并发数在100万用户内的时候,TP99=2s”。

综述,对于系统设计者而言,要清楚系统有所能,也有所不能。

此外,在压测阶段,可以通过绘制吞吐量和延迟的曲线,找到最佳性能点,进而在超过最佳性能点时做限流。

2、明确系统保护措施

当系统并发用户的数量超过100万的时候,要保证有100万用户的TP99=2s,然后保护系统,并拒绝其他用户的连接请求。

具体保护系统的措施包括:系统限流,即通过流量控制来保证系统的稳定性,当实际并发压力超过系统性能设计指标时,就拒绝新的请求连接,让用户进行排队。实际中,我们可以使用Nginx限流 或 API网关(如APISIX或Kong)提供的限流。

实际操作案例:

Nginx限流—控制速率

limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=10r/s; // 限制单个IP每秒最多请求10次
server {
    location /{
        limit_req zone=myRateLimit;
        proxy pass http://my_server_upstream;    
    }
}

Nginx限流—控制并发连接数

limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
    ...
    limit_conn perip 10; // 表示限制单个IP同时最多能持有10个连接
    limit_conn persever 1000; // 表示server同时只能够处理100个并发连接数
}

3、保证用户体验

当系统达到最大并发用户数时,需要给系统承载量外的用户提供一些优雅的体验,比如:服务器排队机制,并附加具体、明确的信息提示。

4、快速扩容预备

若出现流量压力时,能够在几分钟内完成扩容,并保证在扩容后能承载的并发用户量仍然可以保持TP99=2s。

具体预备的扩容措施包括:存储额外的计算资源,用于不时之需,可以通过事先预估留出一部分资源池。当然,没有把额外的计算资源直接加入,这是基于IT成本的考虑。

在实际场景中,通过云计算可以快速方便的实现虚拟机资源的弹性伸缩,而Kubernetes的滚动更新和横向伸缩(Auto Scale)功能则可以实现应用资源的弹性伸缩。

通过上述的思路,我们大概可以了解在回答高性能系统的设计思路时,应该有的基本套路。

5、事后排查

当然,即使我们事前考虑的再多,也仍然会存在延迟和吞吐量的问题。

那么,如果发现系统存在较高延迟和吞吐量显著降低,如何进行定位呢?

(1)定位延迟的问题

解决思路:

端到端逐一排查时间消耗在哪里。

善用工具:

Java => jstack 打印系统当前线程堆栈, JProfiler 监控系统的内存使用情况、GC、Thread运行情况。

.NET => WinDbg 打印系统当前线程堆栈 和 内存使用情况,CLRProfiler, dotmemory, dottrace 都可以用。

排查案例:

比如你发现了运行的 100 个线程里面,有 80 个卡在某一个锁的释放上面,这时极有可能这把锁造成的延迟问题。

(2)定位吞吐量的问题

对于吞吐量指标要和 CPU使用率一起来看,在请求速率逐步增大时,经常会出现四种情况,对应的建议也一并附在了下面的表格中:

参考资料

李运华,《从0开始学架构》

刘海丰,《架构设计面试精讲》

潘新宇,《23讲搞定后台架构实战》

 

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

标签:架构设计,zone,2s,系统,分钟,并发,了解,limit,限流
From: https://www.cnblogs.com/edisonchou/p/architecture_design_learning_in_5mins_part5.html

相关文章

  • mysql 按照天,小时,分钟等分组排序
    按照季度统计SELECTCONCAT(DATE_FORMAT(create_time,'%Y'),'-',FLOOR((DATE_FORMAT(create_time,'%m')+2)/3),'季度')ASQUARTER,COUNT(1)AS总量FROM表WHEREcr......
  • 快速了解什么是可信执行环境TEE技术
    1.背景TEE全名为可信执行环境(TrustedExecutionEnvironment)是计算平台上由软硬件方法构建的一个安全区域,可保证在安全区域内加载的代码和数据在机密性和完整性方面得到保护......
  • 自恢复保险丝品种及封装,你了解过吗?-优恩
    20年代,随着科技的不断发展,很多电子产品变得越来越复杂,在这种多元需求下,大家对于电子元器件的要求也越来越高,这对元器件行业来说势必是一大挑战。今天优恩小编要来说的是在......
  • 美颜SDK详解,您了解美颜SDK吗?
    随着直播行业的发展,美颜SDK已经成为了每个平台主播的标配,越来越多的直播平台开始采用该技术,并通过美颜SDK进行了主播颜值和个人形象的打造。那么,面对市场上种类繁多的美颜SD......
  • Vue课程50-了解v-model指令的用法
     <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content......
  • 关于MySQL数据存储,你了解多少?
    前言大家都知道MySQL的数据都是保存在磁盘的,那具体是保存在哪个文件呢?MySQL存储的行为是由存储引擎实现的,MySQL支持多种存储引擎,不同的存储引擎保存的文件自然......
  • python selenium.remote远程连接时间达10分钟
    问题:在机器A搭建了selenium-grid的环境,hub以4444端口号启动,并在4444下注册了子node,端口4445,浏览器配置chrome使用代码进行远程连接,并创建会话:传入的server_url= http:......
  • 5分钟背驰将产生3-6个交易日的调整
     上证指数和创业板指数从5分钟走势结构来看,5分钟背驰已经确认成立,5分钟上产生背驰,至少会产生5分钟线段的调整,从调整时间上来看,时间大概是3-6个交易日,正好从侧面......
  • 关于技术能力的思考和总结-架构设计(二)
    目录技术架构思考方法0--->11--->01--->21--->N-1<--->1M*N--->M+N总结这篇文章我其实更想跟大家聊聊一些常用的思考方法,思考问题的方式对了,往往可以帮助大家少走弯路。......
  • 数据库架构设计——数据库选型
    摘要架构师在工作中经常会遇到数据库存储选型的问题,而市面上数据库产品众多,往往会无从下手,甚至有时候从业务开发到上线运维过程中会多次更换底层数据库,给整个研发中心带来不......