架构师才需要知道的知识如何做容量预估和调优
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标
一开始就要明确定义QPS保障目标,以此来推算所需的服务、存储资源。可根据历史同期QPS,或者平时峰值的2到3倍估算。
压测目标示例:qps达到多少时,服务的负载正常,如平均响应时间、95分位响应时间、cpu使用率、内存使用率、消费延迟低于多少不要让任何一个环节成为瓶颈,需考虑服务实例、数据库、Redis、ES、Hbase等资源2、服务注意点2。1、服务qps上限
服务qps上限工作线程数1平均单次请求处理耗时
主要关注以下几点:(1)工作线程数,对qps起到了直接影响。
dubbo工作线程数配置举例:
(2)cpu使用率:跟服务是IO密集型,还是计算密集型有关。IO密集型:调用多个下游服务,本身逻辑较简单,cpu使用率不会很高,因此服务实例的个数不用很多计算密集型:本身逻辑很复杂,有较重的计算,cpu使用率可能飙升,因此可适当多部署一些服务实例(3)网络带宽:对于大量的小请求,基本无需考虑如果请求内容较大,多个并发可能打满网络带宽,如上传图片、视频等。
以实际压测为准。或者在线上调整权重,引导较多流量访问1台实例,记录达到阈值时的qps,可估算出单实例的最大qps。2。2、超时时间设置
漏斗型:从上到下,timeout时间建议由大到小设置,也即底层下游服务的timeout时间不宜设置太大;否则可能出现底层下游服务线程池耗尽、然后拒绝请求的问题(抛出java。util。concurrent。RejectedExecutionException异常)
原因是上游服务已经timeout了,而底层下游服务仍在执行,上游请求源源不断打到底层下游服务,直至线程池耗尽、新请求被拒绝,最坏的情况是产生级联的雪崩,上游服务也耗尽线程池,无法响应新请求。
具体timeout时间,取决于接口的响应时间,可参考95分位、或99分位的响应时间,略微大一些。
dubbo超时时间示例:在服务端、客户端均可设置,推荐在服务端设置默认超时时间,客户端也可覆盖超时时间;
2。3、异步并行调用
如果多个调用之间,没有顺序依赖关系,为了提高性能,可考虑异步并行调用。
dubbo异步调用示例:首先,需要配置consumer。xml,指定接口是异步调用:然后,在代码中通过RpcContext。getContext()。getFuture()获取异步调用结果Future对象:调用1先执行interface1。xxx();调用2、3、4无顺序依赖,可异步并行执行interface2。xxx();future2RpcContext。getContext()。getFuture();interface3。xxx();future3RpcContext。getContext()。getFuture();interface4。xxx();future4RpcContext。getContext()。getFuture();获取调用2、3、4的执行结果result2future2。get();result3future3。get();result4future4。get();此处会阻塞至调用2、3、4都执行完成,取决于执行时间最长的那个handleResult2(result2);handleResult3(result3);handleResult4(result4);调用5最后执行,会阻塞至前序操作都完成interface5。xxx();2。4、强依赖、弱依赖强依赖调用:决不能跳过,失败则抛异常、快速失败弱依赖调用:决不能阻塞流程,失败可忽略2。5降级粗粒度:开关控制,如对整个非关键功能降级,隐藏入口细粒度:调用下游接口失败时,返回默认值2。6限流
超过的部分直接抛限流异常,万不得已为之。3、存储资源注意点3。1、放大倍数:1次核心操作,对应的资源读写次数、接口调用次数
例如:1次核心操作,查了3次缓存、写了1次缓存、查了2次数据库、写了1次数据库、发了1次MQ消息、调了下游服务A的接口;
则对于读缓存放大倍数为3,写缓存放大倍数为1,读数据库放大倍数为2,写数据库放大倍数为1,MQ放大倍数为1,调用下游服务A的放大倍数为1。针对写放大倍数,需要单独考虑主库是否扛得住放大倍数的qps。
需关注:读、写的放大倍数,要分开考虑,因为分布式架构通常是一主多从,一主需要支撑所有的写QPS,多从可以支撑所有的读QPSDB读放大倍数、DB写放大倍数Redis读放大倍数、Redis写放大倍数MQ放大倍数接口调用放大倍数等3。2、存储资源QPS估算
存储资源的QPS上限,跟机器的具体配置有关,8C32G机型的QPS上限当然要高于4C16G机型。下表为典型值举例。
资源类型
单实例QPS数量级(典型值)
水平扩展方式
集群总QPS估算
DB
几千
分库分表
实例个数单实例QPS,其中实例个数的范围是1分库个数(可达数百)
Redis
几万
Redis集群
实例个数单实例QPS,其中实例个数的范围是1分片个数(可达数百),总QPS可达百万级
MQ
几万
partition拆分,每个分片最多被1个服务并发消费
实例个数单实例QPS,其中实例个数的范围是1partition个数,总QPS可达百万级
HBase
几千?
region拆分
实例个数单实例QPS,其中实例个数的范围是1region个数
ES
几千?
shard拆分
实例个数单实例QPS,其中实例个数的范围是1shard个数
晚安人生要全力以赴,但不必太过慌张今日推荐阅读人生要全力以赴,但不必太过慌张峰回路转,来日方长。1hr在人生这条漫漫长路上,每个人都有自己的节奏。有的人快一点,有的人慢一点。每个人……
这些病是撑出来的,饿一饿就好了?看完又涨知识了大家肯定都听说过吃饱了撑得,本是一句俗语,但是从医学角度来讲,它也是有一定依据的。刘大爷正值中年,各种应酬不断。每一餐都是大鱼大肉,连着吃了一个月,他感觉身体越来越不舒服。……
甲流你了解多少甲流最近很猖獗,本来也没在意,只是无意和身边朋友聊天,才知道每个人家里都有中招的人,而且孩子居多,症状就是长时间高烧不退,让家长很难受,我还在庆幸自己家孩子没事。可是没想到聊天……
长白山雾凇岛许你一个冰雪奇缘的梦北风带着云朵的思念吹白了整个冬天来自北冰洋的冷空气跨过西伯利亚吹过松嫰平原东北的冬天就散发出它的专属味道北国冰城东方的巴黎索菲亚教堂下拥抱的……
IG抽卡又成功了,小思聪成神卡?德杯唯一全胜出线队伍有了前言:LPL冬季转会期真的要说哪支队伍大换血的,那肯定是IG,IG除了保留打野位置的Xun还有辅助Lucas,其他三个位置全部换人。令人感到意外的是,IG放弃韩援,组建全华班,……
辛巴推动辛选集团高质量发展,唐河垃圾分类举动小改善环境作用大近年来,直播电商行业从业者呈现爆发式增长,网络直播购物已成为消费者日常购物的主要方式之一。与此同时,直播电商普惠消费者的商业本质逐渐显露出来。为了普惠消费者,直播电商行业需要在……
宇宙中心之谜太阳系有没有中心呢?银河系呢?整个宇宙呢?如果有中心的话,这个中心是什么呢?托勒密是古希腊的学者,在公元90168年之间,他率先建立了当时最早最全面的地心宇宙体系学说。托……
家乡的秋,诗意的乡愁这个国庆长假,没有旅游,也没有远方。但我有诗意的乡恋,有色彩斑斓的乡愁和秋收。我没有计划,也不需要安排,不担心堵车,也不着急到吃饭和住宿。我携带简陋的相机,像一条贪婪美食……
刘国梁乒乓球养狼计划的利与弊!张本智和是另类多数人待遇并不好探讨养狼计划的利与弊!到底应不应该支持这样一个对国乒存在威胁的计划存在呢?养狼计划的由来资深的国乒球迷都知道养狼计划这个典故。养狼计划,是指2009年初,蔡振华接掌……
想让口红帮你变美,先得给它找个合适的窝朱唇皓齿娇春风,口脂面药生颜色口脂就是我们现在说的口红,从古至今,女性追求美丽的步伐从未停止,这不仅仅是为了外表上的靓丽,更是一种实现自我认知的途径。不管你买的口红……
中国空间站上的太空实验室瞄准建成国家级太空实验室的科学目标,中国空间站正在稳步推进在轨建设工作。空间站所处的轨道有着不同于地面的长时间微重力、强辐射环境,以及极端温度、高真空等极端条件,相比无人……
产后抑郁不是作,相信自己一定能够及时走出来的!虽然产后抑郁这个词大家听的很多,但是真正意识到、并且知道什么意思的并不多。它可怕吗?当家人不重视甚至责怪你的时候,是很可怕;一旦家人意识到并且给予正确支持的时候,产后抑郁并不可……