资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,*,高级效劳器设计和实现3架构、手段与工具箱,余锋(mryufenggmail ),2021-06-08,脚本,语言,Lua,Python,工程文件,ACE,的,mpc,Gnu autoconf,内核,应用,Tux,Lvs,Iptable,内核模,块,内核模,块,用,户空间程序,Netlink,Tcpsplice,测试工具,Tsung,Loadrunner,Luasocket,收集性能数据,纯文本,Gnuplot,完善的日志系,统,方便,诊断,便于,观察系统运行状态,log4X,常用工具,Wireshark,Hping2,Socat,Nc,Strace,Systemtap,Lsof,webbench,测试,Xunit,单元测试,覆盖,测试,压力测试,除,测试之外的手段,代,码,Profile,外部程序,驱动,硬件配置,多核,32,核?,64,位机器,大内存,快速,IO,健康,监控,SNMP,CSV,HTML,DUMP,负载均衡Load Balance,基于特定效劳器软件的负载均衡,基于DNS的负载均衡,反向代理负载均衡,基于NAT的负载均衡技术,操作系,统微调,SystemTap,协议栈微调,内存子系,统微调,进程流水线,Cgi,思路,Fastcgi,思路,形成,pipe line,容易整合各种,语言实现的系统,多路,变换成单路,Ajp13思路,极大简化效劳端编程,集群,提高可用性,硬件,Big IP F5,NetScaler,软件,Haproxy,LVS,内存数据,库,Extremedb,Memcached,mnesia,TIPS1,操作系统采用内核,不仅因为它的高性能,更因为它大开源这并不是说其他的UNIX或者是BSD衍生物不开源给程序设计带来的便利,我们甚至可以把效劳做到内核空间。,多路复用采用epoll的“电平触发(Level Triggered)模式,必要时可以采用“边缘触发(Edge Triggered),但要注意防止数据停滞。,为防止数据拷贝可以采用sendfile系统调用发送小文件,或者是文件的小局部,注意防止sendfile因磁盘IO而导致的阻塞。,如果效劳操作设计大量磁盘IO操作,应选用Linux内核提供的异步IO机制,其对应的用户空间库为libaio,注意:这里提到异步IO库并非目前glibc中附带的异步IO实现。,如果同时有多个数据需要传输,采用writev/readv来减少系统调用所带来的上下文切换开销,如果数据要写到网络套接字文件描述符,这也能在一定程度上防止网络上出现比较小帧,为此,还可以有选择地开启TCP_CORK选项。,实现自己的内存管理,比方说缓存数据,复用常用数据结构等。,用多线程替代多进程,线程库当然选择nptl。,防止进程/线程间非必要的同步,保持互斥区的短小。,TIPS2,目前SMP系统和多核心CPU比较常见,如果还是仅采用单进程线程的多路复用模型,那么同一时间将只有一个CPU为这个进程线程效劳,并不能充分发挥CPU的计算能力,所以需要至少CPUCPU核心数目个进程线程来分担系统负担。有一个变通的解决方案:不用修改源码,在效劳器上运行两个效劳程序的实例,当然这个时候效劳端口应该是不同的,然后在其前端放置负载均衡器将流量和连接平均分配到两个效劳端口,可以简单的通过DNAT来实现负载均衡。其实,这个时候我们已经把多CPU或者是多核系统看成了多个系统组成,为了提高效劳器的性能,单纯的依靠提高单个效劳器的处理能力似乎不能奏效,况且配置越高的效劳器花销也就越高,为此人们经常采用效劳器集群的方式,通过把计算尽可能地分配到相比照较廉价的机器上单独完成,籍此来提升效劳器的整体性能,事实证明,这种体系结构不仅是切实可行的,而且还能提高效劳器的可用性,容错能力也较强。在网络效劳器方面,Linux内核中的由国人章文嵩先生设计的IP层负载均衡解决方案LVS比较有名,还有就是工作于应用层的haproxy和刚刚起步的l7sw。,相关文档,tuning_linux.pdf,C10k,Erlang,Q&A,
展开阅读全文