处理高并发的一般思路

更新日期: 2019-04-21阅读: 2.4k标签: 并发

前言

今天看见有人聊目前系统有2亿的PV,该如何优化?当我看到这个话题的时候,突然在想自己工作中也遇到了不少高并发的场景了,所以即兴发挥,在这里简单总结和分享下,欢迎指正和补充。


正文

读操作

关于读,我们一般遵循如下优先级:

优先级技术方案说明示例
最高尽可能静态化对实时性要去不高的数据,尽可能全走CDN例如获取基础商品信息
就近使用内存优先级服务器内存、远程内存服务例如秒杀、抢购库存(优先分配库存到服务器内存,其次远程内存服务<又涉及额外网络IO>)
极低数据库(能不读就不要读)连接池、sql优化常见业务

写操作

关于写,我们一般会按照数据的一致性要求级别来看:

数据一致性要求技术方案
不高先写内存(优先级从服务器内存到远程内存服务) 再异步储存
同步完成最关键的任务 异步保证其他任务最终成功

削峰限流

从简单到复杂:

简单程度技术方案
最简单百分比流量拒绝(随机、没有先到先得不够公平)
简单原子操作限流(优先级使用服务器内存、其次远程内存服务)
稍麻烦队列限流(先到先得,公平)

服务稳定性

在高并发的场景,有时候为了保证核心业务的正常进行,我们需要对一些次要的业务进行服务降级。简单的降级方案如下:

  1. 配置开关降级:手动进行配置开关降级
  2. 定时开关降级:自动定时降级

系统架构

关于系统架构,不用想的太复杂,简单的拆离此业务即可。

运维架构

部署层面,尽可能的把此类服务单独部署。

武器

"工欲善其事,必先利其器",处理高并发我们当然少不了好的武器。以下是高并发“三剑客”:

技术名词说明
异步异步回调,层层回调似灾难(Promise也是很臃肿的链式代码)
epollIO多路复用,nginx/redis方案
协程轻量,用户态调度高并发能力


来自:https://segmentfault.com/a/1190000018921221


链接: https://fly63.com/article/detial/2950

PHP和Redis实现在高并发下的抢购及秒杀功能示例详解

抢购、秒杀是平常很常见的场景,面试的时候面试官也经常会问到,比如问你淘宝中的抢购秒杀是怎么实现的等等。抢购、秒杀实现很简单,但是有些问题需要解决,主要针对两个问题:

说一说数据库的并发控制

最近在看Elasticsearch时看到了并发控制,由此看到了新的并发控制方式。不得不说Elasticsearch相较于关系型数据库就是两种理论建立的数据存储体系,当然它们在并发控制上也相差甚远,各有千秋。

PHP-高并发和大流量的解决方案

在互联网时代,并发,高并发通常是指并发访问。也就是在某个时间点,有多少个访问同时到来。 高并发架构相关概念QPS (每秒查询率) : 每秒钟请求或者查询的数量,在互联网领域,指每秒响应请求数

nodejs使用 eventproxy 控制并发

很多网站有并发连接数的限制,所以当请求发送太快的时候会导致返回值为空或报错。 安装依赖 express superagent cheerio eventproxy。新建app.js 抓取所有的url

PHP 并发场景的几种解决方案

在秒杀,抢购等并发场景下,可能会出现超卖的现象,在PHP语言中并没有原生提供并发的解决方案,因此就需要借助其他方式来实现并发控制。列出常见的解决方案有:

并发编程三要素:原子性,有序性,可见性

并发编程三要素:原子性: 一个不可再被分割的颗粒。原子性指的是一个或多个操作要么全部执行成功要么全部执行失败。有序性: 程序执行的顺序按照代码的先后顺序执行。(处理器可能会对指令进行重排序)

通过Iterator控制Promise.all的并发数

异步是 js 一个非常重要的特性,但很多时候,我们不仅仅想让一系列任务并行执行,还想要控制同时执行的并发数,尤其是在针对操作有限资源的异步任务,比如文件句柄,网络端口等等。

nodejs如何解决高并发?

Node可以在不新增额外线程的情况下,依然可以对任务进行并发处理 —— Node.js是单线程的。它通过事件循环(event loop)来实现并发操作,对此,我们应该要充分利用这一点 —— 尽可能的避免阻塞操作

如何利用 JavaScript 实现并发控制

在开发过程中,有时会遇到需要控制任务并发执行数量的需求。例如一个爬虫程序,可以通过限制其并发任务数量来降低请求频率,从而避免由于请求过于频繁被封禁问题的发生。

JavaScript 中如何实现并发控制?

在日常开发过程中,你可能会遇到并发控制的场景,比如控制请求并发数。那么在 JavaScript 中如何实现并发控制呢?在回答这个问题之前,我们来简单介绍一下并发控制。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!