当前位置: 首页 > 编程日记 > 正文

大型网站采用什么系统架构保证性能稳定性

from http://www.bobd.cn/design/web/Theory/200904/31145.html

千万级的注册用户,千万级的帖子,nTB级的附件,还有巨大的日访问量,大型网站采用什么系统架构保证性能和稳定性?

首先讨论一下大型网站需要注意和考虑的问题。

数据库海量数据处理:负载量不大的情况下select、delete和update是响应很迅速的,最多加几个索引就可以搞定,但千万级的注册用户和一个设计不好的多对多关系将带来非常严重的性能问题。另外在高UPDATE的情况下,更新一个聚焦索引的时间基本上是不可忍受的。索引和更新是一对天生的冤家。

高并发死锁:平时我们感觉不到,但数据库死锁在高并发的情况下的出现的概率是非常高的。

文件存储的问题:大型网站有海量图片数据、视频数据、文件数据等等,他们如何存储并被有效索引?高并发的情况下IO的瓶颈问题会迅速显现。也许用RAID和专用存贮服务器能解决眼下的问题,但是还有个问题就是各地的访问问题,也许我们的服务器在北京,可能在云南或者新疆的访问速度如何解决?如果做分布式,那么我们的文件索引以及架构该如何规划。

接下来讨论大型网站的底层系统架构,来有效的解决上述问题。

毋庸置疑,对于规模稍大的网站来说,其背后必然是一个服务器集群来提供网站服务,例如,2004年eBay的服务器有2400台,估计现在更多。当然,数据库也必然要和应用服务分开,有单独的数据库服务器集群。对于像淘宝网这样规模的网站而言,就是应用也分成很多组。

大型网站系统架构

下面,就从服务器操作系统与Web服务器、数据库、服务器集群与负载均衡、缓存、独立的图片服务器、其它等几个方面来分析大型网站的系统架构。

服务器操作系统与Web服务器

最底层首先是操作系统。好的操作系统能提高好的性能、稳定性和安全性,而这些对大型网站的性能、安全性和稳定性都是至关重要的。

淘宝网(阿里巴巴): Linux操作系统 + Web 服务器: Apache

新浪:FreeBSD + Web 服务器:Apache

Yahoo:FreeBSD + Web 服务器:自己的

Google: 部分Linux + Web 服务器:自己的

百度:Linux + Web 服务器: Apache

网易:Linux + Web 服务器: Apache

eBay: Windows Server 2003/8 (大量) + Web 服务器:Microsoft IIS

MySpace: Windows Server 2003/8 + Web 服务器:Microsoft IIS

由此可见,开源操作系统做Web应用是首选已经是一个既定事实。在开源操作系统中Linux和FreeBSD差不太多,很难说哪个一定比另外一个要优秀很多、能够全面的超越对手,应该是各有所长。但熟悉Linux的技术人员更多些,利于系统管理、优化等,所以Linux使用更广泛。而Windows Server和IIS虽然有的网站使用,但不开源,而且需要购买微软的一系列应用产品,限制了其使用。总之,开源操作系统,尤其是Linux做Web应用是首选已经是一个既定事实。

常用的系统架构是:

Linux + Apache + PHP + MySQL

Linux + Apache + Java (WebSphere) + Oracle

Windows Server 2003/2008 + IIS + C#/ASP.NET + 数据库

数据库

因为是千万人同时访问的网站,所以一般是有很多个数据库同时工作的,说明白一点就是数据库集群和并发控制,数据分布到地理位置不同的数据中心,以免发生断电事故。

主流的数据库有Sun的是MySQL和Oracle。

Oracle是一款优秀的、广泛采用的商业数据库管理软件。有很强大的功能和安全性,可以处理相对海量的数据。而MySQL是一款非常优秀的开源数据库管理软件,非常适合用多台PC Server组成多点的存储节点阵列(这里我所指的不是MySQL自身提供的集群功能),每单位的数据存储成本也非常的低廉。用多台PC Server安装MySQL组成一个存储节点阵列,通过MySQL自身的Replication或者应用自身的处理,可以很好的保证容错(允许部分节点失效),保证应用的健壮性和可靠性。可以这么说,在关系数据库管理系统的选择上,可以考虑应用本身的情况来决定。

MySQL数据库服务器的master-slave模式,利用数据库服务器在主从服务器间进行同步,应用只把数据写到主服务器,而读数据时则根据负载选择一台从服务器或者主服务器来读取,将数据按不同策略划分到不同的服务器(组)上,分散数据库压力。

服务器集群与负载均衡

服务器群集中每个服务结点运行一个所需服务器程序的独立拷贝,而网络负载均衡则将工作负载在这些主机间进行分配。负载均衡建立在现有网络结构之上,它提供了一种廉价有效的方法扩展服务器带宽和增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。它主要完成以下任务:解决网络拥塞问题,服务就近提供,实现地理位置无关性 ;为用户提供更好的访问质量;提高服务器响应速度;提高服务器及其他资源的利用效率;避免了网络关键部位出现单点失效。

常用的服务器集群和数据库集群负载均衡实现方法:

Citrix NetScaler的硬件负载均衡交换机做服务器集群的负载均衡。

MySQL Proxy做MySQL服务器集群的负载均衡并实现读写分离。其实现读写分离的基本原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。

CDN (Content Delivery Network): 几乎在各大网站都有使用该技术。例如,使得你的网站在各省市访问更快,其原理是采取了分布式网络缓存结构(即国际上流行的web cache技术),通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的cache服务器内,通过DNS负载均衡的技术,判断用户来源就近访问cache服务器取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度,如同提供了多个分布在各地的加速器,以达到快速、可冗余的为多个网站加速的目的。

缓存

众所周知,使用缓存能有效应对大负载,减少数据库的压力,并显著提高多层应用程序的性能,但如何在集群环境中使多个缓存、多层缓存并保存同步是个重大问题。大型网站一般都使用缓存服务器群,并使用多层缓存。业内最常用的有:

Squid cache,Squid服务器群,把它作为web服务器端前置cache服务器缓存相关请求来提高web服务器速度。Squid将大部分静态资源(图片,js,css等)缓存起来,直接返回给访问者,减少应用服务器的负载

memcache,memcache服务器群,一款分布式缓存产品,很多大型网站在应用; 它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。

e-Accelerator,比较特殊,PHP的缓存和加速器。是一个免费开源的PHP加速、优化、编译和动态缓存的项目,它可以通过缓存PHP代码编译后的结果来提高PHP脚本的性能,使得一向很复杂和离我们很远的 PHP脚本编译问题完全得到解决。通过使用eAccelerator,可以优化你的PHP代码执行速度,降低服务器负载,可以提高PHP应用执行速度最高达10倍。

独立的图片服务器

无论从管理上,还是从性能上看,只要有可能,尽量部署独立的图片服务器。这几乎成为常识了。具备独立的图片服务器或者服务器集群后,在 Web 服务器上就可以有针对性的进行配置优化。

其他

一个互联网应用,除了服务器的操作系统,Web Server软件,应用服务器软件,数据库软件外,我们还会涉及到一些其他的系统,比如一些中间件系统、文件存储系统(图片服务器,视频服务器,管理服务器,RSS和广告服务器等等)、全文检索、搜索、等等。会在以后介绍。

转载于:https://www.cnblogs.com/Athrun/archive/2009/06/19/1506613.html

相关文章:

Matlab数据的可视化 -- 饼图

本篇微信图文主要介绍Matlab数据可视化方面的内容。pie

Rushcrm:企业部署CRM系统做什么

现在很流行的一个词就是大数据,很多企业开始重视数据的开发利用。CRM在这样的环境背景下诞生了,但这并不意味着所有的企业都能很好的利用好CRM系统(客户关系管理系统)。CRM带来的效益是显而易见的,但是购置了CRM系统仅仅是第一步,…

slot没有毁灭的问题_解析flink之perjob模式下yn参数不生效问题

概要:0. 问题背景1. Stream Job的切分2. 计算资源的调度 & 任务的执行3. 最后的总结0. 问题背景:开始用flink处理流式作业的时候,用yarn-cluster模式提交作业的时候,脚本如下:$FLINK_BIN run -m yarn-cluster -yqu…

获取access中表的相关信息

就用到两条.net自带的获取数据库信息的语句 OleDbConnection con new OleDbConnection(connection); // OleDB数据库连接实例 // 获取数据库中表的相关信息DataTable dt con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "Table"…

Matlab数据的可视化 -- 茎干图

本篇微信图文主要介绍Matlab数据可视化方面的内容。stem

Wink发布Wink Hub2家庭物联网控制中心

智能家居主要厂商之一Wink宣布推出Wink Hub2家庭物联网控制中心,支持更多的家庭物联网产品,更广泛的互联互通,以及提供更好用的控制程序。Wink Hub2主要作用是连接第三方家庭物联网产品,并从一个集中的应用程序进行控制。 Wink Hu…

mysql repalication_MySQL主从复制的原理及配置方法(比较详细)

一、复制的原理MySQL 复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。将主服务器的数据拷贝到从服务器的一个途径是…

贸易保护主义不能解决德国光伏企业的问题

针对德国媒体近期将该国光伏巨头SolarWorld宣布破产一事与中国相关联,甚至指责“中国盗走德国工作”的论调,中国驻德国大使馆经济商务参赞处公使衔参赞王卫东18日向记者表示,SolarWorld作为当初推动欧盟发起对华光伏产品“双反”措施的领头公…

Matlab数据的可视化 -- 平面多边形的着色

本篇微信图文主要介绍Matlab数据可视化方面的内容。fill

ASP.net session 使用总结(2)

Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息。举个例子来说,我们可以把已登录用户的用户名放在Session中,这样就能通过判断Session中的某个Key来判断用户是否登录,如果登录…

python re模块_Python re模块

正则表达式元字符说明. 匹配除换行符以外的任意字符^ 匹配字符串的开始$ 匹配字符串的结束[] 用来匹配一个指定的字符类别? 对于前一个字符字符重复0次到1次* 对于前一个字符重复0次到无穷次{} 对于前一个字符重复m次{m,n} 对前一个字符重复为m到n次\d 匹配数字,相…

国外优秀开源PHP建站程序一览

大量的PHP开源(开放源代码/Open Source)应用改变了这个世界,改变了互联网,以下我们总结从数据库到购物、博客等众多类型的开源PHP软件,供网站开发者们参考。 博客:WordPress WordPress是使用PHP开发的著名博…

《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一一2.1 引言...

本节书摘来自华章计算机《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一书中的第2章,第2.1节,作者:[美] 德博拉诺兰(Deborah Nolan)  邓肯坦普朗(Duncan Temple Lang)  更多章…

Matlab数据的可视化 -- 三维特殊图形

本篇微信图文主要介绍Matlab数据可视化方面的内容。plot3,bar3,barh3,scatter3

baidumap api MySQL_百度地图API开发笔记一(基础篇)

什么是百度地图API?百度地图API是一套由JavaScript语言编写的应用程序接口,它能够帮助您在网站中构建功能丰富、交互性强的地图应用。百度地图API包含了构建地图基本功能的各种接口,提供了诸如本地搜索、路线规划等数据服务。测试js API代码(…

Matlab数据的可视化 -- 三维网格图形

本篇微信图文主要介绍Matlab数据可视化方面的内容。mesh,meshc,meshz

我国网络安全人才培养缺口巨大

近日在武汉举行的国家网络安全宣传周的相关论坛上,我国网络安全人才培养缺口巨大成为与会专家热议的话题。来自中央和地方相关部门、高校研究者、互联网企业代表均认为,我国网络安全人才输出仍距国家、企业需求有较大差距。 去年6月&#xff…

如何写网站的robots.txt和meta name robots的配置

robots.txt基本介绍robots.txt是一个纯文本文件,在这个文件中网站管理者可以声明该网站中不想被robots访问的部分,或者指定搜索引擎只收录指定的内容。当一个搜索机器人(有的叫搜索蜘蛛)访问一个站点时,它会首先检查该…

mysql innodb_data_file_path_关于innodb_data_file_path设置

关于innodb_data_file_path设置启动Mysql时报错,无法正常启动,通过日志发有数据文件大小错误,日志如下截图:[ERROR] InnoDB: auto-extending data file /usr/local/mysql/data/ibdata1 is of a different size 768 pages (rounded…

BM提供支持云的量子计算平台,以加速创新

IBM研究院日前首次宣布公众可试用IBM量子处理器。从5月4日开始,IBM通过云服务,使所有有兴趣亲自实践的人们可以接触到量子处理器,帮助科学家和科研社区加速科技创新,并在该领域激发出更多的前沿应用。 这仅仅是量子计算时代的开始…

Matlab数据的可视化 -- 图形格式的设置

本篇微信图文主要介绍Matlab数据可视化方面的内容。title、x,y,zlabel、legend、title、axis、text等

(转)koogra--Excel文件读取利器

koogra是一个.net平台下开源的excel读取程序,可以在开源社区下载它。使用它我们无需office就可以读取excel文件。尽管这个程序已经停止了更新,但是它还是很好用的。下面介绍怎么使用它。下载到该程序的源代码,编译生成Net.SourceForge.Koogra…

mysql切换系统盘命令_mysql常用命令

一、连接MySQL格式: mysql -h主机地址 -u用户名 -p用户密码1、例1:连接到本机上的MYSQL。首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好…

Matlab数据的可视化 -- 视角与色彩控制

本篇微信图文主要介绍Matlab数据可视化方面的内容。view,colormap

大数据、智慧城市成生态贵州新名片

2016年中国贵州内陆开放型经济试验区跨境投资贸易洽谈会将于11月10日在贵安新区正式开幕。据主办方介绍,此次洽谈会邀请了来自美国、澳大利亚等24个国家和地区的100多家境外企业,以及1000多家国内企业参加,预计签约总金额或超过1400亿元。 9日…

提升网络安全 十大策略全面巩固企业内网

几乎所有企业对于网络安全的重视程度一下子提高了,纷纷采购防火墙等设备希望堵住来自Internet的不安全因素。然而,Intranet内部的攻击和入侵却依然猖狂。事实证明,公司内部的不安全因素远比外部的危害更恐怖。 大多企业重视提高企业网的边界安…

oracle mysql事物隔离级别_Oracle数据库事物隔离级别

事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度。两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:1、幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新…

Matlab数据的可视化 -- 柱形立体图

本篇微信图文主要介绍Matlab数据可视化方面的内容。cylinder

中国大陆光伏中上游触底反弹 台湾省亦酝酿涨势

太阳能需求在中国十一长假前回温,厂商受限于人力的调配,难以立即将稼动率全开,使得短期供给无法立即上升以呼应需求,因而中国大陆市场从多晶硅至电池片价格出现短暂触底反弹的情形,台湾省厂商也正酝酿涨价动能。 多晶硅…

js版的box2D

http://sourceforge.net/projects/box2d-js/files/ 受不了了 转载于:https://www.cnblogs.com/vilyLei/articles/1522800.html