我的高性能网络服务器总结

引言:

       本文是本人学习网络编程以来第一次系统的总结《高性能网络服务器》这一高深的论题,可能所写的地方存在诸多问题,欢迎大家留言指点、探讨。随着我的学习深入我也会不断完善本文。

一、什么是高性能服务器

如果要写出高性能的网络服务器,那必须就得对高性能的概念有一定的了解,并指导主要影响服务器高性能的主要因素。所谓高效服务器就是能够同时(宏观上)处理巨大数量的链接IO数据处理。对于影响服务器性能的因素,让我从一个个服务器设计方案中慢慢挖掘出来。

1、最简单的网络服务器模式。

可能我们学习网络通信时候写的第一个最简单的服务器的模型都是一个while循环中不断的accpet链接,然后读取链接上的数据然后再将服务器结果发送回去然后关闭链接。

对于这种服务器模型其特点是,并非能力弱,只能处理短连接。在这里面影响性能的主要是socket阻塞操作、业务逻辑所占用的时间。

2、升级服务器一。

为了解决上面服务器模型性能上面的缺点,也许第一时间想到的就是用多线程解决。设计结构就是用若干个的线程负责accpet,然后每得到一个链接就创建一个线程服务,一般这个线程里面就是一个死循环不断等待连接上的数据到来然后处理。


对于这种服务器模型,解决了方案一中并发处理和只能处理短连接的问题,但其主要缺点也很突出,首先如果链接一多那么就会存在大量的线程,那么我们的服务器将会存在大量线程的切换消耗,同时线程的创建也是主要消耗性能的关键因素。那么我们就要想办法解决这个线程太多和线程创建所占的时间。

3、升级网络服务器二。

为了解决方案二中的问题,我们可以使用一个socket提供的事件模型比如 select、epoll、iocp 等。假设在方案三中我们使用iocp作为我们的socket事件模型,再加上多线程实现我们的服务器。那么其设计结构为:

用一个线程专门专门accpet,然后创建若干线程循环监视iocp事件队列,创建若干工作线程处理数据业务逻辑。当我们有新链接来临的时候,将建立链接的socket绑定到iocp端口上(告诉iocp关心这个socket的事件)并向iocp投递recv事件让iocp等待socket上的recv事件。当iocp等待到了关心socket的recv事件就会在监视iocp事件队列的线程中反馈然后我们将socket和读取到的数据打包成一个io任务给工作线程,让其在合适的时候将io数据处理完成,如果需要反馈则直接向iocp投递socket的send事件。


往往来说一般性能的服务器用方案三的模式都足以处理。在这个模型中我们性能影响的因素有,逻辑处理时间、多线程共享资源互斥访问消耗的时间。虽然看上去本方案性能不错了,但是如果遇到性能要求更高,并非超大,逻辑复杂的服务器还是难以招架,因为单服务器的cpu执行效率有限,单服务器能够处理的并发socket链接有限。

4、升级服务器三(本人没有写过,只是了解过,看过类似的源码)。

到了方案三我们已经发掘出了服务器的比较可观的性能。但是如果我们还有更高的需求。那么我们就得用到分布式服务器集群的方案了。这种方案的设计结构为: 用若干服务器做网关服务器(网关服务器只负责链接建立,和数据分发),用若干服务器做逻辑服务器(逻辑服务器负责处理服务器的业务逻辑)、用若干服务器做数据服务器(专门负责服务器数据库中数据的读写,如果对速度要求很高的话可能还要用到key-value内存数据库(个人用语))。这些服务器间通过局域网络的socket网络通信进行通信。


二、到此影响高性能的因素我归纳如下:

1、使用阻塞的socket操作。

2、复杂的业务逻辑,导致逻辑处理时间过长。

3、庞大的数据库导致读写数据库慢。

4、计算机cpu利用率和cpu性能有限性。

5、如果存在多线程,就有线程切换,线程创建,线程之间共享资源访问所花费的时间。


三、解决影响性能问题的方案。

通过上面的分析我们得出了影响服务器性能的因素,并在几个服务器模型中解决的一些因素,现在归纳解决方案如下.

1、通过使用系统提供的socket 事件模型解决socket阻塞操作的问题。

2、通过服务器集群,多个逻辑服务器减少业务逻辑复杂导致逻辑处理时间长导致的大量排队逻辑任务。

3、通过服务器集群,key-value内存数据等方案解决数据库读写慢的问题。

4、通过多线程充分利cpu的多核性能解决cpu利用率问题,服务器集群解决cpu性能有限的问题。

5、通过线程池解决线程创建导致的消耗。


四、服务器性能其它问题:

1、使用内存池解决服务器长期运行内存碎片问题和提升服务器的稳定性。

未完待完善。。。。。。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
整理的高性能高并发服务器架构文章,内容预览:  初创网站与开源软件 6  谈谈大型高负载网站服务器的优化心得! 8  Lighttpd+Squid+Apache搭建高效率Web服务器 9  浏览量比较大的网站应该从哪几个方面入手? 17  用负载均衡技术建设高负载站点 20  大型网站的架构设计问题 25  开源平台的高并发集群思考 26  大型、高负载网站架构和应用初探 时间:30-45分钟 27  说说大型高并发高负载网站的系统架构 28  mixi技术架构 51 mixi.jp:使用开源软件搭建的可扩展SNS网站 51 总概关键点: 51 1,Mysql 切分,采用Innodb运行 52 2,动态Cache 服务器 -- 52 美国Facebok.com,中国Yeejee.com,日本mixi.jp均采用开源分布式缓存服务器Memcache 52 3,图片缓存和加 52  memcached+squid+apache deflate解决网站大访问量问题 52  FeedBurner:基于MySQL和JAVA的可扩展Web应用 53  YouTube 的架构扩展 55  了解一下 Technorati 的后台数据库架构 57  Myspace架构历程 58  eBay 的数据量 64  eBay 的应用服务器规模 67  eBay 的数据库分布扩展架构 68  从LiveJournal后台发展看大规模网站性能优化方法 70 一、LiveJournal发展历程 70 二、LiveJournal架构现状概况 70 三、从LiveJournal发展中学习 71 1、一台服务器 71 2、两台服务器 72 3、四台服务器 73 4、五台服务器 73 5、更多服务器 74 6、现在我们在哪里: 75 7、现在我们在哪里 78 8、现在我们在哪里 79 9、缓存 80 10、Web访问负载均衡 80 11、MogileFS 81  Craigslist 的数据库架构 81  Second Life 的数据拾零 82  eBay架构的思想金矿 84  一天十亿次的访问-eBay架构(一) 85  七种缓存使用武器 为网站应用和访问加速发布时间: 92  可缓存的CMS系统设计 93  开发大型高负载类网站应用的几个要点 105  Memcached和Lucene笔记 110  使用开源软件,设计高性能可扩展网站 110  面向高负载的架构Lighttpd+PHP(FastCGI)+Memcached+Squid 113  思考高并发高负载网站的系统架构 113  "我在SOHU这几年做的一些门户级别的程序系统(C/C++开发)" 115  中国顶级门户网站架构分析1 116  中国顶级门户网站架构分析 2 118  服务器的大用户量的承载方案 120  YouTube Scalability Talk 121  High Performance Web Sites by Nate Koechley 123 One dozen rules for faster pages 123 Why talk about performance? 123 Case Studies 124 Conclusion 124  Rules for High Performance Web Sites 124  对于应用高并发,DB千万级数量该如何设计系统哪? 125  高性能服务器设计 130  优势与应用:再谈CDN镜像加速技术 131  除了程序设计优化,zend+ eacc(memcached)外,有什么办法能提高服务器的负载能力呢? 135  如何规划您的大型JAVA多并发服务器程序 139  如何架构一个“Just so so”的网站? 148  最便宜的高负载网站架构 152  负载均衡技术全攻略 154  海量数据处理分析 164  一个很有意义的SQL的优化过程(一个电子化支局中的大数据量的统计SQL) 166  如何优化大数据量模糊查询(架构,数据库设置,SQL..) 168  求助:海量数据处理方法 169 # re: 求助:海量数据处理方法 回复 更多评论 169  海量数据库查询方略 169  SQL Server 2005对海量数据处理 170  分表处理设计思想和实现 174  Linux系统高负载 MySQL数据库彻底优化(1) 179  大型数据库的设计与编程技巧 本人最近开发一个访问统计系统,日志非常的大,都保存在数据库里面。 我现在按照常规的设计方法对表进行设计,已经出现了查询非常缓慢地情形。 大家对于这种情况如何来设计数据库呢?把一个表分成多个表么?那么查询和插入数据库又有什么技巧呢? 谢谢,村里面的兄弟们! 183  方案探讨,关于工程中数据库的问题. 184  web软件设计时考虑你的性能解决方案 190  大型Java Web系统服务器选型问题探讨 193  高并发高流量网站架构 210 1.1 互联网的发展 210 1.2 互联网网站建设的新趋势 210 1.3 新浪播客的简介 211 2.1 镜像网站技术 211 2.2 CDN内容分发网络 213 2.3 应用层分布式设计 214 2.4 网络层架构小结 214 3.1 第四层交换简介 214 3.2 硬件实现 215 3.3 软件实现 215  网站架构的高性能和可扩展性 233  资料收集:高并发 高性能 高扩展性 Web 2.0 站点架构设计及优化策略 243  CommunityServer性能问题浅析 250 鸡肋式的多站点支持 250 内容数据的集中式存储 250 过于依赖缓存 250 CCS的雪上加霜 250 如何解决? 251  Digg PHP's Scalability and Performance 251  YouTube Architecture 253 Information Sources 254 Platform 254 What's Inside? 254 The Stats 254 Recipe for handling rapid growth 255 Web Servers 255 Video Serving 256 Serving Video Key Points 257 Serving Thumbnails 257 Databases 258 Data Center Strategy 259 Lessons Learned 260 1. Jesse • Comments (78) • April 10th 261 Library 266 Friendster Architecture 273 Information Sources 274 Platform 274 What's Inside? 274 Lessons Learned 274  Feedblendr Architecture - Using EC2 to Scale 275 The Platform 276 The Stats 276 The Architecture 276 Lesson Learned 277 Related Articles 278 Comments 279 Re: Feedblendr Architecture - Using EC2 to Scale 279 Re: Feedblendr Architecture - Using EC2 to Scale 279 Re: Feedblendr Architecture - Using EC2 to Scale 280  PlentyOfFish Architecture 281 Information Sources 282 The Platform 282 The Stats 282 What's Inside 283 Lessons Learned 286  Wikimedia architecture 288 Information Sources 288 Platform 288 The Stats 289 The Architecture 289 Lessons Learned 291  Scaling Early Stage Startups 292 Information Sources 293 The Platform 293 The Architecture 293 Lessons Learned 294  Database parallelism choices greatly impact scalability 295  Introduction to Distributed System Design 297 Table of Contents 297 Audience and Pre-Requisites 298 The Basics 298 So How Is It Done? 301 Remote Procedure Calls 305 Some Distributed Design Principles 307 Exercises 308 References 309  Flickr Architecture 309 Information Sources 309 Platform 310 The Stats 310 The Architecture 311 Lessons Learned 316 Comments 318 How to store images? 318 RE: How to store images? 318  Amazon Architecture 319 Information Sources 319 Platform 320 The Stats 320 The Architecture 320 Lessons Learned 324 Comments 329 Jeff.. Bazos? 329 Werner Vogels, the CTO of 329 Re: Amazon Architecture 330 Re: Amazon Architecture 330 Re: Amazon Architecture 330 It's WSDL 330 Re: It's WSDL 331 Re: Amazon Architecture 331  Scaling Twitter: Making Twitter 10000 Percent Faster 331 Information Sources 332 The Platform 332 The Stats 333 The Architecture 333 L

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值