高性能接入sever开发优化

       从事高性能后台服务的开发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的时钟数据。每次更新系统时间都是原子性的操作。

猜你喜欢

转载自blog.csdn.net/kingsleer/article/details/6726394
今日推荐