转载请注明出处:http://blog.csdn.net/anxpp/article/details/51614973,谢谢!
1、概述
本人并未经历过1个网站从小到大的演变进程(这类机会本来就太小,而且愈来愈小),现在很多网站,从建立之初就搭建在大型网站提供的云计算服务之上,需要的1切资源都可以按需购买,并且极易伸缩。不过我觉得还是有必要了解1下大型网站的演变进程。下文是参考多方资料整理得出。
2、大型网站架构演变进程
下面就是本人参考多方资源总结而得。
2.1、初始阶段的网站架构
网站1开始,使用的人其实不多,访问量比较小,使用1台服务器就已完全满足要求的。我们的个人主页、博客,都可使用以下架构:
利用程序、
数据库和文件等资源,都在同1台
服务器上。通常也使用1些开源免费的软件来将本钱最低化。
2.2、利用服务于数据服务分离
他们根据各自的特性,对cpu、内存和硬盘等的需求也各不相同:
利用服务于数据服务分离后,不同特性的
服务器担负不同的角色, 系统整体性能将大大提高。
2.3、使用缓存改良性能
我们很清楚,其实不是所有的资源都被平均访问到,恰好相反,1部份资源可能会被非常频繁的访问,而另外1些则几近不会被访问。
如果我们将最常被访问的资源直接放到内存中(或其他的缓存方式),由于不再需要从
数据库(硬盘)中读取,速度将会大大提高,不过也会增加对内存的需求。
而缓存1般分两种,利用
服务器本地缓存和远程缓存。本地缓存因内存缘由,不合适放太多,所以可以专门部署大内存的
服务器,当远程缓存
服务器(速度比本地缓存会慢些)。而目前的缓存技术也比较多,常见的NoSQL
数据库也常被用来当缓存工具使用,本地缓存也能借助1些框架实现,这时候的架构以下:
使用缓存后,数据访问压力会大大减小。
2.4、使用服务器集群
业务继续发展后,高并发的访问不可避免,使用
服务器集群是比较经常使用的有效手段。
这相当于将1台利用
服务器复制多个,然后通过负载均衡
服务器,将要求分发到不同的利用
服务器,他们干的是相同的事,不过压力会大大减小:
根据高并发的情况,可以增加或减少其中的利用
服务器,从而使系统有较好的伸缩性。
2.5、数据库读写分离
虽然缓存能1定程度上优化数据访问,但是当业务发展1定程度时,
数据库的负载压力可能还是会太高,从而成为瓶颈。
为了便于利用
服务器的扩大和更容易的访问主从两个
数据库,通常会从利用
服务器中独立出来1个专门用来访问
数据库的数据访问模块。
2.6、使用反向代理和CDN加速访问
CND和反向代理都是使用缓存的原理,区分在于前者部署与网络提供商的机房,使用户咋要求资源时,从就近的机房获得数据;后者部署于利用
服务器前端,用户要求到达后,会有限返回
服务器中缓存的可用资源。
这两种技术主要目的就是加速用户的访问,使数据返回更快,同时还能减轻后端
服务器的负载压力。
2.7、散布式文件服务器和散布式数据库
随着业务的日趋增长,任何单个强大的
服务器都不能满足业务的需求,这时候可使用散布式
数据库和散布式文件
服务器。
2.8、使用NoSQL和搜索引擎
通常使用NoSQL和搜索引擎技术来处理复杂的数据存储和检索:
2.9、业务拆分
随着业务的进1步发展,也使其变得更加复杂,致使全部系统难以保护。
这时候就能够将全部业务拆分成不同的产品线,再按需将各个产品线拆分成不同的利用,并对这些利用单独部署保护,然后以超链接、消息队列数据分发和访问统1的数据存储系统来关联这个完全的系统:
2.10、散布式服务
随着业务的拆分得愈来愈小,全部系统的关联上也变得日趋复杂,部署保护仍然是1件非常困难的事。
这时候可以将这些业务中1些通用的地方提取出来独立部署加以复用,提供统1的服务:
3、其他
目前,实现以上架构都有大量成熟稳定的技术支持,博客后续也会陆续更新添加相干技术的文章。
对架构的选择,不能1味寻求大而全,应当以当前业务及后续发展公道选择,既能节俭直接本钱,还能下降开发、部署和保护的本钱。