后台程序开发:性能的极限是什么?

2016-01-14 22:52:41 +08:00
 alexapollo

Background

笔者(俺)
* 之前参与过国际顶级的开源社区
* 对内核进行过深度定制(使用本文提到的技术)
* 浸淫 C10M 已久

正文

传送门:后台程序开发:性能的极限是什么?
prezi : https://prezi.com/3p17hwgqpqvs/presentation/
去年写的 prezi ,到现在其中的知识仍然完全适用。
欢迎点评交流~

6871 次点击
所在节点    程序员
30 条回复
alexapollo
2016-01-14 23:22:30 +08:00
看来这个标题起的很不好……
应该起『性能提升的 16 个法则』?
zongwan
2016-01-14 23:23:36 +08:00
小米 预约抢购 需要你..
提供 C 10M 的 DDOS 攻击小米服务器
alexapollo
2016-01-15 00:12:11 +08:00
@zongwan 还别说…… C10M 做 DDOS 还真最合适
jedihy
2016-01-15 00:56:44 +08:00
Good ! 收藏了!!!!!!!!
k9982874
2016-01-15 01:09:26 +08:00
准备好啃干货 点开一看就几行字 一股脱了裤子就给我看这个的感觉
xiaocsl
2016-01-15 03:54:48 +08:00
帖子发了两个网址
第一个 anwcl.com 的网址 网页用了什么黑科技,
我等会要专门开个帖子.问一下.太厉害了,直接导致显示器(电视)黑屏..
dcoder
2016-01-15 04:02:48 +08:00
干货,收藏了
loading
2016-01-15 06:56:11 +08:00
就几行字…楼主,不要随意消耗自己在 V2EX 的形象~
mengzhuo
2016-01-15 07:51:29 +08:00
@k9982874

同意啊…… LZ 你这坑得还不如 CloudFlare 随便拖出来的一篇技术博客
FifiLyu
2016-01-15 09:10:32 +08:00
Archlinux 已经推送更新源,修复这个 BUG 了。真快。
alexapollo
2016-01-15 09:51:13 +08:00
@k9982874
@loading
@mengzhuo
其实性能确实是几行字就可以讲完了
C10M 的关键点:更少的内存操作、更少的上下文切换
后台性能调优的关键工具: perf+flamegraph
完了。。。

想看文笔的还是去看技术博文吧,“干货”有时候寥寥几句话就够了。。
alexapollo
2016-01-15 09:56:34 +08:00
几位用手机看的,可以看下 prezi ,里面写的多
Andiry
2016-01-15 09:56:34 +08:00
@alexapollo 为什么是更少的内存操作,难道不是更少的网络 /磁盘 IO 么
louk78
2016-01-15 09:58:20 +08:00
更少的内存操作、更少的上下文切换
alexapollo
2016-01-15 10:07:52 +08:00
@Andiry C10K 的难点是 IO , C10M 的不是
C10M 的主要难点是内核做了太多,已经不堪重负
零拷贝可以解决一点问题,在不改变内核的运行模式下提升少许的性能
更彻底的解决方法是把内核的一部分工作剥离出来, offload 到用户态
outfocontrol
2016-01-15 10:12:29 +08:00
博文标题和内容不太符啊
firefox12
2016-01-15 10:13:00 +08:00
这种没有硬件环境配置,业务要求特点的 测试条件,测试方法,以及最终测试结果的 C10M 文章是没有意义。

后端业务 是那种业务, CPU 的负载有多重,简单的 echo 和要进行大量计算的业务完全是 2 个概念的程序。说到 c10M, 那么需要搞清楚 每个连接上的业务请求频率和大小,这点对性能的影响也是数量级别的,
业务本身的特点 也会完全影响性能,是大量短连接 不断的断开连接,还是长连接,这在链接对象的重用和侧重点上也是完全不一样的。

既然已经做到 c10M ,想必你也知道原生的 TCP / IP 堆栈无法良好的处理网络,需要改底层,但是我觉得在这方面继续深究下去,不如在对水平可扩展性的方面加以研究,一套业务层可以快速水平扩展的系统意义更大。 垂直扩展,到 C1M C2M ,的时候 CPU Mem 基本上负载已经很高。
以服务业务对象来看,如果到 tx 这样 7 亿用户 c1M, 也只需要 700 台主机就可以完全接受服务。当然你也知道在那种规模 700 和 70 没有什么意义,更大的瓶颈根本不在这里。更多只是一个理论值。
alexapollo
2016-01-15 10:25:36 +08:00
@firefox12 是的, C10M 还有它自己的问题,但值得指出的是,它的场景并不通常,相当于把整体的网络 IO 瓶颈抹除了,把问题简化到了内存和 CPU 的二元上。(纯粹的长连接问题于它而言没有多大意义)

而且,到了这种规模,才会有 700 和 70 的区别。
业务量级是万台的前提下,成本早已过亿,节省 10%成本也已经非常可观。
alexapollo
2016-01-15 10:27:18 +08:00
@firefox12 注意,这里讲的 C10M 指的是每秒 10M 包的能力,而非 10M 长连接,语境稍微有点不同。
10M 长连接只要有合适的机器就可以达到。
Andiry
2016-01-15 10:56:50 +08:00
@alexapollo 你说的这些在你的链接里完全没体现出来啊。那个 Prezi 里面清清楚楚有一页写着“更少的网络 /磁盘 IO ,更多的内存 IO ”,也没提到更少的上下文切换。总而言之,光有结论,没有数据支撑,谁知道你提到的这些因素里面哪些更重要呢?

举个简单的例子,现在的 CPU 执行用户态到内核态的切换只需要 100ns 不到。那么上下文切换在你的系统里到底占了多少 overhead ?把工作移到用户态可以提升多少性能?系统的瓶颈是在这里吗?还是在你所说的数据结构?还是在粗粒度锁? cache pollution 对系统性能有多大影响?无锁结构减少了锁争用但也带来了其他的问题和 overhead ,这些有量化比较过吗?

当然我相信你做的东西还是很有意思的,只不过写的这么简略对别人的帮助太少。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/250839

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX