C10X:C10K、C10M
C/C++Linux服务器开发/后台架构师知识体系资料整理
C10X
C10X 包括 C10K、C10M 等。C10K 问题最早由 Dan Kegel 在《The C10K problem》提出,指的是单机处理 1 万个并发连接。我们已经解决了 C10K 问题,当前面临的是C10M ,指单机同时处理一千万的请求。
早期互联网并不普及,用户不多,服务器并不存在高并发问题。到了 Web1.0,用户主要浏览静态网页,以门户类网站为主(比如 Netscape、Yahoo),互联网逐渐普及,虽然用户增多但也没有达到 C10K。到了 Web2.0,浏览网页发展成了实时通信和在线实时互动,以社交网站为代表(比如 Twitter、Facebook),用户爆发式增长,这个时候出现了 C10K 问题,再往后便是 C10M 问题。
C10X 的核心思想是让服务器处理更多的请求,追求单机极致性能。广义的角度来说,我们希望用更低的成本,更高的效率生产的产品为更多的用户提供有价值的服务。这样 C10X 也可以理解为用低成本、简单高效的方式提供高性能应用服务。
Solutions
解决这个问题的主要有三个方向:
- 硬件系统
- 操作系统
- 应用软件
Software Layers & Performance Productivity & Generality
从下往上,依次是硬件层、操作系统层、应用软件层。从下往上性能和通用性逐渐降低,生产效率逐渐升高。
Hardware
硬件是运行应用的物理基础,包括 CPU、内存、硬盘等,提供通用的计算、存储等能力。
硬件研发成本和风险高,但可以工厂化大规模批量生产。
CPU
单核 CPU —> 多核 CPU
根据摩尔定律,CPU 的性能在不断提高。当前硅基半导体工艺的已接近物理极限,单核的性能提升越来越慢,通过多核的方式可以以更低成本提升 CPU 整体性能。除此之外,芯片领域在探索新的材料和技术(比如碳基芯片)。
存储
软盘 —> 机械硬盘 —> SSD
随着存储器技术的更新换代,成本越来越低,存储容量越来越大,速度越来越快。
网卡
十兆网卡 —> 百兆 —> 千兆 —> 万兆
单网卡性能提升和多网卡绑定技术可以承载越来越大的吞吐量。
System
操作系统介于硬件和软件层之间,是管理硬件与软件资源的系统软件。操作系统的核心价值在于:实现软件治理、提供基础的编程接口、降低软件开发难度。
硬件在不断演进,操作系统也在演进。比如 CPU 演变成多核后,操作系统也具备更好利用多核的能力。
History of Evolution
- 手工操作阶段:独占计算机资源
- 单道批处理系统:高效利用 CPU 资源
- 多道批处理系统:宏观上并行,微观上串行
- 分时操作系统:交互性强
- 实时操作系统:及时性和可靠性不如分时
- 网络操作系统:集中式控制
- 分布式操作系统:分布式控制
- 个人操作系统:目前最广泛
Process & Thread
操作系统通过进程和线程管理资源的分配和调度,提高硬件资源的利用率。进程是资源分配的基本单位,通过进程可以实现多软件同时运行。线程是调度的基本单位,通过线程可以实现同一进程内多任务同时运行。
CPU 性能提升遇到了瓶颈,通过多核的方式提高 CPU 的整体性能。操作系统则通过多线程模型利用了 CPU 多核的优势。
I/O Model
网络处理能力是服务端性能的一个重要点。操作系统早期提供的阻塞 I/O 模型导致单线程只能同时处理一个网络请求,遇到阻塞需要进行线程上下文切换,带来了线程上下文切换时间消耗和线程资源消耗。非阻塞 I/O 模型和多路复用出现后,单线程可以同时处理多个网络请求,大大提高了网络请求的并发处理能力,又避免和线程上下文切换带来的时间消耗和线程资源消耗。I/O 多路复用提高了单线程并发处理网络请求的能力。
- Blocking I/O - 阻塞 I/O
- Nonblocking I/O - 非阻塞 I/O
- I/O multiplexing - I/O 多路复用(Select、Poll、Epoll)
- Signal Driven I/O - 信号驱动 I/O
- Asynchronous I/O - 异步 I/O(未成熟技术)
Software
硬件和操作系统都在不断演进,软件也在演进,充分利用硬件和操作系统演进带来的进步。
软件层是生产效率最高的一层,大量的开发工作消耗在这层。作为软件开发工程师,我们专注于软件层。硬件资源是昂贵且有限的,在硬件层和操作系统层一定的情况下,我们只能尽可能提高软件层的生产效率、性能和通用性。
软件开发目前没有实现工厂化一样自动化批量生产,还属于“劳动力密集型”。多人协作需要软件工程和项目管理控制效率和质量。
语言
不同语言写的代码在同一台计算机(硬件和操作系统都一样)跑为什么会有不同的性能。
CPU 只能执行机器码,高级语言的代码需要编译器编译成机器码。不同语言的编程模型不一样,编译成的机器码不一样导致了执行效率不一样。编程模型和编译这两部是语言性能和效率的关键,比如 Go 引入了Goroutine。
对于底层和极致性能追求的场景我们往往选择C、C++ 等语言,但是在应用层似乎用的比较多的是 Java、PHP 等语言。Java 等高级语言的性能可能比 C 差,但是开发效率高,用部分性能换取更高的效率。
分布式
单机性能再厉害也有极限,单机性能提升到一定程度再往后提升会越来越困难。单核 CPU 性能提升遇到瓶颈,我们使用多核 CPU 提升整体性能。同样,单机性能遇到瓶颈,我们使用集群和分布式系统提升整体性能。
传统的 SQL 数据库单机性能遇到瓶颈后,我们通过分库分表、NewSQL 提高数据库的整体能力。
Linux服务器开发/架构师面试题、学习资料、教学视频和学习路线图(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享有需要的可以自行添加学习交流群960994558
C/C++Linux服务器开发/后台架构师学习
C10X:C10K、C10M相关推荐
- 网络与IO知识扫盲(四):C10K问题、BIO的弊端与NIO的引入
C10K 问题 C10K 问题: http://www.kegel.com/c10k.html 我们使用BIO的时候,来一个连接就抛出一个线程.被抛出的独立的线程进行阻塞,等待接收已连接的client ...
- 从C10K到C10M高性能网络的探索与实践
原文:https://blog.qiniu.com/archives/4941 优化整理:极客重生 hi,大家好,今天是大年初一,先祝大家新年快乐!今天依然是干货,性能优化大局观,高端食材,值得品尝. ...
- [通俗易懂]深入理解TCP协议(下):RTT、滑动窗口、拥塞处理
转自即时通讯网:http://www.52im.net/ 前言 此文为系列文章的下篇,如果你对TCP不熟悉的话,请先看看上篇<[通俗易懂]深入理解TCP协议(上):理论基础> . 上篇中, ...
- 全面了解移动端DNS域名劫持等杂症:原理、根源、HttpDNS解决方案等
1.引言 对于互联网,域名是访问的第一跳,而这一跳很多时候会"失足"(尤其是移动端网络),导致访问错误内容.失败连接等,让用户在互联网上畅游的爽快瞬间消失. 而对于这关键的第一跳, ...
- Linux性能优化实战:基础篇:C10K 和 C1000K 回顾(35讲)
一.上节回顾 前面内容,我们学习了 Linux 网络的基础原理以及性能观测方法.简单回顾一下,Linux网络基于 TCP/IP 模型,构建了其网络协议栈,把繁杂的网络功能划分为应用层.传输层.网络层. ...
- IO 多路复用:C10K 问题
点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...
- wxpython dataview处理大量数据_38个常用Python库:数值计算、可视化、机器学习等8大领域都有了...
作者 | 李明江 张良均 周东平 张尚佳 来源 | 大数据DT 原文 | 38个常用Python库:数值计算.可视化.机器学习等8大领域都有了 Python作为一个设计优秀的程序语言,现在已广泛应用于 ...
- 网络IO发展历程:BIO、NIO、多路复用器、epoll
网络侧IO,通过网络来通信(偏向内核方面) C10K问题:http://www.kegel.com/c10k.html#frameworks BIO NIO 多路复用器 什么是NIO 操作系统角度:N ...
- 面试1:Java、微服务、架构常见面试题(持续更新中)
Java.微服务.架构常见面试题(持续更新中) 文章目录 Java.微服务.架构常见面试题(持续更新中) ==**Java**== 1.Java概述 (1)JVM.JRE和JDK (2)Java特点 ...
最新文章
- 关于比特币现金升级问题讨论不断升温
- P2709 小B的询问
- 四种π型RC滤波电路
- 【Redis】CentOS7下redis的安装+supervisor管理+允许远程访问+测试部署效果
- @scheduled注解配置时间_SpringBoot2.0实战(32)配置定时任务
- JSP中EL表达式说明
- 花书 —— 机器学习基础
- linux下Hbase的常用shell命令
- python语言中包含的标准数据类型有哪些_Python中的标准数据类型
- 考勤排班_考勤管理系统VS传统考勤排班优劣如何?
- java-实战java高并发程序设计-ch2java并行程序基础
- 【ANDROID游戏开发二十六】追加简述SURFACEVIEW 与 GLSURFACEVIEW效率!
- 写给非网工的CCNA教程(2)第一个协议--ARP协议
- ISO镜像文件下载路径
- TDSQL将发布免费版本,助力国产数据库生态完善
- shopex mysql索引_shopex数据库表结构说明文档.doc
- 血泪史: k8s Initial timeout of 40s passed.
- 高效短眠的10个好处及如何进行高效的睡眠
- html 自动填表,Delphi WEB网页自动填表
- 探花交友_第10章_实现推荐功能
热门文章
- 什么是 Web 3.0?定义、功能和示例
- qt中颜色对话框弹出时应用程序输出栏出现setGeometry: Unable to set geometry 152x30+682+300 on QWidgetWindow/‘QColorDialo
- element之el-scrollbar
- 程序员向 GitHub 仓库提交 PR,结果 “轰炸” 了近 40 万开发者
- Oracle数据库临时表-----会话级的临时表和事务级的临时表
- 关键字 - restrict
- 浅谈 BI 与数据分析的可视化
- 无源互调分析仪PIM Analyzer原理及应用
- 入选数据库顶会 VLDB:如何有效降低产品级内存数据库快照尾延迟?
- EasyUIcombobox回填