杨建:网站加速--服务器编写篇 (下)

news/2024/5/9 11:32:51/文章来源:https://blog.csdn.net/lcj8/article/details/3987573

 

--提升性能的同时为你节约10倍以上成本
From: http://blog.sina.com.cn/iyangjian


七,NBA js直播的发展历程

这一节就谈下这个项目发展过程中所遇到的瓶颈,以及如何解决的。
应该是06年吧,当时NBA 比赛比较火,woocall负责高速模式图文直播放,普通模式和动态比分数据等都放在一群破服务器上,大概有十几20台,这些破服务器有些扛不住了。

因为第二天有一场比较大的比赛,我想埋连接在线上测一下效果,于是连夜把财经实时行情server改写成了NBA JS直播server. 当时有两台 Intel(R) Xeon(TM) CPU 3.00GHz 双cpu的服务器,在F5后面。先启用一台服务器,比赛开始前静悄悄的,不一会,迅速串到了20w connections,再往上增长,就慢的几乎不可访问, ethtool eth0  , Speed: 100Mb/s, 网卡出口带宽跑满了(那时候支持千兆的交换机还不多)。迅速把另一台服务器启用,后来又卡了,好象是F5处理能力不足。后来升级服务器出口带宽为1G,当然这需要交换机支持千兆口,更换网线,服务器也从F5后面转移出来,通过DNS直接轮询。

后来又测试了几次,等到新申请的Intel(R) Xeon(R) CPU 5120  @ 1.86GHz,双核双cpu服务器一到,就开始大规模部署,比赛更火了,不巧的是行情也火了起来,我的财经实时图片系统和行情系统也是带宽杀手,同时我也成了服务器杀手,到处蹭服务器。IDC带宽出口开始告急,我每天开始关注哪个机房还有富余带宽,有的机房被我们跑的太满,开始有人劝我们迁移到别的机房。后来 yangguang4劝我支持gzip输出,我觉得动态压缩太耗费cpu,不知道预先压缩是否可行,写个程序试了一把,没问题,于是NBA JS直播的的带宽一下子被砍掉了70%,而且没浪费一点我们的cpu,赚大了。

之后的两年里NBA JS服务一直很稳定,我几乎都没怎么看过,2007年的一场体育赛事中,单机达到25w+ connections,2.86w req/s ,cpu空闲30% ,见下图 (2CPU*2Core 1.86GHZ服务器) 。直到奥运期间,有场赛事,woocall瞬间仍给我近200w connections,网通的服务器被秒杀了1/3。这其实就是善意的DDOS攻击,这些用户如果正常进入是没有问题了,瞬间扔过来,超出了操作系统极限,系统挂掉了,我的服务也over了。在调整内核参数里有讲,怎么修改内核参数提高服务器抗秒杀能力,但是不能杜绝。

下图为2007年一场比赛时,单机25w+ connections,2.86w req/s,的状态(2CPU*2Core 1.86GHZ):


奥运结束后,我对服务器程序和架构做了调整,砍掉了2/3的服务器。但我没留意的是,同样connections,实际http请求增加了一倍,因为新上了一个flash方位图,里面增加了3个js,增加就增加吧,既然砍了就不准备再恢复了。但是服务在2CPU*4Core centos5 32bit上的表现却让我很失望,跑不过2CPU*2Core centos4 32bit 。我开始怀疑程序升级的时候是不是有什么地方没考虑到,开始调程序,折腾几天没有结果,症状是单机支撑12.5万时候没有任何异常,内存使用1%左右,总cpu使用了5%左右,load 0.5,但是再增加0.1w用户server肯定崩溃,每次都是相同的表现,我知道在什么地方卡住了。后来看了下dmesg,才恍然大悟,我是被32bit centos 5的内核暗杀的(Out of memory: Killed process xxx)。

32位机上LowFree一般是会变化的(cat /proc/meminfo  | grep LowFree),最大不能超过880M(这个值不能改变除非用hugemem内核),在centos4 上有内核参数vm.lower_zone_protection(单位是M)来调节LowFree,默认vm.lower_zone_protection=0 ,LowFree=16M,但是在centos5上这个参数貌似被取消了,改变不了。从使用经验来看,也就是你能申请16M~880M这么大的连续内存,但是16M以上不保证你能申请的到。centos4用到64M以上都没什么问题,centos5 用40M+ 就被OOM Killer给毙了。

本周开始使用64bit centos5.2进行测试,迁移很顺利,没有修改一行代码,他们把整个16G物理内存都作为LowFree,这下可以随便挥霍了(尽管如此我还是会节约的),前几天的比赛,这个64bit机跑了18w connections,很安静,未见异常,等有大比赛再检验下,没问题的话就开始大规模使用64bit系统。

目前看来,如果成功迁移64bit系统似乎可以高枕无忧了,但是我还是有两个忧虑:

1,再突然甩200w connections给我,我不敢保证能扛的住,因为现在服务器数量消减太多,需要yangguang4那边做策略调整,在比赛结束后,平滑的把用户丢给我,这应该有个持续过程,而不是一秒内的瞬间。

2,我猜这个系统,单机支撑到30w conections的时候会遇到瓶颈,因为网卡的中断集中在cpu0上,没有均衡开。我们有硬件解决方案已经实现(每个服务器会多2000RMB开销)我只部署了一台,但是软的还没实现,寄希望于xiaodong2 。

补充:
昨天的比赛中,一台64bit机,单机支撑30w+ connections,cpu0空闲率只剩6%,和我的预料是一致的。当时的CPU总量被我用掉近 1/4,内存被我用掉 0.5% 。

下图为30w+ connections, 4.6w req/s 的时候我的程序使用的资源情况(2cpu*4Core):


下图为cpu使用分布情况,cpu0空闲率只剩 6% (2cpu*4Core):


另外附上一个23w connections, 3.5w req/s 的时候我的程序使用的资源情况(2cpu*4Core),当时cpu只被用掉1/8,内存被用掉 0.4% ,cpu没有发挥线性增加的作用,我肯定不说能我可以支撑23w*8,但是保守地说,只要把网卡中断分散一下,单机50w+ connections很easy。



八,新浪财经实时行情系统的历史遗留问题 (7 byte = 10.68w RMB/year)

这点我还是提下吧,估计我不说,大家也想不到。
先感谢wangyun同学的大胆使用才有了今天的财经实时行情系统(当初是从一台PIII 900服务器上发展起来的,前几天刚被我下线)不过 "hq_str_"  这7个字节的前缀,也是他造成的,当初他说改抓取页面有些麻烦,就让我写死在server里,虽然意识到将来也许会有隐患,但我还是照做了。见下面返回数据:
http://hq.sinajs.cn/list=s_sz000609,s_sz000723,s_sh000001
var hq_str_s_sz000609="绵世股份,9.29,-0.05,-0.54,170945,16418"; 
var hq_str_s_sz000723="美锦能源,0.00,0.00,0.00,0,0";
var hq_str_s_sh000001="上证指数,2031.681,-47.436,-2.28,1216967,8777380";
我算了一笔帐,行情好的时候每秒会产生30~40w个请求,一般一个请求会请求3~50只股票,保守点就按每个请求5只股票来计算,每秒会产生200w只股票查询信息。由于这7个字节产生的带宽为: 200w  *  7byte  * 8bit / 1024 /1024 = 106.8 M  ,而往往我们的带宽要按峰值来准备,按1G带宽100w RMB/year 计算,每年耗费10.68w RMB。把这笔钱拿给我做奖金,我会很happy的 ^-^ . 现在因为很多页面都使用了行情数据,想修改,代价很高。

所以设计系统的时候一定要考虑的稍微远一些,哪怕当时只是一点点微不足道的地方,要考虑将来访问规模变大了会是什么后果。还有就是要敢于坚持自己的原则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_865705.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杨建:网站加速--系统架构篇

--提升性能的同时为你节约10倍以上成本From: http://blog.sina.com.cn/iyangjian一,系统部署(高并发,可扩展)二,负载均衡LVS(高可用,低成本)三,IDC分布,DNS解析(快速&…

杨建:网站加速--实例分析篇

--提升性能的同时为你节约10倍以上成本From: http://blog.sina.com.cn/iyangjian一,自选股分析二,NBA比赛分析三,播客分析四,开心网分析--------------------------------------------------------------------------------------…

大型网站架构演变和知识体系

之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不少同学都很难明白为什么…

使用ImageMagick为你的网站减重

Images as a percentage of page weight for the Alexa top 10 global web sites 图片在网站所占的比重越来越重。更好的优化图片可以提高网站速度。减少宽带流量。 1.对用户上传图片进行缩放 对于用户自己上传的图片不能简单的 用css限制大小,因为这样每次加载图…

使用ImageMagick为你的网站减重(2)

以前写过一篇博客《使用ImageMagick为你的网站减重》,涉及到的手段是: 在服务器端把图片缩放到合适的尺寸,避免在前端用css缩放图片。用imagemagick的strip功能移出图片里的EXIF等多余信息。压缩JPEG图片的质量,减少图片体积。 Lo…

大型网站系统架构演化之路

前言 一个成熟的大型网站(如淘宝、天猫、腾讯等)的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技…

丑事网是史上SEO最差的网站

做过网站的人一定都知道SEO,即搜索引擎最佳化(Search Engine Optimization),又称为搜索引擎优化,其主要工作是通过了解各类搜索引擎如何抓取互联网页面、如何进行索引以及如何确定其对某一特定关键词的搜索结果排名等技…

大型电子商务网站架构之--分布式可扩展数据库架构

近几年分布式成为热门的话题,也成为大型系统必备良药,而在数据库方面应用更加广泛。通过采用普通廉价的设备构建出高可用性和高扩展的集群目的。从而摆脱了大型设备的依赖,一个好的分布式数据库架构可以比较方便达到高可用性有可以达到向外扩…

网站的高性能架构

网站性能是客观的指标,可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间,指从发出请求到最后收到响应数据所需要的时间。如下列出了系统常用的操作响应时间表. 操作 响应时…

用VSTS进行网站压力测试

VSTS提供了一个丰富、强大的工具平台,融合了软件开发领域的各个角色,涵盖软件开发生命周期的各个阶段,包括设计,开发,测试,管理,而这一整套构件的融会贯通,让它可以有效地改善软件开…

小白建站教程 腾讯云快速建站教程

相信不少的小伙伴都希望能有一个自己的网站,但是对于不会编程或者只有一点点技术的人来说自己搭建服务器、弄环境、写程序有点太困难了,有没有一种能让小白也能快速搭建自己网站的方法呢?今天就来给大家分享一下如何在腾讯云(阿里…

网站是用mssql好还是mysql_mssql和mysql哪个好

MySQL和MSSQL各有各的优缺点,要根据项目实际情况来选择。MySQL是免费的数据库适合应用在小中型网站上,MSSQL是收费的商用数据库一般用在大型网站上。 MySQL与MSSQL哪个好 MySQL可以说是MSSQL的简化版本。理念相同,但MySQL的实现比MSSQL的需求…

搭载Ubuntu18.04的服务器的ASP.Net Core的搭建以及使用VS2017上传网站的学习

要在远程服务器Ubuntu18.04上运行ASP.Net,第一步需要搭建运行环境 主要参考:https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial#ubuntu 首先安装源 wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-p…

网站遇到Bytespider爬虫该怎么办?

早上打开网站,发现超级卡,以为是网速原因,调试了路由器无济于事,都说重启大法好,重启那就重启web服务试试,可惜依旧没用,不过重启的时候发现CPU彪到99,我还以为是被谁Doos了。 发现…

如何防止网站被侵入,如何防止网站被挂马,如何防止网站被入侵?

一:挂马预防措施: 1、建议用户通过ftp来上传、维护网页,尽量不安装asp的上传程序。 2、对asp上传程序的调用一定要进行身份认证,并只允许信任的人使用上传程序。这其中包括各种新闻发布、商城及论坛程 序,只要可以上传…

android学习笔记15--------------获取网站html

转载注明出处:袁方的技术博客 http://blog.csdn.net/yf210yfimport java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL;import junit.f…

电脑网站中有哪些有趣却不出众的小众网站呢

我们在使用电脑的时候会发现不少有趣的电脑网站,这些网站的名声并不出众,但是这些小众的网站却有很多有趣的故事和图片。我们在这些小众的网站上还可以看到一些世界上发生的一些有趣的、奇异的小故事,还有一张张美丽的图片在网站上展示出来。…

给网站添加“开放搜索描述“以适配浏览器的“站点搜索“

背景 要在一个常用网站搜索,想必大部分人会这样: 访问这个网站的的主页或者任意一个带搜索框的页面聚焦输入框,输入关键词并Enter 而如果一个网站适配了浏览器的"站点搜索"(site search)特性,…

Android开发时,那些相见恨晚的工具或网站!

本文来我在知乎话题Android开发时你遇到过什么相见恨晚的工具或网站?下的回答! 在实际Android开发过程确实会有很多相见恨晚的工具或网站出现,下面是我自己的一些分享。 1、源码网站 https://github.com/googlesamples Android系统每次推出一…

用织梦创建本地网站通过Tomcat成功部署到Linux服务器详细教程(Ubuntu16.04)

用织梦创建本地网站成功部署到Linux服务器全过程详细教程(Ubuntu16.04) 织梦创建本地网站成功部署到Linux服务器详细教程(Ubuntu16.04) 本教程旨在帮助那些建网站小白如何从头搭建起本地网站并且最终上传到自己或公司的服务器上…