并发与并行是为了最大化计算机的使用效率。
并发与并行的区别:
- 并发是指多个线程操作同一个资源,不是同时执行,而是交替执行,单核CPU,只不过因为CPU的时间片很短,速度太快,看起来是同时执行(张三、李四厨师,共用一口锅炒菜,交替执行)。
- 并行是真正同时执行,多核CPU。每个线程使用一个单独的CPU的资源来运行(张三、李四厨师、一人一口锅,一起炒菜)。
并行编程:是指允许多个任务在一个时间端内重复的执行的设计结构
高并发:我们设计的程序,可以执行海量的任务同时执行
- QPS:每秒能够响应的请求数,QPS并不是并发数
- 吞吐量:单位时间内处理的请求数,QPS和并发数决定的
- 平均响应时间:系统对一个请求作出响应的平均响应时间 QPS=并发数/平均响应时间
- 并发用户数:系统可以承载的最大用户量
互联网系统的架构提高系统并发能力的方法:
- 垂直扩展:(提升单机处理能力)
- 增强单机的硬件性能:增加CPU的核数、内存升级、磁盘扩容
- 提升系统的架构能力:使用Cache来提高效率
- 水平扩展
扩展方案:
- 集群:多个人做同一件事
- 分布式:一个复杂的事情,拆分成多个简单的步骤,分别让不同的人去做
- 站点层扩容:通过Nginx反向代理,实现高并发的系统,将服务部署在多个服务器上
-
服务层扩容:通过RPC框架实现远程调用:Dubbo,Spring Clodud,将业务逻辑分拆成不同的RPC Client,Clident完成各自的不同的业务,如果并发量比较大,新增加RPC Client。
- 数据层扩容:一台数据库拆分成多态,分库分表,主从复制,读写分离。