周杰伦新歌《说好不哭》上线,程序员哭了!
前些天,朋友圈被一首歌刷屏了。
这首歌究竟有多火?揽获各大新闻头条。
新歌发售 3 小时,数字专辑就在 QQ 音乐卖了 360 万张。
以单价 3 元计算,一首《说好不哭》已狂揽千万,无人匹敌。
因为火爆,造成访问量迅速增长,
不少网友反映“QQ 音乐崩溃了。”
周杰伦以一己之力成为了干翻 QQ 音乐服务器的男人。
听说很多歌迷们都被周董的音乐所感动到痛哭流涕!但与此同时!QQ 音乐的程序员估计也要哭泣了!不奋战个一天一夜,怎么对得起嗷嗷待哺的歌迷朋友们?诸如双十一淘宝瘫痪,明星恋情导致微博宕机事件,说到底还是“高并发”的问题。
高并发带来的后果
服务端:
导致站点服务器 /DB 服务器资源被占满崩溃,数据的存储和更新结果和理想的设计是不一样的,比如:出现重复的数据记录,多次添加了用户积分等。
用户角度:
尼玛,这么卡,老子来参加活动的,刷新了还是这样,垃圾网站,再也不来了!
程序员的经历: 在做公司产品网站的过程中,经常会有多样需求,如果没有考虑到高并发下的数据处理,就会出现各种超出正常逻辑的现象,因为这些都是面向大量用户的,而不是像做 ERP 管理系统只是面向员工。
回归技术本身,面对如此大的高并发流量和屡次崩溃的系统,程序员们如何抵挡?
提高系统并发能力方式
在这个“云”的时代,提高分布式系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out)。
1、垂直扩展提升单机处理能力。垂直扩展的方式又有两种:
增强单机硬件性能,例如增加 CPU 核数如 32 核,升级更好的网卡如万兆,升级更好的硬盘如 SSD,扩充硬盘容量如 2T,扩充系统内存如 128G;
提升单机架构性能,例如使用 Cache 来减少 I/O 次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间。
2、水平扩展
只要增加服务器数量,就能线性扩充系统性能。虚拟化技术的出现,让水平扩展变得轻松且简单。现在的云主机几乎是虚拟主机,而不是物理主机。这样的话,线性扩充也就是分分钟的事,前提是要有足够的物理主机支撑。
#高并发的三个经典问题
1、单台服务器最大并发
单台服务器最大并发问题,一般是指一台服务器能够支持多少 TCP 并发连接。一种理论说法是受到端口号范围限制。操作系统上端口号 1024 以下是系统保留的,从 1024-65535 是用户使用的。由于每个 TCP 连接都要占一个端口号,所以我们最多可以有 60000 多个并发连接。但实际上单机并发连接数肯定要受硬件资源(内存、网卡)、网络资源(带宽)的限制。特别是网卡处理数据的能力,它是最大并发的瓶颈。
2、C10K 并发连接问题
C10K 并发连接问题是指单机 1 万个并发连接问题。如何突破单机性能局限,是高性能网络编程所必须要直面的问题。这些局限和问题最早被 Dan Kegel 进行了归纳和总结,并首次成系统地分析和提出解决方案,后来这种普遍的网络现象和技术局限都被大家称为 C10K 问题。C10K 问题本质上是操作系统的问题。对于 Web1.0/2.0 时代的操作系统而言, 传统的同步阻塞 I/O 模型都是一样的,处理的方式都是 requests per second,并发 10K 和 100K 的区别关键在于 CPU。创建的进程线程多了,数据拷贝频繁(缓存 I/O、内核将数据拷贝到用户进程空间、阻塞), 进程 / 线程上下文切换消耗大,导致操作系统崩溃,这就是 C10K 问题的本质。
3、C10M 并发连接问题
C10M 并发连接问题指的是单机服务器实现 C10M(即单机千万并发连接)。回顾过去的 10 年里,我们面临高性能网络编程领域著名的 C10K 问题,最终也成功提出解决方案。下一个 10 年,是时候考虑 C10M 并发问题了。
在很多程序员眼中,掌握海量高并发技能,就能走上人生巅峰。
小编倒觉得与其痴迷某些技术的尖端,不如解决某些行业的业务落地。你们觉得呢?