并发的概念和处理思路 - youngperson/study-100 GitHub Wiki

并发指的是程序的结构

并发指的是程序的结构。当时我们说这个程序是并发的,实际上,这句话应该表述成这个程序采用了支持并发的设计。并发是人为设计的结构。

正确的并发设计标准:使多个操作可以在重叠的时间段内进行。

并发设计让并发执行成为了可能


处理并发业务的逻辑

  • 前端:异步请求+资源静态化+cdn
  • 后端:请求队列+轮询分发+负载均衡+共享缓存
  • 数据层:redis缓存+数据分表+写队列
  • 存储:raid阵列+热备
  • 网络:dns轮询+DDOS攻击防护

根据业务场景进行分析,不同的业务场景对于架构的取舍是不一样的.但万变不离其宗,掌握这些处理高并发的分析方法还是很有必要的.


cdn

即内容分发网络,其目的是通过现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需要的内容,提高用户访问网站的响应速度,解决网络拥塞问题,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小用户访问量大网点分布不均等原因所造成的用户访问网站响应速度慢的问题。

CDN的基本运作原理是:在各地的部署CDN节点和大量的边缘服务器构成CDN网络, 然后将加速网站内容缓存或镜像到这些节点边缘服务器上,当终端用户访问这些加速网站时,通过DNS技术将用户访问解析到离终端用户最近的最可靠的边缘服务器上,实现就近访问,从而加速访问速度,提升用户的访问体验。

raid阵列

RAID是英文Redundant Array of Independent Disks的缩写,中文简称为独立冗余磁盘阵列。简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘)。

在用户看起来,组成的磁盘组就像是一个硬盘,用户可以对它进行分区,格式化等等。总之,对磁盘阵列的操作与单个硬盘一模一样。不同的是,磁盘阵列的存储速度要比单个硬盘高很多,而且可以提供自动数据备份。

数据备份的功能是在用户数据一旦发生损坏后,利用备份信息可以使损坏数据得以恢复,从而保障了用户数据的安全性。

热备

热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份.而冷备份指在数据库关闭后,进行备份


如何学习高并发的工具

处理高并发的开源轮子其实很多.很多高并发的架构分享都会提及使用的工具,自己多留心,再看看手册,有条件自己搭起来跑一跑。

redis,nginx/Tengine,keeplive,DRBD,heartbeat这些小工具还是可以在虚拟机上面多开几台跑起来的.至于大业务场景,除了进大公司没有别的办法,因为有些工具运行的配置要求太高,必须多台服务器配合才能完成。


如何模拟高并发场景

并不是只有实际生产环境才能测试高并发,其实模拟高并发的轮子也很多,最常用的apache benchmark,winrunner,loadrunner,这些教程很多,用来模拟基本的高并发业务绰绰有余,自己安装试用版,学学如何用,模拟些常用的业务. 如果有精力,业内很喜欢用perl,python,C来写一些针对热点业务的负载脚本.这需要有http协议等网络封包的理论基础。


并行是指的程序运行时的状态

同时执行,判断程序是否处于并发的状态,看同一时刻是否有超过1个"工作单位"在运行。所以单线程永远无法达到并行状态,要达到并行状态,最简单的就是利用多线程和多进程。但是Python的多线程由于存在著名的GIL,无法让两个线程真正的同时运行,所以实际上是无法达到并行状态的。