范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

高并发系统设计的15个锦囊

  记得很久之前,去面试过 字节跳动 。被三面的面试官问了一道场景设计题目: 如何设计一个高并发系统 。当时我回答得比较粗糙,最近回想起来,所以整理了设计高并发系统的15个锦囊,相信大家看完会有帮助的。
  如何理解高并发系统
  所谓设计 高并发 系统,就是设计一个系统,保证它 整体可用 的同时,能够 处理很高的并发用户请求 ,能够承受 很大的流量冲击 。
  我们要设计高并发的系统,那就需要处理好一些常见的系统瓶颈问题,如 内存不足、磁盘空间不足,连接数不够,网络宽带不够 等等,以应对突发的流量洪峰。 1. 分而治之,横向扩展
  如果你 只部署一个应用,只部署一台服务器 ,那抗住的流量请求是非常有限的。并且,单体的应用,有单点的风险,如果它挂了,那服务就不可用了。
  因此,设计一个高并发系统,我们可以 分而治之,横向扩展 。也就是说,采用分布式部署的方式,部署多台服务器,把流量分流开,让每个服务器都承担一部分的并发和流量,提升 整体系统的并发能力 。 2. 微服务拆分(系统拆分)
  要提高系统的吞吐,提高系统的处理并发请求的能力。除了采用 分布式部署的方式 外,还可以做 微服务拆分 ,这样就可以达到分摊请求流量的目的,提高了并发能力。
  所谓的 微服务拆分 ,其实就是把一个单体的应用,按功能单一性,拆分为多个服务模块。 比如一个电商系统,拆分为用户系统、订单系统、商品系统等等 。
  3. 分库分表
  当业务量暴增的话,MySQL单机 磁盘容量会撑爆 。并且,我们知道数据库连接数是有限的。 在高并发的场景下 ,大量请求访问数据库, MySQL 单机是扛不住的!高并发场景下,会出现too many connections 报错。
  所以高并发的系统, 需要考虑拆分为多个数据库,来抗住高并发的毒打 。而假如你的单表数据量非常大,存储和查询的性能就会遇到瓶颈了,如果你做了很多优化之后还是无法提升效率的时候,就需要考虑做 分表 了。一般千万级别数据量,就需要 分表 ,每个表的数据量少一点,提升SQL查询性能。
  当面试官问要求你设计一个高并发系统的时候,一般都要说到 分库分表 这个点。
  之前写了分库分表15连问,为了应对面试官追问到底,大家可以顺便复习一下分库分表的相关经典面试题哈,可以看我这篇文章:分库分表经典15连问 4. 池化技术
  在高并发的场景下, 数据库连接数 可能成为瓶颈,因为连接数是有限的。
  我们的请求调用数据库时,都会先获取数据库的连接,然后依靠这个连接来查询数据,搞完收工,最后关闭连接,释放资源。如果我们不用数据库连接池的话,每次执行 SQL ,都要创建连接和销毁连接,这就会导致每个查询请求都变得更慢了,相应的,系统处理用户请求的能力就降低了。
  因此,需要使用池化技术,即 数据库连接池、HTTP 连接池、Redis 连接池 等等。使用数据库连接池,可以避免每次查询都新建连接,减少不必要的资源开销,通过复用连接池, 提高系统处理高并发请求的能力 。
  同理,我们使用线程池,也能 让任务并行处理,更高效地完成任务 。大家可以看下我之前线程池的这篇文章,到时候面试官问到这块时,刚好可以扩展开来讲 面试必备:Java线程池解析 细数线程池的10个坑 5. 主从分离
  通常来说,一台单机的MySQL服务器,可以支持 500 左右的TPS 和10000 左右的QPS ,即单机支撑的请求访问是有限的。因此你做了分布式部署,部署了多台机器,部署了主数据库、从数据库。
  但是,如果双十一搞活动,流量肯定会猛增的。如果所有的查询请求,都走主库的话,主库肯定扛不住,因为查询请求量是非常非常大的。因此一般都要求做 主从分离 ,然后实时性要求不高的读请求,都去读从库, 写的请求或者实时性要求高的请求,才走主库 。这样就很好保护了主库,也提高了系统的吞吐。
  当然,如果回答了主从分离,面试官可能扩展开问你 主从复制原理,问你主从延迟问题 等等,这块大家需要 全方位复习好 哈。可以去看看我之前的这篇文章
  面试必备:聊聊MySQL的主从 6. 使用缓存
  无论是操作系统,浏览器,还是一些复杂的中间件,你都可以看到缓存的影子。我们使用缓存,主要是提升系统接口的性能,这样高并发场景,你的系统就可以支持更多的用户同时访问。
  常用的缓存包括: Redis 缓存,JVM 本地缓存,memcached 等等。就拿Redis 来说,它单机就能轻轻松松应对几万的并发,你读场景的业务,可以用缓存来抗高并发。
  缓存虽然用得爽,但是要 注意缓存使用的一些问题 : 缓存与数据库的一致性问题 缓存雪崩 缓存穿透 缓存击穿
  如果大家打算使用 Redis 的话,需要知道一些注意点,可以看下我之前的这篇文章哈,挺好的。使用Redis,你必须知道的21个注意要点7. CDN,加速静态资源访问
  商品图片, icon 等等静态资源,可以对页面做静态化处理,减少访问服务端的请求。如果用户分布在全国各地,有的在上海,有的在深圳,地域相差很远,网速也各不相同。为了让用户最快访问到页面,可以使用CDN 。CDN 可以让用户就近获取所需内容。
  什么是CDN?
  Content Delivery Network/Content Distribution Network,翻译过来就是内容分发网络,它表示将静态资源分发到位于多个地理位置机房的服务器,可以做到数据就近访问,加速了静态资源的访问速度,因此让系统更好处理正常别的动态请求。  8. 消息队列,削锋
  我们搞一些双十一、双十二等运营活动时,需要 避免流量暴涨,打垮应用系统的风险 。因此一般会引入消息队列,来应对 高并发的场景 。
  假设你的应用系统每秒最多可以处理 2k 个请求,每秒却有5k 的请求过来,可以引入消息队列,应用系统每秒从消息队列拉2k 请求处理得了。
  有些伙伴担心这样可能会出现 消息积压 的问题: 首先,搞一些运营活动,不会每时每刻都那么多请求过来你的系统( 除非有人恶意攻击 ),高峰期过去后,积压的请求可以慢慢处理;其次,如果消息队列长度超过最大数量,可以直接抛弃用户请求或跳转到错误页面; 9. ElasticSearch
  Elasticsearch ,大家都使用得比较多了吧,一般搜索功能都会用到它。它是一个分布式、高扩展、高实时的搜索与数据分析引擎,简称为ES 。
  我们在聊高并发,为啥聊到 ES 呢?因为ES 可以扩容方便,天然支撑高并发。当数据量大的时候,不用动不动就加机器扩容,分库等等,可以考虑用ES 来支持简单的查询搜索、统计类的操作。10. 降级熔断
  熔断降级 是保护系统的一种手段。当前互联网系统一般都是分布式部署的。而分布式系统中偶尔会出现某个基础服务不可用,最终导致整个系统不可用的情况, 这种现象被称为 服务雪崩效应 。
  比如分布式调用链路 A->B->C.... ,下图所示:
  如果服务  C  出现问题,比如是因为慢 SQL  导致调用缓慢,那将导致 B  也会延迟,从而 A  也会延迟。堵住的 A  请求会消耗占用系统的线程、IO、CPU等资源。当请求 A  的服务越来越多,占用计算机的资源也越来越多,最终会导致系统瓶颈出现,造成其他的请求同样不可用,最后导致业务系统崩溃。
  为了应对服务雪崩, 常见的做法是 熔断和降级 。最简单是加开关控制,当下游系统出问题时,开关打开降级,不再调用下游系统。还可以选用开源组件 Hystrix 来支持。
  你要保证设计的系统能应对 高并发场景 ,那肯定要考虑 熔断降级 逻辑进来。 11. 限流
  限流也是我们应对高并发的一种方案。我们当然希望,在高并发大流量过来时,系统能全部请求都正常处理。但是有时候没办法,系统的CPU、网络带宽、内存、线程等资源都是有限的。因此,我们要考虑限流。
  如果你的系统每秒扛住的请求是一千, 如果一秒钟来了十万请求呢 ?换个角度就是说,高并发的时候,流量洪峰来了,超过系统的承载能力,怎么办呢?
  这时候,我们可以采取限流方案。就是为了保护系统,多余的请求,直接丢弃。
  什么是限流  :在计算机网络中,限流就是控制网络接口发送或接收请求的速率,它可防止DoS攻击和限制Web爬虫。限流,也称流量控制。是指系统在面临高并发,或者大流量请求的情况下,限制新的请求对系统的访问,从而保证系统的稳定性。
  可以使用 Guava 的RateLimiter 单机版限流,也可以使用Redis 分布式限流,还可以使用阿里开源组件sentinel 限流。
  面试的时候,你说到限流这块的话?面试官很大概率会问你限流的算法,因此,大家在准备面试的时候,需要复习一下这几种经典的限流算法哈,可以看下我之前的这篇文章,面试必备:4种经典限流算法讲解 12. 异步
  回忆一下什么是同步,什么是异步呢?以  方法调用  为例,它代表  调用方要阻塞等待被调用方法中的逻辑执行完成  。这种方式下,当被调用方法响应时间较长时,会造成调用方长久的阻塞,在高并发下会造成整体系统性能下降甚至发生雪崩。异步调用恰恰相反,调用方不需要等待方法逻辑执行完成就可以返回执行其他的逻辑,在被调用方法执行完毕后再通过回调、事件通知等方式将结果反馈给调用方。
  因此,设计一个高并发的系统, 需要在恰当的场景使用异步 。如何使用异步呢?后端可以借用消息队列实现。比如在海量秒杀请求过来时,先放到消息队列中,快速响应用户,告诉用户请求正在处理中,这样就可以释放资源来处理更多的请求。秒杀请求处理完后,通知用户秒杀抢购成功或者失败。 13. 接口的常规优化
  设计一个高并发的系统,需要设计接口的性能足够好,这样系统在相同时间,就可以处理更多的请求。当说到这里的话,可以跟面试官说说接口优化的一些方案了。大家可以看下我的这篇文章哈:实战总结!18种接口优化方案的总结
  14. 压力测试确定系统瓶颈
  设计高并发系统,离不开最重要的一环, 就是压力测试 。就是在系统上线前,需要对系统进行压力测试,测清楚你的系统支撑的最大并发是多少,确定系统的瓶颈点,让自己心里有底,最好预防措施。
  压测完要分析整个调用链路,性能可能出现问题是网络层(如带宽)、Nginx层、服务层、还是数据路缓存等中间件等等。
  loadrunner 是一款不错的压力测试工具,jmeter 则是接口性能测试工具,都可以来做下压测。15. 应对突发流量峰值:扩容+切流量
  如果是突发的流量高峰,除了降级、限流保证系统不跨,我们可以采用这两种方案,保证系统尽可能服务用户请求: 扩容: 比如增加从库、提升配置的方式 ,提升系统/组件的流量承载能力。比如增加MySQL、Redis 从库来处理查询请求。切流量: 服务多机房部署 ,如果高并发流量来了,把流量从一个机房切换到另一个机房。
  来源:https://mp.weixin.qq.com/s/PPA8Iw6K2M2xVnGE-Tf6zw
  作者:程序员田螺

风景有毒甘川青之拉卜楞寺引言地图上甘川青三省交界的那一小片地方,却是风景极美之地,那一个个振聋发聩的名字是朋友圈里神秘的宠儿。2017年9月,终于没能抵挡住诱惑,和同样不安分的闺蜜一拍即合,经过简单的沟通北方枫叶正当时没有疫情之前几乎每年都会去香山看枫叶,有时候是学术交流完毕后顺路去香山,有时候是公事间隙去香山也有时候就是周末三五好友一起去香山但是香山枫叶与故宫的大雪一样与我总是阴差阳错或者说擦回忆随风吹,心被爱揉碎原创孤月冷梅天又黑人疲惫寂寞把我包围此刻回忆又被冷风吹起怀念曾经泪水落点滴回忆随风吹心被爱揉碎要说爱有多美那就有多心碎撕碎一笔伤悲为何想念一个人会如此心酸翻开我们曾经的书来信往曾经60岁之后,早晨养成这些习惯,多半都会长寿前言进入老年之后,我们一定要养成良好的习惯。在很多事情上必须认真地去处理,特别是个人的精神方面,不要让自己吃亏,不然的话你的生活就会受到委屈,如果你的心情不好的话,也会导致各种事情给儿子的一封信儿子,你已经十岁了。十年前的2009年6月30日,上午11点30分,从你妈妈十月怀胎的辛苦,终于迎来了你生命的诞生,你现在无法理解你爸爸在产房外的走来走去的焦急等待和等你哇哇落地大酒后乱语说自己不喜欢酒,这可能是违心的话,因为遇到酒局我基本上未拒绝过,偶尔几日没酒局,我还会约上几位好友小酌几杯,所以一年到头酒没少喝。每次喝酒,酒酣之余,大家天南海北,阔谈一番,甚至争遇园游记距离上次金坛游已逾三个月,其间由于疫情原因,一直没有出游,确切来说,是不敢轻易出游。人,生于自然,惟有亲近自然最舒适。呆板的生活容易令人变得压抑适当地放松身心,接触自然,才能身心舒走在田子坊在上海,我经常以走小巷,串里弄为乐。见见地道的当地人,看看他们的生活特别有意思。今天打算走走田子坊,前几年来过,今年再看看。田子坊位于上海市泰康路210弄。泰康路是打浦桥地区的一条颠覆认知的中国风景,你知道几个?我们常爱说中国地大物博如果从地理的角度来看这句话一点也不夸张一方水土,一方风景广袤的中华大地上哪怕是同类的景观在不同的地域也有着不一样的风情今天地理君不仅会带大家看各地美景还有随堂河北衡水湖迎候鸟迁徙高峰来源中国新闻网连日来,在享有京津冀最美湿地之称的河北省衡水湖畔,大批的鸿雁豆雁等十余种候鸟在湖区上空飞翔,衡水湖迎来候鸟迁徙高峰期。每年10月中旬至11月初,大批候鸟选择来这里停歇文旅局长视频另类出圈,也是旅游业新的可能新京报快评出圈的除了文旅局长的颜值,还有地方旅游部门力图与市场合拍的营销推广思路。湖北随州市文化和旅游局局长解伟在推介当地的千年银杏谷景区时,出镜作古风男子的扮相。截图来自解局长带你游随州视
有哪些比较文艺的app值得推荐的?对这个问题倍感兴趣,所以我不请自来回答。首先说下我对文艺的定义,我觉得文艺不是意味着小众或者是硬坳出一股文青的气质,还是你有着非常明确的自己喜好。像我一般会选择比较简洁偏人性化设计王晗为什么说吉林队有些球员不配被称为职业球员?是指谁?吉林队很奇葩,王晗执教不如王博,球员态度差不仅仅是没钱,王晗指责球员不如自责好吉林89117输给了辽宁队,我都没有关注,因为都把精力倾注到北京和广东队的焦点战,28分输球很正常,琼巴西的罗纳尔迪尼奥,是一位什么水平的球员?他是梅西的老师!他是荣誉大满贯球星,是足坛历史上想象力和创造力最强的球员之一!他曾经是同时代独一档的存在,能让皇马球迷站起来鼓掌,并险些成为第三代球王!人家罗纳尔迪尼奥,踢的是快乐有人退休后为什么和同事都不想再联系了?我们单位有个大龄同事叫老王,是去年上半年正式退休的。在退休前,老王是我们单位里人人都尊敬的前辈,平常在食堂吃饭或者工作中都会和大家亲切地交流。可退了休以后,他好像就消失了一般,比如宝妈们你们都是怀孕多少周生的?感觉怎么样?没有经验的妈妈们生孩子不要怕哦!看看我的经历吧!我第一个宝宝是预产期前一天生的。整个孕期我觉得都好轻松,就是后面三个月有点睡不着觉,不太好睡!怀孕后也在做事,预产期前20天才停下来葡萄干,吃前要不要洗一洗,不洗会得什么病?葡萄从树上摘下来到你手上中间会有很多细菌,所以吃前必须要洗一洗的,跟我学,不用一颗颗洗,一招搞定谢邀。通常袋装或者罐装的,就是有包装那种,我不洗,直接抓一把吃。一般都是买这种。如果现在如果你要换电子产品,你还会选择联想的吗?只要产品好,跨国公司怕什么?沃尔玛不照样营业吗?日本产品还是很受欢迎呀,美国汽车在中国大地随处可见。都不买电脑说明供需近于饱和。赶快产业转型呀!过几天就都忘了,日子该怎过还怎么过。浙江省哪些大学较好?浙江工业大学怎么样?1浙江大学(211985双一流)浙江大学,简称浙大,坐落于人间天堂杭州。前身是1897年创建的求是书院,是中国人自己最早创办的新式高等学校之一。1928年更名为国立浙江大学。中华民郴州让你最难忘的美食是什么?桂东的黄糍粑,艾叶糍粑!还有郴州鱼粉,资兴东江鱼,临武的临武鸭临鸭郴州烧鸡公白露堂杀猪粉,真的欲罢不能,经济实惠又好吃。一白露塘杀猪粉其实郴州最有名的粉还是栖凤渡鱼粉,没办法,身为你的家乡有什么让你朝思暮想的美食?家乡的美食很多,冷面辣菜汤子面小鸡炖木菇黏火勺子煎饼最爱的东北大酱,纯手工的,冬月黄豆洗净入锅按比例添水烧柴火煮三天,颜色深红出锅,我们最爱干的活摔大酱,把煮熟的豆子趁热盛到盆子里农村有哪些平时在城里吃不到的美食?感谢邀请。我觉得在农村能吃到的很多美味在城里都吃不到。我是一个出生在农村的80后,目前依然生活在农村,生在南方,农村自然美味也多。野果类,比如树莓,茶桃,野地瓜,八月瓜,九月瓜,布