前些天,场主的朋友圈被一首歌刷屏了。
数据有多牛逼?除了揽获各大新闻头条,新歌发售3小时,数字专辑就在QQ音乐卖了360万张。以单价3元计算,一首《说好不哭》已狂揽千万,无人匹敌。
结果因为访问量太大,不少网友反映“QQ音乐崩了。。。”
在大家眼里,好像只有微博服务器是“不堪一击”的。那天晚上,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 并发问题了。
今日重点结束
在很多程序员眼中,掌握海量高并发技能,就能走上人生巅峰。
anyway,学得会就学。场主倒觉得与其痴迷某些技术的尖端,不如解决某些行业的业务落地
本文已经获得授权转载
作者:场主
来源:养码场(ID:yangmachang0)
往期文章精选
如果让你手写个栈和队列,你还会写吗?
挑战10个最难的Java面试题(附答案)【上】
javascript基础修炼(13)——记一道有趣的JS脑洞练习题
【我的物联网成长记3】如何开发物联网应用?
【HC资料合集】2019华为全联接大会主题资料一站式汇总,免费下载!
对你没有看错!不到 10 行代码完成抖音热门视频的爬取!
Python面试的一些心得,与Python练习题分享