`
huangxx
  • 浏览: 321667 次
  • 来自: ...
社区版块
存档分类
最新评论

高性能服务器设计 - zt

阅读更多

先后查看了haproxyl7swlighttpd的 相关源码,无一例外,他们一致认为多路复用是性能最好的服务器架构。事实也确实应该如此,进程的出现一方面就是为了保存任务的执行上下文从而简化应用程序 设计,如果程序的逻辑结构不是很复杂,那么用整个进程控制块来保存执行上下文未免有些大材小用,加上进程调度和其他的一些额外开销,程序设计上的高效很可 能会被执行时的低效所抵消。代价也是有的:程序设计工作将更加具有挑战性。

体系结构选定之后,我们就要考虑更加细节的部分,比如说用什么操作系统,用操作系统提供的那些API。在这方面,前辈们已经做过很多,我们只需要简单的“拿来”即可,如果再去枉费唇舌,简直就是浪费时间,图财害命。
High-Performance Server Architecture从根本上分析了导致服务器低效的罪魁祸首:数据拷贝、(用户和内核)上下文切换、内存申请(管理)和锁竞争;The C10K Problem列举并分析了UNIX、Linux甚至是部分Windows为提高服务器性能而设计的一些系统调用接口,这篇文档的难能可贵之处还在于它一致保持更新;Benchmarking BSD and Linux更是通过实测数据用图表的形式把BSD和Linux的相关系统调用的性能直观地陈列在我们眼前,结果还是令人激动的:Linux 2.6的相关系统调用的时间复杂度竟然是O(1)。

简单的总结如下:

  1. 操作系统采用Linux 2.6.x内核,不仅因为它的高性能,更因为它大开源(这并不是说其他的UNIX或者是BSD衍生物不开源)给程序设计带来的便利,我们甚至可以把服务做到内核空间。
  2. 多路复用采用epoll的“电平触发”(Level Triggered)模式,必要时可以采用“边缘触发”(Edge Triggered),但要注意防止数据停滞。
  3. 为避免数据拷贝可以采用sendfile系统调用发送小文件,或者是文件的小部分,注意避免sendfile因磁盘IO而导致的阻塞。
  4. 如果服务操作设计大量磁盘IO操作,应选用Linux内核提供的异步IO机制,其对应的用户空间库为libaio,注意:这里提到异步IO库并非目前glibc中附带的异步IO实现。
  5. 如果同时有多个数据需要传输,采用writev/readv来减少系统调用所带来的上下文切换开销,如果数据要写到网络套接字文件描述符,这也能在一定程度上防止网络上出现比较小帧,为此,还可以有选择地开启TCP_CORK选项。
  6. 实现自己的内存管理,比如说缓存数据,复用常用数据结构等。
  7. 用多线程替代多进程,线程库当然选择nptl。
  8. 避免进程/线程间非必要的同步,保持互斥区的短小。
上面这些琐碎的细节在ESR看来可能都是过早优化,他 可能又会建议我们等待硬件的升级。哈哈,提醒还是不无道理的,算法的设计部分,我们更要下大力气,因地制宜地降低算法的时间复杂度。为什么不提空间复杂度 呢?内存的价格还是相对低廉吧,不过还是不要忘记现在的计算机瓶颈多在内存的访问。

有一点需要提醒一下,目前SMP系统和多核心CPU比 较常见,如果还是仅采用单进程(线程)的多路复用模型,那么同一时间将只有一个CPU为这个进程(线程)服务,并不能充分发挥CPU的计算能力,所以需要 至少CPU(CPU核心)数目个进程(线程)来分担系统负担。有一个变通的解决方案:不用修改源码,在服务器上运行两个服务程序的实例,当然这个时候服务 端口应该是不同的,然后在其前端放置负载均衡器将流量和连接平均分配到两个服务端口,可以简单的通过DNAT来实现负载均衡。其实,这个时候我们已经把多 CPU或者是多核系统看成了多个系统组成的集群。

为了提高服务器的性能,单纯的依靠提高单个服务器的处理能力似乎不能奏效,况且配置越高 的服务器花销也就越高,为此人们经常采用服务器集群的方式,通过把计算尽可能地分配到相对比较廉价的机器上单独完成,籍此来提升服务器的整体性能,事实证 明,这种体系结构不仅是切实可行的,而且还能提高服务器的可用性,容错能力也较强。在网络服务器方面,Linux内核中的由国人
章文嵩先生设计的IP层负载均衡解决方案LVS比较有名,还有就是工作于应用层的haproxy和刚刚起步的l7sw。
 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2117021

分享到:
评论

相关推荐

    精品专题(2021-2022年收藏)RAC数据库集群服务器系统性能瓶颈分析zt.doc

    本专题主要关注RAC数据库集群服务器系统的性能瓶颈分析,以下将详细介绍其中的关键知识点。 首先,CPU 和 wait time 的调节是性能优化的基础。在RAC环境中,分析CPU time 和 wait time 的比例至关重要。wait time ...

    Sybase MobiLink服务器管理中文说明PDF

    - **MobiLink 性能**:为了确保高效率的同步,需要关注一些关键性能指标。 #### 五、MobiLink 性能 - **性能提示**:提供了一些实用的建议来优化 MobiLink 的性能。 - **影响 MobiLink 性能的关键因素**:包括...

    STD3NK80ZT4-VB场效应管一款N沟道TO252封装的晶体管

    总体而言,STD3NK80ZT4-VB是一款高性能的N沟道MOSFET,适用于要求高效、低损耗的电源管理应用。其优良的电气特性和热特性使其成为各种电力电子设计的理想选择。用户可以联系供应商VBsemi获取更多详细信息或技术支持...

    jsp Servlet基础入门学习教程(ZT).txt

    综上所述,JSP和Servlet为开发者提供了构建动态Web应用的强大工具,通过合理的设计和开发,可以创建高度可扩展、高性能和安全的Web应用。学习这些技术不仅需要理论知识,还需要实践操作,通过实际项目来加深理解。

    Citrix桌面虚拟化项目手册-SQL数据库规划和部署.pdf

    SQL-ZT、SQL-JX和SQL-JZ分别代表主体数据库、镜像数据库和见证数据库的安装配置步骤。这些步骤通常包括安装SQL Server、创建数据库、配置镜像伙伴关系、设置安全性策略以及进行故障转移测试。 最后,XenDesktop...

    电子功用-无功耗不间断电源

    这得益于快速响应的控制技术和高性能的储能元件,如超级电容或高能密度电池。 四、优势 1. 高可靠性:零转换时间降低了对负载设备的影响,尤其适用于对电源质量敏感的设备,如服务器、医疗设备等。 2. 节能环保:...

    apache-mina-2.0.16

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发服务器端和客户端的网络应用。标题"apache-mina-2.0.16"表明我们讨论的是...

    安装大全oracle_nt_双机ha

    - **性能优化**:在确保高可用性的同时,也要考虑系统的性能和资源利用率。 - **监控和维护**:定期检查系统状态,确保所有组件正常运行,并对可能出现的问题进行预防性维护。 了解和掌握这些文件中的内容,对于...

    ORACLE 10G OCA 042 笔记(zt)

    7. **高可用性与容错**:Oracle 10g引入了Real Application Clusters(RAC)技术,允许多台服务器共享一个数据库,提供高可用性和负载均衡。另外,Standby Database和Data Guard可以实现故障切换,保证业务连续性。 ...

    毕业设计bbs论坛系统论文

    它支持ACID事务、SQL标准,具有高性能、高可靠性和易用性,是构建论坛系统常用的数据存储解决方案。 5. **Struts框架**:Struts是基于MVC(Model-View-Controller)设计模式的Java Web开发框架,主要用于控制应用...

    Open Accelerator Infrastructure Project Overview(OAM+UBB)

    OAM+UBB是Open Compute Project (OCP) 下的一个重要子项目,旨在构建开放的加速器基础设施,以快速适应人工智能(AI)和高性能计算(HPC)应用中的新兴产品。该项目始于2019年3月,作为OCP服务器项目的一部分,目标...

    基于JavaWeb的运动与健康管理系统毕业论文

    3. **Mysql数据库**:MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),具有高性能、高稳定性的特点,适用于各种规模的应用场景。 4. **JDBC技术**:Java Database Connectivity (JDBC) 是Java中用于访问...

    apache-sshd-1.6.0

    这个"apache-sshd-1.6.0"版本是项目的其中一个稳定发行版,提供了丰富的功能和改进,旨在提高安全性、性能以及与SSH服务器的兼容性。 SSH(Secure SHell)是一种网络协议,用于加密网络通信,常用于在不安全的网络...

    基于RTP的移动探测机器人主从式视频监控系统.pdf

    在机器人视频监控系统的技术细节中,文中提到使用4=ZT系统作为主服务器,而移动终端作为客户端,实现了多终端视频实时显示和机器人控制功能。系统测试表明,视频传输的延时和质量受主服务器性能影响较大,但总体上...

    小白兔电视

    【小白兔电视】是一款专为高校学生设计的电视应用,尤其在IPv6网络环境下表现出色。它的一大特点是观看电视节目时不消耗流量,这对于在教育网内使用的学生来说是一大福音,因为教育网通常拥有丰富的资源且速度较快。...

    Web_拼车网

    ASP.NET是由微软推出的服务器端Web应用程序框架,用于构建高性能、可维护的动态网站。它提供了丰富的控件和功能,简化了Web应用的开发过程,支持多种编程语言,如C#、VB.NET等。在这个项目中,开发者可能使用了ASP...

    MySQL查看目前运行状况的两种方法

    总结来说,监控MySQL服务器的运行状况对于保证系统的稳定性和性能至关重要。无论是简单的命令行检查,还是使用图形界面工具,或者是编写自动化脚本,都是管理员维护数据库健康状态的有效手段。在实际操作中,可以...

    java操作excel导入数据库

    这不仅适用于Java开发者学习相关技术,也对那些希望了解如何高效处理大量数据并进行存储的人来说具有很高的实用价值。 #### 二、关键技术点 ##### 1. 使用`OleDb`连接Excel ```java // 连接字符串设置 String ...

Global site tag (gtag.js) - Google Analytics