先后查看了
haproxy
,
l7sw
和
lighttpd
的相关源码,无一例外,
他们一致认为多路复用是性能最好的服务器架构
。
事实也确实应该如此,进程的出现一方面就是为了保存任务的执行上下文从而简化应用程序设计,如果程序的逻辑结构不是很复杂,那么用整个进程控制块来保存执
行上下文未免有些大材小用,加上进程调度和其他的一些额外开销,程序设计上的高效很可能会被执行时的低效所抵消。代价也是有的:程序设计工作将更加具有挑
战性。
体系结构选定之后,我们就要考虑更加细节的部分,比如说用什么操作系统,用操作系统提供的那些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。
分享到:
相关推荐
本资源"Linux高性能服务器编程源码"包含的是springsnail负载均衡器的全部源代码,为我们提供了一个深入理解高性能服务器设计与实现的宝贵学习材料。 首先,让我们探讨一下高性能服务器的核心特性: 1. **并发处理*...
《Linux高性能服务器编程》这本书是针对那些希望深入理解并掌握Linux环境下服务器开发技术的...通过学习这本书,读者将能够从多个层面理解和实践Linux高性能服务器编程,从而设计和构建出更为高效、稳定的服务端应用。
《Linux高性能服务器编程》这本书是针对那些希望深入理解如何在Linux环境下构建高效、稳定服务器的开发者和运维人员的宝贵资源。书中的内容涵盖了广泛的Linux系统编程和服务器优化技术,旨在帮助读者提升系统的性能...
### Linux高性能服务器设计的核心知识点 #### 一、引言 在现代互联网服务中,服务器的性能至关重要。随着网络流量的激增以及用户需求的多样化,如何构建一个高性能、高可靠性的服务器成为了许多开发者关注的焦点。...
1. 高性能服务器程序的重要性 随着网络应用的迅猛发展,高性能服务器程序越来越凸显出其重要地位。传统的“一对一”处理模式,即一个客户占用一个线程,已经无法满足高并发和大流量的需求。因此,设计高性能服务器...
### 高性能服务器架构设计与调优 #### 一、高性能服务器架构设计概述 高性能服务器的设计与优化是一项复杂的工程活动,旨在确保服务器能够快速、稳定地处理大量数据和请求。设计过程中需要综合考虑多种因素,包括...
1. **多线程与并发**:高性能服务器通常利用多线程或异步I/O处理多个客户端请求。线程可以并行执行任务,提高系统资源利用率。在Linux中,可以使用pthread库创建和管理线程,同时要关注死锁、竞态条件和资源饥饿等...
《Linux高性能服务器编程》这本书是Linux服务器开发领域的权威指南,由具有丰富经验的Linux软件开发工程师游双倾力打造。本书旨在深入探讨如何利用Linux系统实现高性能的服务器应用,覆盖了网络协议、服务器编程的...
高性能服务器程序设计 高性能服务器程序设计是指在服务器端设计和实现高性能的服务器程序,以满足大规模用户群体和高并发访问的需求。高性能服务器程序设计需要考虑多方面的 factors,包括服务器模型、I/O策略、...
在高性能服务器的底层网络通信模块设计方面,文档中提出的设计方案在I/O完成端口的基础之上进行了封装,目标是创建一个具有高性能和可扩展性的通用网络通信模块。为了达到这样的目标,设计中采用了一些关键的系统...
高性能服务器的架构、选型、集群等
基于Linux构建Hadoop高性能服务器集群 本文档介绍了如何在Linux下构建高性能的Hadoop服务器集群,以满足大数据时代对高性能计算的需求。文章首先介绍了Hadoop框架的重要性,然后详细介绍了如何在Linux下搭建Hadoop...
而Linux高性能服务器编程是构建高效、可扩展服务的关键技术。这份资料集合涵盖了Linux高性能服务器编程的清晰PDF教程和配套源码,旨在帮助开发者深入理解并掌握这一领域的核心技术。同时,还附带了《Effective C++》...
通过对这些源码的深入学习和实践,开发者可以掌握Linux高性能服务器设计的核心理念和技术,从而提升自己的系统级编程能力。同时,这也将有助于理解大型分布式系统的架构和工作原理,为成为高级系统工程师奠定坚实...
在Linux平台上进行高性能服务器编程是IT领域中的一个重要课题,它涉及到网络编程、多线程、内存管理、I/O模型优化等多个方面。C/C++作为底层系统编程的主要语言,提供了高效且灵活的编程能力,使得开发者能够更深入...
Nginx是一款高性能的Web服务器,它以其反向代理、负载均衡、静态文件处理和高效非阻塞I/O模型而闻名。Nginx的设计理念是轻量级、高并发,因此在处理高流量网站时表现出色。以下是Nginx的一些核心知识点: 1. **模块...
以上内容只是高并发高性能服务器设计的一部分,实际项目中还需要结合业务需求,综合运用多种技术手段,不断优化和调整,以达到最佳性能。通过研究提供的源码,你可以深入理解这些技术的实现细节,并将其应用于自己的...
在本篇文献中,作者杨玲提出了高性能网络游戏服务器的架构设计,这一设计针对游戏服务器的物理结构,一般可分为多个区域(区),每个区会包含多个游戏组(组)。游戏组内包括多种不同功能的服务器,例如登录网关...
《Nginx高性能Web服务器》是一本深入探讨Nginx技术的权威著作,它涵盖了Nginx的基础知识、配置技巧以及优化策略。Nginx,以其高性能、轻量级和反向代理能力著称,是现代互联网架构中的关键组件。在本资料中,我们将...