网站性能优化--服务器编写篇(下)

news/2024/5/16 9:39:07/文章来源:https://blog.csdn.net/JeamKing/article/details/5187077

--提升性能的同时为你节约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_892036.aspx

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

相关文章

盘点美国7大团购网站:运营模式各有差异

导语:据国外媒体周日报道,最近团购网站和其他一些提供打折服务的企业备受瞩目,尤其是该市场的领头羊Groupon,正在以飞快的速度在全球主要城市扩张。也许是团购模式易于理解,Groupon的竞争对手和模仿者都在跃跃欲试&…

HTML基础7--文档与网站架构

本文首发公众号: 伊洛的小屋,欢迎关注并查看更多内容!!! 文档的基本组成 一个页面通常由一下几个部分组成:页眉、导航栏、主内容、侧边栏、页脚 例如:下面的页面布局 构建内容的 在HTML中 …

服务器IIS架设网站无法增加log文件

小慕 遇到的是在IIS 架设网站之后,程式本地运行时会在指定文件夹写下程式运行的log 档,但是服务器会报错无法运行; 经查资料,发现是指定文件夹(文件名Log)的权限未分配给IIS _IUSRS,分配之后即…

网站设计与开发流程图

转载于:https://www.cnblogs.com/wy811007/p/4160016.html

分享6个AI绘画网站

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 1、Midjourney 特点:业内标杆,效果最强大 Midjourney是基于diffusion的AI图画艺术生成器。生成图片不局…

servlet学习笔记1——用户登录网站(servlet1.0)

一、框架描述 登录页面:Login.java 验证页面:LoginCl.java 欢迎界面:Wel.java Login.java发出登录请求,Login.java进行验证,合法则进入Wel.java,不合法返回Login.java 二、参考代码 Login.java packag…

servlet学习笔记7——网站框架的改进

(三)网站框架的改进 之前的程序设计不合理,因为其将界面和业务逻辑放在一起(moddel1模式),存在以下问题:1.在LoginCl.java文件和Wel.java文件中都操作了数据库,它们的逻辑相似&…

用springBoot与dubbo、 zookeeper、redis整合做了一个弹幕网站

系统采用eclipse 开发,jdk1.7 ,数据库采用的是mysql 源码下载地址:http://java.goodym.cn/html/1506574390095.html 网站预览地址:http://malimali.goodym.cn

开发者必备:测试网站速度的五个免费在线工具

摘要:网页性能很大程度上决定了用户体验,最终可以决定网站的成功。虽然大家都知道提高浏览速度的重要性,可很多时候不知道什么元素拖了后腿。本文将介绍测试网站速度的五个免费在线工具,帮你设计出高效的网站。 如果你认为一个网站…

移动开发者的自学宝典:十大在线编程学习网站

目前的教育领域,受移动互联网的冲击,MOOC的理念正在风行,但事实却稍显疲软,不尽如人意。相比美国式的全民热衷,国内的线上教育却还流于形式。其他教育尚且如此,移动开发教育更不用谈。在这种情况下&#xf…

网站用户单点登录系统解决方案

网站用户单点登录系统解决方案 1 背景   在网站建设的过程中,多个应用系统一般是在不同的时期开发完成的。各应用系统由于功能侧重、设计方法和开发技术有所不同,也就形成了各自独立的用户库和用户认证体系。随着网站的发展,会出现这样的用…

计算机毕业设计Springboot+vue的网络购物商城网站(源码+系统+mysql数据库+Lw文档)

一、项目运行 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue 目前许多人仍将传统的纸质工具作为信息管理的主要工具,而网络技术的应用只是起到辅助作用。在对网络工具的认知程度上&…

wordpress建站如何用SMTP配置邮件通知

前提条件:你已经有了企业邮箱,相关文章请看:如何开通阿里云企业邮箱免费版(点此前往) 不建议使用主机商提供的邮箱,因为换主机商是比较常见的事情,因此导致的邮箱迁移就有些麻烦了,…

网站如何开通google search console

本文将介绍网站如何开通google search console(以下简称GSC),以分析网站的自然流量数据,例如:关键词、展示量、排名、点击率、外链等等。GSC能为网站的Google SEO运营工作带来极大的帮助,是必不可少的工具。…

如何给wordpress网站安装Google analytics跟踪代码

本文将介绍如何给wordpress网站安装google analytics,用于跟踪网站的用户数据。 前提条件:你已拥有google账号;你的网站使用wordpress创建的。 创建google analytics账号 访问https://analytics.google.com/analytics/web/,点击…

如何在siteground给网站启用cloudflare CDN

Siteground为托管的wordpress网站提供了cloudflare免费版全球CDN的快捷开通功能,CDN是加速网站以降低网站加载时间的重要功能。本文基于如下前提条件: 域名的NS是指向siteground的,请在本站外贸建站教程中查看如何将域名NS指向Siteground。网…

如何在siteground中创建wordpress网站

本文将图文分步骤介绍如何在siteground中创建wordpress网站,如果你买的是growbig套餐,用下面的办法就可以创建多个不同域名的网站。 Step1:登录siteground后,按下图序号依次操作,点击new website创建网站。 Step2&…

如何在Siteground中给WordPress网站安装SSL证书

本文将一步步介绍:如何在Siteground中给网站安装Let’s encrypt SSL证书。 获取SSL证书 进入Siteground的site tools,进入Site》SSL manager 选择ssl为 let’s encrypt 点击get,等待安装完成后去启用 强制执行HTTPS 安装完成后在该界面能看…

如何修改WordPress网站页脚版权(2种方法)

本文基于免费主题,实例讲解修改Wordpress网站页脚版权的功能操作: 以Gnenerate Press为示例,针对未提供修改版权功能的主题,如何去掉主题的版权、支持信息,并修改为本站的; 以Astra主题为示例,…

如何用Astra主题免费版建外贸网站

超详细10000字的外贸建站教程,图文、视频兼备。除了域名和主机,WordPress主题、插件通通是免费版,零经验的你也能建个靠谱的外贸网站,只要肯花点时间照着步骤做就能行~我选用了大牌的Astra主题,速度快、质量有保证&…