1
回答
高性能接入 sever 开发优化
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

从事高性能后台服务的开发2年,做大的支持是17w/s的访问100%cpu。这个数据是前几天在一个Server终极测试中得出的。其实后台服务器的反映快慢取决于其服务的类型。几个数据是这样的。

内存访问:300w/s.即us级别。访问一次300ns。

sock访问us级别。

磁盘访问ms级别。包括数据库。

如果只靠访问内存,你的Server应该处理30W/s的访问才能算达到要求。这个后续主要受限于fd的通知机制和高并发能力的epoll框架。当在网络层做到内核级优化,并且尽可能去掉内核中的锁,应该提高到40w/s甚至50w/s的访问。

高性能接入的关键是网络接入的性能和高效的通知机制。高性能对的网络处理必须的借个原则:

1.绝不能在网络处理部分加锁。

2.采用单进程的比共享的所效率提升3倍,加锁使网络吞吐能力大幅下降。

3.使用内存暂存数据,内存的管理必需预先分配好,寻找任一块的内存做到O(0).内存管理算法,这里大家去研究。我所处理的是分布式系统的高并发接入 机,其中还涉及到后端的cache服务器的路由等。这个业务是server的逻辑,这个一块路由的设计也是有讲究的。要想最短的路由时间,必须设计可靠的 内存访问和O(0)的路由查找算法。这一方面相信大家也应该懂了。

4.共享内存的访问跟内存访问一样。不过实际生产环境中往往需要对共享内存加锁。加锁使用信号量来实现。现在知道posix那一套多么牛X了。进程之间的 通信,优选posix。经过测试表明,system V的接口比posix接口慢50%以上。显然现代的更先进。

5.去掉代码中的STL的链表,vector等操作,采用代替方案。对性能有非常大的提升,对减轻CPU消耗贡献巨大。良好的程序架构是减少bug的最好 途径。代码需要反复检查。在分布式系统的访问都是多状态的。状态机的各部分处理是核心。需要对每一次请求做出最少的代价,需要很多脑筋可动的;包括代码的 减少和函数的调用。很多系统调用代码,自己采用简单的方法实现。

6.减少时间函数的待用。缓存系统时间是一个非常好的优化,将时间用于整个处理的流程中几倍可以将cpu降低10个百分点。减少了系统空间和用户空间的调 用。有兴趣可以看看内核代码。linux取的时间是不准确的,取时间需要加锁。进入内核空间,去读取cmos的时钟数据。每次更新系统时间都是原子性的操 作。

文章出处:http://software.intel.com/zh-cn/blogs/2011/09/28/sever/
<无标签>
举报
IBMdW
发帖于6年前 1回/181阅
顶部