最近刷了很多高并发相关的解决方案视频,得到了一些启发并记录下来。

对于高并发的看法

对于高并发的场景,首先要了解请求瓶颈在哪里,从外到内是 一个用户的同时在线数,然后网关层面的压力,到具体某个场景,某一支API或者到达数据库的IO读写的压力。这里其实很多时候的瓶颈都在数据层的瓶颈,功能需求这些可以重新写,高并发的时候数据的压力更大,当然对于不同的系统需求可能不一样,比如最近就业的都是物联网行业,大家对于数据的看法可能觉得那么重要,更多的是认为一个设备能在服务无法顾及的去使用,就是一个高可用的需求更大。

高可用的处理方法常见的就 两种分别是摊、拦。

摊就是做负载均衡,多网关多中心多个微服务做流量的分摊避免单节点的瓶颈这属于横向的摊,还有一种纵向的分摊就是缓存策略,包括浏览器的缓存,到网关的缓存然后本地的缓存、分布式的缓存到redis、数据库的一二级缓存,到达数据库就分库分表数据分离等。只要某个缓存能命中,都能有效的减轻服务端或者数据库的压力。还有个一些超文本资源比如图片视频等,就要有独立的文件服务器,大并发用到cdn让设备走最近的服务器请求会快也能分摊压力。还有一种蓄,就是在消息队列这些中间件去处理的,在上游消费者和下游消费者之间给一个broker池子,临时存储流量,就是削峰填谷,在高峰时候把流量存储下来,等下游的消费者慢慢的消费。和大禹治水一样堵不如疏,也算是一种分摊。在框架层有个常说的事情就是,多加点中间件嘛,就能解决了。这得根据项目服务的瓶颈来分析,毕竟多加中间件就得多维护。

拦截就是对一部分用户的请求做分流,最简单的网关层面的就有令牌桶,漏桶算法这些东西。还有就是熔断机制对某些大并发的请求做降级处理这些。限制流量的本质就是为了保护系统在一个大流量的场景被冲垮。

转自:

0.76 复制打开抖音,看看【程序员叶伟的作品】分布式常见面试题:要支持10万的并发,你的系统应该... https://v.douyin.com/bXyzCPxe6nY/ 03/08 c@N.Jv BgO:/