大型互联网网站架构心得

news/2024/5/20 4:45:07/文章来源:https://blog.csdn.net/iteye_16215/article/details/81646866

大型互联网网站架构心得之一:分

转自 : 朱晔 ID:LoveCherry http://blog.csdn.net/LoveCherry/archive/2008/06/19/2564096.aspx

我们知道,对于一个大型网站来说,可伸缩性是非常重要的,怎么样在纵向和横向有良好的可伸缩性,就需要在做架构设计的时候考虑到一个分的原则,我想在多个方面说一下怎么分:

首先是横向的分: 1.大的网站化解为多个小网站:当我们一个网站有多个功能的时候,可以考虑把这个网站拆分成几个小模块,每一个模块可以是一个网站,这样的话我们到时候就可以很灵活地去把这些网站部署到不同的服务器上。 2.静态动态分离:静态文件和动态文件最好分离开成2个网站,我们知道静态网站和动态网站对服务器来说压力的侧重不同,前者可能重IO后者重CPU,那么我们在选择硬件的时候也可以有侧重,而且静态和动态内容的缓存策略也不一样。典型的应用,我们一般会有独立的文件或图片服务器。 3.按照功能来分:比如有一个模块是负责上传的,上传操作很消耗时间,如果和其它应用混在一起的话很可能,一点点访问就会使服务器瘫痪,这种特殊的模块应该分开。安全的不安全的也要分开,还需要考虑到以后SSL的购买。 4.我们不一定要全部用自己的服务器,搜索、报表可以依靠别人的服务,比如google的搜索和报表服务,自己做的不一定比得过别人,服务器带宽都省了。 其次是纵向的分: 1.文件也相当于数据库,IO的流量可能比数据库还大,这也算是纵向级别的访问,上传的文件图片一定要和WEB服务器分开。当然,数据库和网站都放在一个服务器上的很少了,这是最基本的。 2.对于涉及到数据库访问的动态程序来说,我们可以使用一个中间层(所谓的应用层或逻辑层)来访问数据库(部署在独立的服务器上),最大的好处就是缓存和灵活性。缓存的内存占用比较大,我们要把它和网站进程分开,而且这样做我们可以很方便的去改变一些数据访问的策略,即使到时候数据库有分布的话在这里可以做一个调配工作,这样灵活性就很大了。还有好处是中间层可以做电线网通桥梁,可能网通访问双线再访问电信会比网通直接访问电信服务器快。 有人说我不分,我可以做负载均衡,对,是可以的,但是如果分的话,同样的10台机器肯定比不分10台机器可以承受更多的访问量,而且对硬件的需求可能不会很高,因为知道需要哪个硬件特别好。争取让每一个服务期都不空闲,又都不是太忙,合理进行组合调整和扩充,这样的系统伸缩性就高了,能根据访问量来调整的前提就是之前有考虑到分,分的好处是灵活性、伸缩性、隔离性以及安全性。

对服务器来说,我们有几点是要长期观察的,任何一点都可能是瓶颈: 1.CPU:动态文件的解析需要比较多的CPU,CPU出现瓶颈就要看是不是哪个功能过长时间占用线程,如果是就分出去。或者就是每一个请求处理时间不长,但是访问量很高,那么就加服务器。CPU是好东西,不能让他干等,不做事情。 2.内存:缓存从IIS进程独立出去,一般对WEB服务器来说内存不够的情况不是很多。内存比磁盘快,要合理利用。 3.磁盘IO:用性能监视器找到哪些文件IO特别大,找到了就分到独立的一组文件服务器上去,或者直接做CDN。磁盘慢,大规模读取数据的应用靠缓存,大规模写入数据的应用可以靠队列来降低突发的并发。 4.网络:我们知道,网络的通讯是比较慢的,比磁盘还慢,如果是做分布式缓存,分布式计算的话,要考虑到物理服务器之间网络通讯的时间,当然,在流量大了以后,这可以提高系统的接纳能力一个等级。静态内容可以借助CSD分担一部分,在做服务器假设的时候还要考虑中国特色的电信网通情况以及防火墙。 对SQL SERVER数据库服务器来说[UPDATE]: 其实还是水平分割和纵向分割,一个二维表,水平分割就是横过来切一刀,纵向分割就是竖直切一刀: 1、纵向分割就是,我们不同的应用可以分到不同的DB中,不同的实例中,或者说把某个拥有很多字段的表拆分成小表。 2、横向分割就是,某些应用可能不负载,比如用户注册,但是用户表会非常大,可以把大表分开。可以采用表分区,数据存储在不同文件上,然后再部署到独立物理服务器增加IO吞吐以改善读写性能,土一点的做法就是自己定期把老的数据存档。表分区的另外一个优势可以增加数据查询速度,因为我们的页索引可以有多层了,就像一个文件夹中的文件不要太多,多分几层文件夹一样。 3、还可以通过数据库镜像、复制订阅、事物日志,把读写分开到不同的镜像物理数据库上,一般来说够用,如果还不行可以用硬件来实现数据库的负载均衡。当然,对于BI,我们可能还会有数据仓库。 架构上考虑到了这些之后,流量大了,就可以在这个的基础上再去调整或者做WEB服务器或者应用服务器的负载均衡。很多时候我们都是在重复发现问题-》找到瓶颈-》解决这个过程。 典型的架构如下: 动态WEB服务器配好点的CPU,静态WEB服务器和文件服务器磁盘好点应用服务器内存大点,缓存服务器也是,数据库服务器当然内存和CPU都要好

大型互联网网站架构心得之二:并于换

“分”是一个比较大的原则也是一个比较高层的原则,这次我想说一下其它两个原则:并与换。

为什么要分?是因为我们希望通过分来提高系统的承载能力,那并又是并什么呢?我想了一下有几个方面可以并:
1. 合并用户请求,最基本的就是合并CSS/图片/脚本,还可以合并页面。不过合并就可能产生流量的浪费,需要有一个平衡点。
2. 合并接口的粒度,如果做分布式应用的话,我们可能不会直接访问数据库而是调用应用层提供的接口,由于是网络调用,代价比较大,因此在设计的时候尽量提供粒度比较粗的接口,一次调用返回比较多的数据,而不是细化到添加删除修改的层次。
3. 合并接口的部署,对于频繁的跨机器调用可以考虑有一些数据冗余,把跨网络的服务编程进程间通讯,甚至转到客户端来做。比如论坛发贴时候脏词的过滤,直接调用应用层提供的接口(跨机器)是可以的,但是可能代价比较大,可以把这个接口使用IPC方式部署在本机。
时间换空间,空间换时间是常见的做法,具体一点说:
1. 缓存。缓存的重要性早计算机的硬件中就有重要的体现。对于网站,有很多种缓存,可以是客户端资源的缓存,可以是页面输出缓存,也可以是应用层的数据缓存,目的都是一样的,或是减少了服务器请求次数,或是减少了请求的处理过程,或是减少了数据库的访问次数。当然,生成静态文件也可以算是一种缓存。不访问磁盘固然不可能,但是我们要极大限度降低磁盘访问的机会。
2. 有的时候为了获取极快的响应,我们还会不惜代价采用重复计算。比如,我们的某个操作很可能会由于网络问题等原因响应比较慢,在设计的时候可以有一个统一的处理接口,由这个接口分发到不同的服务器去异步实现这个操作,哪个服务器先返回了结果我们就用这个结果,然后杀死其他服务器的冗余操作。
3. 网站一般追求比较快的响应,一般不太会在比较高的层次用时间来换取空间,但是在一些用户独有数据的处理算法上可能还是会考虑到空间的节省问题。
4. 有的时候我们会用一些聚合表来存放聚合数据,也就是进行一些预计算提高复杂计算(比如报表)的性能。当然,对于数据分析,构建多维数据库也是一种不错的选择。
有很多网友留言说说的比较粗,没有什么具体的东西。我觉得架构这个东西很难去说具体怎么做,因为具体实施的时候要看情况去应用的,由于没有完美的东西,所以做架构通常是去做一个平衡,很可能某一个侧重不同会影响到架构的实施。希望我的这些文章能给大家一个提示的作用,看了之后如果你觉得“这点我倒没有考虑到,以后要注意”那或许就是最大的帮助了,下面我想说一些其它方面的问题,每一条都很零散,算是一个补充吧:
1. 到底是采用已有的东西还是自己去做需要详细考虑的,采用别人的东西可能比较稳定,但是自己的控制少了一点,采用自己做的东西可以很灵活,但是可能会问题比较多。不管怎么样,我们在采用一个第三方框架的时候务必要进行缜密的调查,看到他的不足,否则项目很可能在后期被这个框架制约,反之,决定自己去做一个框架的时候也要看到自己需要什么其他框架不能提供的东西。
2. 数据传输的时候可以做压缩,但要考虑到压缩解压缩需要CPU资源,在IO(磁盘,带宽,传输能力)和CPU之间有一个平衡的考虑。
3. 理想的可伸缩性架构是可以自由增加或替换服务器,无需去停机维护或做很大的调整。在使用一个统一的调度中心来调度这些服务器,分配请求的时候,我们要考虑一下调度服务器能承受多少流量。
4. 使用大量的廉价服务器还是少量的高配服务器?如何根据需求来组合服务器发挥最大作用。
5. 对于分布式构架,我们尽量让每一个节点保持简单的逻辑,尽量减少同一层次节点之间的依赖,另外。需要有统一的地方来管理所有的节点。
6. 功能分解、使用异步进行整合、故障转移、失效保护。
7. 软件的架构升级和计算机硬件的架构升级很像,可能有一段时期,我们是在慢慢提高整体能力,2年也才提高了几倍,之后发现只有通过某种彻底的架构改变才能提高数十倍的能力,升级之后,我们或许又会遇到其他问题。就像CPU,是简单提高主频还是彻底更换架构。
8. 数据方面,读写分离、数据库分隔、功能划分、缓存、镜像。
9. 硬件网络上的架构很重要,但软件开发中的一些细节不可忽略,好的架构不意味着不需要代码审阅。

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

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

相关文章

我国公布整治互联网低俗之风第二批曝光网站名单

2009-01-08 17:04:08 来源: 中新网(北京) 网友评论 843 条 点击查看 核心提示:中国互联网协会互联网违法和不良信息举报中心8日公布全国整治互联网低俗之风第二批曝光网站名单。 中新网1月8日电 中国互联网协会互联网违法和不良信息举报中心今日发布公告&#xff…

剖析SNS网站的现状,预测其发展趋势

-------导读------------1、SNS的由来和价值2、SNS区别与BBS和社区网站3、点评目前SNS网站的现状和价值取向4、SNS的盈利模式5、未来SNS的发展趋势 1、SNS的由来和价值 在谈SNS之前我们先认清一下SNS的几个概念: SNS定义:Social Network Software&#…

网站图片防盗链:初级策略

哪个站长也不想自己的带宽白白像流入黑洞一般,被盗链流量所淹没,所以大致采取一些方法,或多或少减少这种盗链成本,下面介绍一种初级策略: 1、我们先举了例子,下面的图片我是在blog中引用www.souapp.com&am…

Django生成网站的sitemap.xml

Django有一个高级的Sitemap生成框架 一个Sitemap是一个你的网站的XML文件,它告诉搜索引擎索索引你的页面的更新频率和你的站点某些页面联系到其它页面 有多"重要",这个信息帮助搜索引擎索引你的站点,参看http://www.sitemaps.org得…

django+apache配置网站的robots.txt和sitemaps等理静态文件

当你的网站已经在公网上正常上线后,为了能被搜索引擎很好的收录网站结构,就必须主动向搜索引擎提供robots.txt和sitemap.xml, 先来看看什么是robots.txt和 sitemap.xml吧,以下摘自“维基百科” http://zh.wikipedia.org/zh-cn/Si…

souapp:网站图片找不到,指向默认图片显示

如果你的网站上显示的图片不存在,总不能给访问者显示一个个小的图片吧,下面我们以www.souapp.com(搜应用网)为例: 当用户鼠标onMouseOver,"搞笑铃声-精选集合2"这个APP的时候,上面应该显示该APP的详细信息以及screensho…

souapp搜应用网:放弃IE浏览器的用户,你的网站能做到吗?

这几天调试souapp.com的页面,感觉chrome,firefox,ie总不可能达到一致的页面效果,非常之崩溃,chrome和firefox还不错了,最可气的就是那个IE,不仅页面布局乱七八糟,而且很多JS代码在IE下不支持,报…

www.souapp.com(搜应用网)推出了中文版和英语版网站

www.souapp.com(搜应用网) 在Google Android Market 的开发者们的强烈要求下,最近推出了中文版和英语版网站,希望中国开发者和国外开发者能够在souapp.com上推广自己的APP,并且根据souapp.com提供的APP统计,为自己的下一款APP的开…

大型网站技术架构

大型网站技术架构(1) 网站都是从小网站一步一步发展为大型网站的,而这之中的挑战主要来自于庞大的用户、安全环境恶劣、高并发的访问和海量的数据,任何简单的业务处理,一旦需要处理数以 P 计的数据和面对数以亿计的用户…

淘宝伏威关于12306网站解决方案:魔鬼在细节里

2月18日,CSDN在北京举行了TUP第19期活动:大数据系列研讨会——从12306谈起。本次研讨会汇集了来自百度、豆瓣网、搜狗、 淘宝、土豆、凡客诚品、新浪微博、IBM等公司的众多业内技术高管,就大数据及海量并发用户网络的需求分析、架构设计、产品…

YouTube的挑战者 JustinTV教你如何打造实时视频网站

Justin.TV每月有3000万个独立访问量,在游戏视频上传领域打败了YouTube ,他们每天每分钟新增30个小时的视频,而YouTube只有23。 下面从Justin.TV的实时视频系统使用到的平台,他们的架构细节,从他们身上应该学到的东西等…

前端开发工具,网站

浏览器插件,使用极简插件网站下载: FeHelper Web前端助手 react开发助手 前端网站合集:印记中文 - 深入挖掘国外前端新领域

VS2010 Web网站发布详解

对VS2010来说,发布Web是一件相当容易的事情,也许就是这个原因导致网上关于发布网站具体细节的资料很少。然而这些正是初学者所需要的,下面我详细介绍一下Web网站发布的具体过程。 第一步:在解决方案资源管理器中右击Web应用程序名…

项目一:摄影分享网站开发

本篇博客主要分享在该项目中遇到的一些问题及解决方法。 项目效果网站:http://zerored.3vhost.net/travel/index.html 1.设置背景半透明效果。 这里是一张背景图片加上一个半透明的遮罩层效果,首次开发的做法是先给大盒子背景图片,再在里面…

定时关闭和启动IIS和Web网站

目录 1、创建关闭、启动的批处理命令文件 2、通过“任务计划程序”定时执行批处理命令 1、创建关闭、启动的批处理命令文件 1.1 创建两个批处理文件 分别命名为IISStop.bat和IISStart.bat, 其中IISStop.bat中的命令代码为: echo off taskkill /f /…

php7.4升级php8.0后重启系统网站访问异常问题

安装完php8.0之后也禁用了旧版本php: 禁用php sudo a2dismod php7.4 启用php sudo a2enmod php8.0 也重启了php8.0-fpm服务: sudo service php8.0-fpm restart 但访问网站报如下异常: 错误日志: [proxy:error] [p…

WordPress网站优化加速的5个技巧

想让自己的wordpress网站访问速度更快,通过下面几个技巧,可轻松提速: 常规的前端性能优化 无论你的网站是基于什么后台技术实现的,被访问者访问的时候,总是会生成常规的 HTML、CSS、JavaScript 等文件发送回客户端。要…

宝塔面板启memcached加速wordpress网站访问速度

做网站的朋友一定知道一个网站的访问速度对于访客体验和seo优化的重要作用,提高网站打开速度的方法除了提升服务器性能和带宽以为还有很多地方可以优化,今天我们来介绍一下wordpress通过安装开提升网页访问速度的方式。 memcached加速原理 本质上是通用…

WordPress建站教程,纯代码实现wordpress防止发布文章出现标题重复,自动检测重复标题文章

WordPress代码实现防止发表重复标题的文章,如果对你有帮助就看看吧。 其实所有的插件这些的就等于放到function.php的代码片段。function.php里面的插件集成出来也可以做成一个插件,反过来插件也可以集成到function.php里面,插件的好处就是方…

VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

原网址:http://www.cnblogs.com/gengaixue/archive/2010/08/13/1799112.html 开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件。(此文章也是总结了网上好多人写的文章,我只是…