高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”。
如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储)。
如:能缓存在用户电脑本地的,就不要让他去访问CDN。 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了。能访问静态服务器的,就不要去访问动态服务器。以此类推:能不访问数据库和存储就一定不要去访问数据库和存储。
说 起来很轻松,实际做起来却不容易,但只要稍加努力是可以做到的,Google的日独立IP过亿不也做到了么?我们这几千万的PV站比起Google不是小 屋见大屋了。我们还是先从我们的小屋搭起吧!哈哈!下面内容的介绍起点是千万级别的PV站,也可以支持亿级PV的网站架构。
高性能高并发高可扩展网站架构访问的几个层次:
有人会问,我们老是说把用户对业务的访问往前推,到底怎么推啊?推到哪呢?下面,老男孩就为大家一一道来。
第一层:首先在用户浏览器端,使用Apache的mod_deflate压缩传输,再比如:expires功能、deflate和expires功能利用的好,就会大大提升用户体验效果及减少网站带宽,减少后端服务器的压力。当然,方法还有很多,这里不一一细谈了。
提示:有关压缩传输及expires功能nginx/lighttpd等软件同样也有。
第二层:页 面元素,如图片/js/css等或静态数据html,这个层面是网页缓存层,比如CDN(效果比公司自己部署squid/nginx要好,他们更专业,价 格低廉,比如快网/CC等(价格80元/M/月甚至更低)而且覆盖的城市节点更多),自己架设squid/nginx cache来做小型CDN是次选(超大规模的公司可能会考虑风险问题实行自建加购买服务结合),除非是为前端的CDN提供数据源服务,以减轻后端我们的服 务器数据及存储压力,而不是直接提供cache服务给最终用户。taobao的CDN曾经因为一部分图片的次寸大而导致CDN压力大的情况,甚至对图片尺 寸大的来改小,以达到降低流量及带宽的作用。
提示:我们也可以自己架设一层cache层,对我们购买的CDN提供数据源服务,可用的软件有
varnish/nginx/squid等cache,以减轻第三层静态数据层的压力。在这层的前端我们也可以架设DNS服务器,来达到跨机房业务拓展及智能解析的目的。
第三层:静 态服务器层一般为图片服务器,视频服务器,静态HTML服务器。这一层是前面缓存层和后面动态服务器层的连接纽带,大公司发布新闻等内容直接由发布人员分 发到各cache节点(sina,163等都是如此),这和一般公司的业务可能不一样。所以,没法直接的参考模仿,比如人人的SNS。
我 们可以使用Q队列方式实现异步的分发访问,同时把动态发布数据(数据库中的数据)静态化存储。即放到本层访问,或通过其他办法发布到各cache节点,而 不是直接让所有用户去访问数据库,不知道大家发现了没有,qq.com门户的新闻评论多的有几十万条,如果所有用户一看新闻就加载所有评论,那数据库不挂 才怪。他们的评论需要审核(美其名约,实际是异步的方式,而且,评论可能都是静态化的或类似的静态化或内存cache的方式),这点可能就是需要 51cto.com这样站点学习的,你们打开51CTO的一篇博文,就会发现下面的评论一直都显示出来了,也可能是分页的。不过,应该都是直接读库的,一 旦访问量大,数据库压力大是必然。这里不是说51cto网站不好,所有的网站都是从类似的程序架构开始发展的。CU也可能是如此。
提示:我们可以在静态数据层的前端自己架设一层cache层,对我们购买的CDN提供数据源服务,可用的软件有varnish/nginx/squid 等cache。在这层的前端我们也可以架设DNS服务器,来达到跨机房业务拓展及智能解析的目的。
第四层:动态服务器层:php,java等,只有透过了前面3层后的访问请求才会到这个层,才可能会访问数据库及存储设备。经过前三层的访问过滤能到这层访问请求一般来说已非常少了,一般都是新发布的内容和新发布内容第一次浏览如;博文(包括微博等),BBS帖子。
特 别提示:此层可以在程序上多做文章,比如向下访问cache层,memcache,memcachedb,tc,mysql,oracle,在程序级别实 现分布式访问,分布式读写分离,而程序级别分布式访问的每个dbcache节点,又可以是一组业务或者一组业务拆分开来的多台服务器的负载均衡。这样的架 构会为后面的数据库和存储层大大的减少压力,那么这里呢,相当于指挥部的外层了。
第五层:数据库cache层,比如:memcache,memcachedb,tc等等。
根据不同的业务需求,选择适合具体业务的数据库。对于memcache、memcachedb ttserver及相关nosql数据库,可以在第四层通过程序来实现对本层实现分布式访问,每个分布式访问的节点都可能是一组负载均衡(数十台机器)。
第六层:数 据库层,一般的不是超大站点都会用mysql主从结构,如:163,sina,kaixin都是如此,程序层做分布式数据库读写分离,一主(或双主)多从 的方式,访问大了,可以做级连的主从及环状的多主多从,然后,实现多组负载均衡,供前端的分布式程序调用,如果访问量在大,就需要拆业务了,比如:我再给 某企业做兼职时,发现类似的51cto的一个站点,把www服务,blog服务,bbs服务都放一个服务器上,然后做主从。这种情况,当业务访问量大了, 可以简单的把www,blog,bbs服务分别各用一组服务器拆分开,这种方式运维都会的没啥难度。当然访问量在大了,可以继续针对某一个服务拆分 如:www库拆分,每个库做一组负载均衡,还可以对库里的表拆分。需要高可用可以通过drbd等工具做成高可用方式。对于写大的,可以做主主或多主的 MYSQL REP方式,对于ORACLE来说,来几组oracle DG(1master多salve方式)就够了,11G的DG可以象mysqlrep一样,支持读写分离了。当然可选的方案还有,mysql cluster 和oracle 的RAC,玩mysqlcluster和oracleRAC要需要更好更多的硬件及部署后的大量维护成本,因此,要综合考虑,到这里访问量还很大,那就恭 喜了,起码是几千万以上甚至上亿的PV了。
象百度等公司除了会采用常规的mysql及oracle数据库库外,会在性能要求更高的领域,大量的使用nosql数据库,然后前端在加DNS,负载均衡,分布式的读写分离,最后依然是拆业务,拆库,。。。逐步细化,然后每个点又可以是一组或多组机器。
特 别提示:数据库层的硬件好坏也会决定访问量的多少,尤其是要考虑磁盘IO的问题,大公司往往在性价比上做文章,比如核心业务采用硬件netapp/emc 及san光纤架构,对于资源数据存储,如图片视频,会采用sas或固态ssd盘,如果数据超大,可以采取热点分取分存的方法:如:最常访问的10-20% 使用ssd存储,中间的20-30%采用sas盘,最后的40-50%可以采用廉价的sata。
第七层:千 万级PV的站如果设计的合理一些,1,2个NFSSERVER就足够了。我所维护(兼职)或经历过的上千万PV的用NFS及普通服务器做存储的还有大把, 多一些磁盘,如SAS 15K*6的,或者用dell6850,搞几组 NFS存储,中小网站足够了。当然可以做成drbd+heartbeat+nfs+a/a的方式。
如果能达到本文设计要求的,中等规模网站,后端的数据库及存储压力会非常小了。 象门户网站级别,如sina等,会采用硬件netapp/emc等等硬件存储设备或是san光纤同道,甚至在 性价比上做文章,比如核心业务采用硬件netapp/emc及san光纤架构,对于资源数据存储,如图片视频,会采用sas或固态ssd盘,如果数据超 到,可以采取热点分取分存的方法:如:最常访问的10-20%使用ssd存储,中间的20-30%采用sas盘,最后的40-50%可以采用廉价的 sata。
象百度等巨型公司会采用hadoop等分布式的存储架构,前端在加上多层CACHE及多及的负载均衡,同样会根据业务进行拆分,比如爬虫层存储,索引层存储,服务层存储。。。可以更细更细。。。为了应付压力,什么手段都用上了。
特殊业务,如人人,开心网,包括门户网站的评论,微博,大多都是异步的写入方式,即无论读写,并发访问数据库都是非常少量的。
以上1-7层,如果都搭好了,这样漏网到第四层动态服务器层的访问,就不多了。一般的中等站点,绝对不会对数据库造成太大的压力。程序层的分布式访问是从千万及PV向亿级PV的发展,当然特殊的业务 还需要特殊架构,来合理利用数据库和存储。
相关推荐
服务器高并发负载解决方案 服务器高并发负载解决方案旨在解决服务器面临的高并发请求问题,提高服务器的性能和稳定性。下面将详细介绍解决方案中的几个关键点。 防盗链 防盗链是指防止其他网站盗用本站的资源,...
"一言以蔽之,十年架构之路汇成一句话"这个标题,虽然简洁,却蕴含了丰富的经验与智慧。这句话可能是对长期从事架构设计工作的一种提炼和总结,暗示了架构设计的核心原则或关键洞察。而"上课了"组织的这场峰会,则...
"libcuckoo" 是一个基于 C++ 编写的库,其核心功能在于提供高效的哈希表数据结构,而在 "libcuckoo-windows" 中,这个库被优化以适应 Windows 平台的需求,确保在多线程环境下能够实现高并发性能。 **描述详解:** ...
RAM是硬盘,硬盘是磁带:这句话是形象地表示在高性能计算中,内存的重要性堪比传统意义上的硬盘,而硬盘的性能相对较低,类比于更慢的磁带存储。 Amdahl定律:描述了在并行计算中,系统整体性能提升的上限由最慢的...
【描述】"Bank System,you think you are very smart,indeed ,you are very foolish" 这句话带有双关意味,既可能是在称赞系统设计者的聪明才智,也可能是在批评他们自以为是的愚蠢。这可能意味着系统在某些方面具有...
28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号 答:Select ID FROM table1 Where ...
- **best practise for VNX.**:这句话进一步明确文档旨在提供针对EMC VNX存储系统的最佳实践指南。 ### VNX存储系统基本概念 VNX系列是EMC公司推出的统一存储平台,支持块级(Block)和文件级(File)存储服务。...
【描述】:“the source is so good that I can't help to share it with all of us.” 这句话表达了对Java代码质量的高度赞赏,并且分享的意愿表明这个代码实例很可能包含了极具价值的教学内容或高效的编程实践。...
WebCC是一款针对网站性能和稳定性的专业压力测试工具,主要用于评估网站在高并发访问下的响应速度和负载能力。这个压缩包文件包含了WebCC的压力测试软件“独醉cc.exe”,以及可能的辅助材料如“测试图.png”(可能...
**标题解析:** "SP Server (IOCP)" 指的是一种基于IO完成端口(Input/Output Completion Port,简称IOCP)技术构建的网络服务器...同时,解决这些BUG也将是一个挑战,有助于提升开发者在高并发网络编程方面的技能。
- **传感器数据的特点**:“sensor数据没有时间就没有了灵魂”,这句话形象地说明了时间戳对于时间序列数据的重要性。 #### 网易时序数据库系统架构与核心技术 - **数据时间分片**:通过将数据按时间区间分片存储...
"这句话表明该框架是由一位有经验的游戏公司首席程序员精心打造的,这意味着它可能包含了业界最佳实践和优化,能够处理高并发、低延迟的需求,确保游戏服务的顺畅运行。此外,由于得到了如此高的评价,我们可以推测...
"水晶岛酒店"可能是一个虚拟的业务背景,要求解决实际的业务问题,如处理高并发的在线支付请求,优化交易流程,或者设计一个安全的支付架构。 下面我们将深入探讨这些可能出现在阿里巴巴试题中的关键知识点: 1. *...
”这句话不仅反映了个人成长的过程,也暗示了技术领域内,尤其是在Linux系统性能调优方面,随着时间的推移和技术的成熟,我们可以更加深入地理解和掌握其中的核心概念和技术细节。 #### 2. epoll概述 **2.1 技术...
5. **性能优化**:针对大型数据集和高并发场景,Dundas Gauge 进行了性能优化,确保在大量数据渲染时仍能保持流畅的用户体验。 二、应用场景 1. **企业管理**:在企业级应用中,Dundas Gauge 可用于监控关键业务...
"不断进步,经得起时间检验的技术,才是好技术",这句话高度概括了淘宝技术团队的核心理念。本书通过丰富的案例和详实的数据,展示了淘宝如何在激烈的市场竞争中,依靠强大的技术实力,打造出一个高效、稳定且极具...
【描述】"从0到1构建分布式秒杀系统,脱离案例讲架构都是耍流氓",这句话表达了在IT行业中,尤其是在软件开发领域,理论与实践并重的理念。分布式秒杀系统是一个高并发、高性能的应用场景,对于理解和掌握微服务架构...
【描述】"很有用的,希望大家可以用到,欢迎下载"这句话暗示了这个"大转盘抽奖"工具具有实用性,并且开发者希望它能广泛应用于不同的场合。这可能是一个开源项目或者由专业团队开发的软件,提供给用户免费下载和使用...
在描述中,“很好的,可以试一下阿哦”这句话表明该程序具有一定的质量,值得尝试。这可能意味着它设计得相当完善,能够有效地模拟或演示操作系统的基本功能和概念。 结合标签“压力”和“操作系统”,我们可以推测...
描述中只有一句话,“164个JAVA完美程序”,这表明该压缩包内含有164个不同的Java代码文件,每个都被视为“完美”,意味着它们可能是经过精心编写和测试的,可以作为学习和参考的模板。这些程序可能涵盖了从基础语法...