小网站架构优化:从100并发抗到4000并发

news/2024/5/10 2:18:55/文章来源:https://blog.csdn.net/weixin_34029949/article/details/90468362
前言:
复制代码
很久前,在512M内存+Access的VPS里,写过了一个经典的秋色园技术原理解析系列。
后来的某一天,换上了1G内存+MSSQL2000,秋色园又跑过了一个多年头。
之后,秋色园和 CYQ.Data,也在一直默默的优化和改进,只是没写什么文章分享分享。
秋色园的架构,基本上从简单到复杂最后又回归简单,不断做着减法,去掉了好多以前用于减轻负载的算法,包括AOP+SQLite分压和文本分压等机制,还有一些缓存式算法。
好多时候,硬件不给力,这时候就会被逼着把整个系统架构复杂化。
一当硬件给力时,系统轻装上阵,架构可以更简单。
因为本质就是请求+返回(硬件能加速的,软件就不用搞太多算法了)。
复制代码

下面在分享一下我记忆中还记得的秋色园关于负载测试的起缘:

 

1:某天,我发现秋色园CPU经常会跑满100%:
经过一年的岁月,不知觉的最终被我发现是搜索引擎引发的(虽然写过IIS日志分析工具,但是我自己都很少用,几乎没怎么用,一用没想到找到问题了)。

我发现秋色园的关键字(Tag),由于是直接链接到搜索,而搜索这块是全表的like搜索,没做缓存的优化,所以搜索引擎心情好时就把它弄挂菜了。

2:某天,某人用几百个并发,把秋色园又搞到CPU百分百了:

复制代码
我很疑惑,秋色园几乎都是半静态+缓存,除了队列缓存式更新访问计数,和除了后台,不可能顶这点并发就挂了。

通过查看IIS日志,我从日志里发现,是由于URL引发的:
由于秋色园是根据URL缓存的,对方的并发通过在URL后面补充一些随机参数,导致每次请求的URL都不一样,结果系统每次会重新读取并生成Html,导致CPU飘起来。
解决方法就是重整所有的URL链接和对应的缓存机制了。
复制代码

3:某天,我也玩起了负载工具,自己时不时的把秋色园弄到CPU百分百.

 

下面分享下,在负载推力下,对秋色园后续折腾的几个优化方案:

 

经过不断的负载测试,秋色园顺路把一些常见的优化手段也用上了:

 

1:分离静态资源域名:static.cyqdata.com
复制代码
架构处理过程:

1:把模板加载和图片处理的,都给处理到另一个域名。
2:新开一个网站,绑定static.cyqdata.com域名,位置仍指向原来的位置。
3:由于是静态站点,可以关掉和.net无关的所有东西。
这样变化后,图片的负载就是天与地的变化:
如果没有分离出来,仍经过.net解析后再返回图片,测试1-2千个并发CPU就近满了。
经过分离,关掉和.net相关的资源后,跑了5000以上并发,CPU和内存也没怎么动静。
主要自己三台机最多只上到这5K左右的并发数,不能往上再测试,但是差距已经很明显了。
复制代码

2:Http 304:这是客户端缓存的应用:

除了服务器缓存,客户端缓存也是另一个重点,除了一些静态数据处理缓存,动态数据也适时用上304。

如:秋色园上有一些动态的文件“下载次数”:

一般的程序,文件下载都是和文章内容分开的,单独提供下载。

如上,我需要在文章内容里提供下载,又要考虑下载次数机制,用上了图片机制,通过动态一个请求返回了图片资源。
由于下次数次实时性不强,而且变化少,通过来点手段,也可以304缓存。

3:关掉不常用的Modules:

如果你重写过URL,或看过秋色园技术原理解析关于URL重写这块文章,下面代码应该会熟悉:

通过调试,看下图:秋色园的Modules只剩下3个,那时因为其它的没用的都关掉了。
本来Session模块也是要关掉,突然发现OAuth2里用到了,就保留了。
看下图还会发现一段注释的for语句,是打印出默认系统带的十几个Moudules。
关掉也很简单,web.config配置:
复制代码
<httpModules>
<add name="UrlRewrite" type="Web.UrlRewrite.UrlRewrite,Web.UrlRewrite" />
<remove name="OutputCache" />
<!--<remove name="Session"/>-->
<remove name="WindowsAuthentication" />
<remove name="FormsAuthentication" />
<remove name="PassportAuthentication" />
<remove name="RoleManager" />
<remove name="UrlAuthorization" />
<remove name="FileAuthorization" />
<remove name="AnonymousIdentification" />
<remove name="Profile" />
<remove name="ErrorHandlerModule" />
<remove name="ServiceModel" />
<!--<remove name="UrlRewrite"/>-->
<!--<remove name="DefaultAuthentication"/>-->
</httpModules>
复制代码

4:尽早关闭数据库链接:

以前喜欢这样写代码:
复制代码
using (MAction action = new MAction(U_QBlogFileEnum.Blog_File))
{
action.SetSelectColumns(Files.ID, Files.Hits, Files.FilePath);
if (action.Fill(id))
{
Document.Load(action.Data);
。。获取数据库数据处理一些业务逻辑显示到界面。 
}
}
复制代码
这种坏习惯,导致数据库链接会根据业务的时间延长了关闭链接,导致并发性能下降,平时看不出来。
改进:
复制代码
MDataRow row;
using (MAction action = new MAction(U_QBlogFileEnum.Blog_File))
{
action.SetSelectColumns(Files.ID, Files.Hits, Files.FilePath);
if (action.Fill(id))
{
row=action.Data;
}
}
if(row!=null)
{
Document.Load(action.Data);
。。获取数据库数据处理一些业务逻辑显示到界面。
}
复制代码
把逻辑放到外面,提前关闭链接后再去处理事情,并发时性能会提升不少。

 

5:Web园的抗并发能力:
复制代码
基于不断的优化改进,秋色园从100个并发挂菜-》基本优化-》到1000个并发挂菜-》经过架构调整优化-》抗到2000个并发左右。

最后,还有一个招,就是IIS的Web园,通过允许的设置了2个进程,发现能抗到4000并发,虽然CPU接近100%,但仍能正常访问,可见Web园的确是个奇招。
开启Web园,意味着多进程负载,当然Session默认的模式就不能用了。
复制代码
如上所说,同样的硬件配置:从100个并发,到4000个并发,改动并不多,路也并不长,但是常人又知多少。
以上的服务器环境,都是美国VPS 10M带宽CPU双核,配置如下:

6:如何对网站进行负载测试:

分布式网站负载压力测试工具:点击下载

后话:

硬件能顶半边天:一台好的服务器,程序写的烂一点,不做任何优化,也能跑的潇潇洒洒。

软件能顶半边天:好的优化机制和架构,穷的服务器也能跑个安安稳稳。
现实时,只有超过了那半边天,你才会去想另一半的重要性。
版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:
http://www.cnblogs.com/cyq1162/archive/2013/05/13/3074980.html

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

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

相关文章

一个纯采集站长的SEO、采集、运维总结

我是一个纯采集站长&#xff0c;下面的这些总结&#xff0c;有些是关于关于SEO&#xff0c;有些是关于采集和运维&#xff0c;都是很基础的个人见解&#xff0c;仅作分享&#xff0c;请自辨好坏是非&#xff0c;实践出真知。 原创好还是采集好? 当然是原创好&#xff0c;因为百…

利用GitHub搭建自己的第一个个人网站(新!!!)

几天前&#xff0c;迫不及待的想让自己的个人网站项目上线&#xff0c;请教了老师&#xff0c;经过老师和度娘和谷歌翻译的帮助&#xff0c;终于能利用GitHub的二级域名访问了&#xff0c;下面将从零开始&#xff0c;介绍搭建方法。 准备工具&#xff1a; 谷歌浏览器&#xff…

win7 IIS7 发布网站 出现 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

今天安装了windows7 开发web项目需要安装IIS,当安装完以后,web程序已经映射到了本地IIS上,运行出现如下错误提示 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” 原因: vs2010默认的是4.0框架&#xff0c;4.0的框架是…

奇奇seo优化软件_seo优化排名软件价格

seo优化xaa0c1排名软件价格&#xff0c;随着现代化信息技术的发展&#xff0c;人们越来越多的从网络来获取信息。近年来&#xff0c;我们获取的信息绝大部分都是来源于网络&#xff0c;网络如今已成为信息的最大载体。为了让更多消费者了解并消费企业提供的服务和产品&#xff…

php 怎么判断月份最后一天_WordPress小网站“耗资源” 被关停怎么办?(二)

大家好&#xff0c;最近又有一个WordPress小网站被关停了&#xff0c;原因是“耗资源”。这个网站是BeTheme主题&#xff08;17.8老版本&#xff09;做的&#xff0c;用阿里云的一款配置非常低的虚拟主机&#xff0c;共享版经济型。今年5月份我写过一篇文章&#xff0c;标题是《…

网站优化注意事项,关键词分析很重要!

对于一个网站的运营&#xff0c;在建站之初&#xff0c;我们经常会制定关键词策略&#xff0c;如果在关键词选择的过程中&#xff0c;采用了错误的方法&#xff0c;那么势必导致网站&#xff0c;南辕北辙&#xff0c;适得其反。因此&#xff0c;在做网站优化的时候&#xff0c;…

盘点愚人节各大网站彩蛋,谁最爱恶搞?

2019独角兽企业重金招聘Python工程师标准>>> 如今的愚人节俨然已是各品牌宣传了一个重要节日&#xff0c;同时&#xff0c;也成为了各大互联网科技企业凑热闹&#xff0c;比拼创意和策划的节日。跟小编一起看看有哪些有趣的策划吧&#xff01; Google地图变成吃豆人…

如何使用阿里云搭建wordpress网站(图文教程+小白专用+Linux版)?

【声明】 在任何云服务器上安装wordpress网站都是异曲同工&#xff0c;操作系统分为window和Linux。在这里&#xff0c;我选择linux操作系统来搭建wordpress网站。 如果要了解基本的网站搭建流程&#xff0c;请看文章&#xff1a;如何低成本建立属于自己的网站&#xff1f; ht…

EV SSL证书对电子商务网站很重要为什么?

为什么EV SSL对电子商务平台很重要?1、最高级别的SSL证书;2、遵循最严格严格的验证过程;3、确保公司是真实的和合法的;4、显示了绿色地址栏和商业名称;5、对在线交易信息进行严谨的加密;6、提高客户的信任度&#xff0c;提升平台的业务;7、保证完整的网站和数据保护;8、提高搜…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标&#xff0c;可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间&#xff0c;指从发出请求到最后收到响应数据所需要的时…

在IIS上部署基于django WEB框架的python网站应用

django是一款基于python语言的WEB开源框架,本文给出了如何将基于django写的python网站部署到window的IIS上。 笔者的运行环境&#xff1a; Window xp sp3IIS 5.1Python 2.7.2 (http://www.python.org/)pywin32-217.win32-py2.7 (python的win32扩展)Django-1.3.1 (https://w…

IIS7部署django网站指南

运行环境: windows Server 2008 R2 Enterprise (64位) IIS 7.5 IIS 6.0 兼容性管理 SQL Server 2005 注: IIS 6.0兼容性管理必须安装 所需软件&#xff1a; 请到官方网站下载,所有的安装包都是32位的。 window installer是指exe的安装包, 而django,django-pyodbc,isapi_wsgi请…

如何使用命令行调优ASP.NET网站代码(From MSDN)

&#xfeff;&#xfeff;原文出处: http://msdn.microsoft.com/en-us/library/ee308442(vvs.110).aspx 命令行工具路径: c:\Program Files (x86)\Microsoft Visual Studio 11.0\Team Tools\Performance Tools\ 非常实用的工具&#xff0c;可以帮助你判断ASP.NET网站程序代码…

外国官方网站下载文件速度缓慢

我们经常要下载东西&#xff0c;特别是一下专业软件就不得不到官方网站下载了&#xff0c;但很多这样的软件常常需要到外国的一些官方网站里下载了。可是&#xff0c;也经常遇到下载速度过于缓慢的的问题&#xff0c;在这我是用了一个简单但是略显笨的方法&#xff0c;但是也挺…

客户端通过主DNS、辅DNS、缓存DNS能够正常解析,客户端能够通过DNS解析域名来访问网站服务器。

实验要求&#xff1a; 客户端通过主DNS、辅DNS、缓存DNS能够正常解析&#xff0c;客户端能够通过DNS解析域名来访问网站服务器。 主DNS解析域名正向区域 反向区域 辅DNS解析域名缓存DNS解析域名通过DNS解析域名访问网站服务器PS:可能出现的问题&#xff1a; 解决方法&#xf…

爬虫学习之9:结合百度翻译API爬取PEXELS网站图片

PEXELS网站上的图片素材&#xff0c;质量很高&#xff0c;可以免费用于个人和商业用途&#xff0c;但是搜索功能不能用中文&#xff0c;这里结合百度翻译API完成搜索路径的构建。由于百度翻译API为个人申请使用&#xff0c;这里用XXX代替&#xff0c;需要的童鞋可以自己申请免费…

【建议收藏】六个免费的在线OCR识别网站,显著提高你的工作效率!

日常生活中&#xff0c;很多时候我们需要将图片信息转换成文字。比如读一本纸质版的书时&#xff0c;读到有价值的片段&#xff0c;希望保存成电子存档以后翻出来看&#xff1b;比如希望将照片里的文字信息提取出来保存&#xff1b;比如领导交给你一份纸质版表格让你录入excel。…

菜鸟上路Flask+Anaconda+Pycharm网站开发

之前一直用Django框架&#xff0c;然后老大说‘’Django框架太重了&#xff0c;换个轻的&#xff0c;就换了Flask&#xff0c;简单记录一下Flask开发的流程吧。 Step1&#xff1a;我的Python环境是Anaconda中集成的&#xff0c;版本是3.6版&#xff0c;Anaconda中也集成了Flas…

C# 获取网站站点根目录

获取站点ID&#xff1a; using Microsoft.Web.Administration; var sites new ServerManager().Sites["Mis"];string siteID sites.Id.ToString(); using System; using System.DirectoryServices; using System.Collections.Generic; using System.Text; namespac…

抖音seo

什么是抖音SEO&#xff1f;简单来说&#xff0c;就是围绕抖音的推荐算法做的SEO关键词布局和推广&#xff0c;达到自然引流的目的。 什么是抖音SEO算法&#xff1f; 1、内容搜索检索视频内容&#xff0c;寻找与 "减肥 "相关的视频&#xff0c;即系统会对声音、字幕等…