【服务器】构建高性能Linux网络服务器

关键

高性能网络服务器的关键在于并发,如何高效的使用多核心的服务器,让多个线程并发处理程序。


并发方式

  • 基于时间的并行
  • 基于空间的并行,
  • 其他提法,


在计算机内部,最本质的是时间(CPU)空间(内存)这两种资源,各种并行的界限并没有那么明显。所谓基于时间的并行,有两只猫,共同看守一个大仓库,但一个工作,另一个睡觉,两者不同时工作。所谓基于空间的并行,将仓库分为两个部分,这样两只猫可以分别看守不同的部分,两只猫在工作不紧张的时候就可以睡觉。


网络并发程序优化

对于网络并发程序,可以从各个角度进行优化,先谈单个UDP的服务器,再谈单个TCP服务器,最后再谈服务器集群。


UDP服务器

典型的UDP服务器,例如DNS服务器,有一个缺点,只能通过其著名的服务端口发布给客户端,所有客户端的流量集中在单个端口上,采用单个线程读取端口的数据效率最高,在读套接字时采用任何形式的并发都会导致性能的下降,对于某些版本的内核,多线程收同一套接字将产生惊群现象,这主要是由操作系统的进程调度方式引起的。因而比较好的模式是单个线程收,然后再将数据分发到后台不同的处理线程,然而在接收线程和处理线程之间的的数据传递可能需要采用锁的方式,这样就导致程序性能下降(然而在采取分主的情境下,即单生产者和单消费者,可以采用无锁队列的方式来实现,这样就可以大幅提高程序性能),如果某种形式的锁,为了避免频繁的加锁解锁操作,比较好的改进是数据的批传递,这样可以数百倍的减少加解锁的调用,也可以大幅减少线程的上下文切换开销。

在数据的返回阶段,典型的做法是在处理线程处理完成后,再把数据传递到发送线程,再通过原来的接收套接字将数据返回。这样在数据的发送段,又遇到了单点瓶颈。与读套接字相同,在单个套接字上发送数据时,任何并发的写也会导致发送效率的下降,这样看来只好使用单个线程来进行发送。但如果我们有多个处理线程,它们将数据汇集到单个发送线程队列中,必然又遇到一个加锁解锁开销。虽然在同一个套接字上读和写是对系统而言是采用不同的缓冲区,收发性能可以互不影响,但我们为了极大的提升程序的性能,必须解决掉发送瓶颈。这就是采用地址重用,通过多个套接字并发的发送数据。如果客户端对服务器的发送端口有要求,我们必须把多个套按字绑定到同一地址和端口上多次,这样就产生了一个时序的问题。由于内核在实现时,可以接收数据的套按字,只有最后一次绑定的可以接收 。因此必须将发送套接字在接收套接字绑定前完成绑定,否则应用程序就收不到任何数据了。通过这样的处理,再进行某些热点的优化,UDP程序就可以做到收和发将千兆网卡跑满。当然如果你有更快的网卡,就可以以读写内存的速度来处理数据。


TCP服务器

TCP服务器分为两种

  • 短连接服务器如web服务器,
  • 一些特殊的长连接服务器。


对于单个服务器而言,再强大也没有一群服务器强大,这样就涉及到集群的部署和负载均衡策略,最后如果服务器过多,还需要解决服务器的动态加入和退出,以及服务器安全防护问题。

【服务器】构建高性能Linux网络服务器

时间: 2024-08-28 18:29:22

【服务器】构建高性能Linux网络服务器的相关文章

Linux 网络服务器构架实务之九

http://weibo.com/8YU0Ywey=4gmp/1001604185030049032300谜咸耐蹲霖LAO来匣毙险 http://weibo.com/e2YYug8Q=4Wup/1001604185030107770549此当毡页陀SEG垂矫幼从 http://weibo.com/04oAwG0G=08Ip/1001604185030183251592俟茄杉吧衣CET焊籽月傧 http://weibo.com/mkei8g8q=804p/100160418503011614189

关于Windows 数据库服务器更换为Linux 数据库服务器的前提条件

该前提条件就是: 请找应用软件开发商和运维人员确认: 第一:该Window数据库服务器 上是否安装有取数(或者说抽取数据)的应用软件.如果有,需要询问取数(或者说抽取数据)的应用软件在linux有无相应版本. 第二:该Window数据库服务器的硬件接口(USB,并口等等)是否接了加密狗之类的.如果有,需要询问应用软件开发商  加密狗在linux有无驱动程序.  此加密狗一般是应用软件的加密狗,用于防止应用软件的非授权使用.一般的应用软件都有技术上的授权机制(加密狗,序列号等等),防止你非法使用,

转:Linux网络IO并行化技术概览

转:http://codinginet.com/articles/view/201605-linux_net_parallel?simple=1&from=timeline&isappinstalled=0 Linux网络IO并行化技术概览 By mikewei at 2016-05-21 00:30 阅读(276) 过去的十年中互联网经历了爆发式的增长,这背后有什么技术平台起了最为关键的作用,我认为是Linux,即使在云计算流行的今天,它依然是最重要的一块基石.我们或许经常听到关于什么是

租用网络服务器怎么去选择

怎么租用网络服务器,租用网络服务器找谁?租用网络服务器,不选最贵的,只选最对的.租用方式灵活多样,各种解决方案 应有尽有,当然如果你的需求不是特殊的,一般选择常规的就完全可以满足,并且价格方面也是比较适中的,除了租用外,如果发展稳定了,也可以考虑自己买服务 器放到机房去托管,这也就叫做服务器托管. 怎么租用网络服务器流程 怎么租用网络服务器 1.选择一家正规的服务器机房提供商(可以让熟人推荐,或者自己从网络上搜索寻找筛查). 2.与服务器机房提供商进行沟通,主要是从机房的服务,服务器的配置,带宽

Linux VSFTP服务器详细配置

Linux VSFTP服务器 一.Linux FTP服务器分类: <1>wu-ftp <2>proftp=profession ftp <3>vsftp=very security ftp 配置文件: /etc/vsftpd/vsftpd.conf   //主配置文件 /etc/vsftpd.ftpusers      //被禁止登录FTP的用户文件 /etc/vsftpd.user_list     //允许登录FTP的用户文件 二.访问方式 <1>匿名登

Linux 网络编程系列教程

01.Linux网络编程1--网络协议入门 02.Linux网络编程2--无连接和面向连接协议的区别 03.Linux网络编程3--编程准备:字节序.地址转换 04.Linux网络编程4--UDP编程 05.Linux网络编程5--广播 06.Linux网络编程7--多播 08.Linux网络编程8--TCP编程 09.Linux网络编程9--并发服务器 10.Linux网络编程10--原始套接字能干什么? 11.Linux网络编程11--原始套接字编程 12.Linux网络编程12--原始套接

千呼万唤始出来!《高性能Linux服务器构建实战Ⅱ》出版在即

经过近2年的酝酿,几个月的修正,<高性能Linux服务器构建实战Ⅱ----系统安全.故障排查.自动化运维与集群架构>一书出版在即,马上就要与读者见面了. <高性能Linux服务器构建实战Ⅱ----系统安全.故障排查.自动化运维与集群架构>仍 然沿用了<高性能Linux服务器构建实战---运维监控.性能调优.集群应用>的写作特点:实战.实用.通俗.易懂的特点,而在内容上更加实战化,从运 维的多个方面以近似真实的环境介绍运维工作中的各个方方面面,与第一本书不同的是,此书新增

linux运维好书《高性能Linux服务器构建实战Ⅱ》已出版发售,附封面照!

经过近2年的酝酿,几个月的修正,<高性能Linux服务器构建实战Ⅱ----系统安全.故障排查.自动化运维与集群架构>一书出版在即,马上就要与读者见面了. <高性能Linux服务器构建实战Ⅱ----系统安全.故障排查.自动化运维与集群架构>仍 然沿用了<高性能Linux服务器构建实战---运维监控.性能调优.集群应用>的写作特点:实战.实用.通俗.易懂的特点,而在内容上更加实战化,从运 维的多个方面以近似真实的环境介绍运维工作中的各个方方面面,与第一本书不同的是,此书新增

《高性能Linux服务器构建实战Ⅱ》一书纠错汇总(10月17日更新)

以下是<高性能Linux服务器构建实战Ⅱ>一书的编写或者排版错误说明,如果发现有相关错误信息,我会陆续在这里发布出来,也希望大家能把自己发现的错误留言给我,谢谢读者们的支持!你们的支持是我完善此书的最大动力! 1.第30页 第二小段:2.安装chkrootkit 将 [[email protected] ~]# make sense 修改为: [[email protected] chkrootkit-0.50]# make sense 将 [[email protected] ~]# cd