Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72118
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 191
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-17 23:01
文章分类

全部博文(8)

文章存档

2014年(8)

我的朋友

分类: 架构设计与优化

2014-10-15 21:58:24

《大型网站架构设计的思路分析》

小型网站的设计通常都比较简单。开发者往往把精力集中在业务逻辑的实现方面,对整体的技术选型则没有那么重要,选择自己熟悉的技术体系即可。而大型网站的设计则不然,一个大型、稳健、成熟的网站背后,往往会涉及众多技术的结合体,而且架构设计往往也比较复杂。对于什么是大型网站,业界并没有给出严格的定义,通常我们是根据访问量和数据流量来判断是否为大型网站的。由于大型网站要支撑海量的数据和海量用户超高并发的访问量,因此它肯定是一个分布式系统。

那么大型网站的架构设计面临着哪些挑战呢?显然是,高并发访问、海量数据处理、高可伸缩性、高可靠运行、高安全性等一系列问题与挑战,这也是大型网站架构设计的技术目标。大型网站通常都是从小网站一步一步发展起来的,可以从小网站的结构开始,一步步地看网站由小变大,架构是如何演进的。小型网站的架构设计是非常清晰、简单的,而且有很多技术选择。国内常见的技术选型有:
SSH架构:即Struts+Spring+Hibernate的技术架构,再加上后端MySQL存储,页面HTML、CSS和JavaScript等技术,以及Tomcat、JBoss、Jetty等Java应用服务器技术,就是一个比较完善的通用小型网站的技术架构了。相似的技术方案有很多,还可以把Struts换成JSF,比如RichFaces、MyFaces、PrimeFaces等,也可以把Hibernate换成MyBatis、EclipseLink等持久化技术,这些技术可以任意组合。
LAMP架构:也即Linux+Apache+MySQL+PHP的技术架构,Apache可以替换成Nginx等等。
RoR架构:Ruby语言实现业务逻辑,页面仍然使用HTML、CSS和JavaScript等技术,Rails作为整体框架,后端存储采用MySQL或PostgreSQL等,也是不错的技术选型。
类似的技术选型还有很多,Python+Django、Groovy+Grails等。
还有比较新潮的Golang、Node.js等技术可用于开发网站。

当小型网站的用户访问量不断增长的时候,网站整体技术架构就需要做扩展了。一方面网站前端页面需要做缓存了,后端数据库也可能面临访问瓶颈,也需要采用缓存机制了。另一方面,应用服务器可能也扛不住了,需要添加服务器,也就是做应用服务器的集群,一旦做集群,就会使用负载均衡方案。当用户访问量继续不断增长,系统变慢,我们需要找到系统的性能瓶颈所在。可能有数据库连接存在资源竞争,那么我们就需要对数据库进行分库、分表,再进一步就是对数据库进行读写分离。这样,数据库的集群和分布式也就引入了进来。再进一步,数据库的部分数据也可以采用分布式缓存技术,以便进一步提升性能。
用户访问再次不断增长,我们需要进一步做分布式方案。根据业务进行切分,把逻辑上独立的业务分拆到不同的服务器集群上。到了这个地步,网站通常已经是大型网站了。相关的问题会有很多,比如业务的梳理、整合和拆分,系统的运维、监控和报警、优化等,数据库的性能调优,数据的灾备,分布式存储的引入,采用消息中间件对系统进行解耦等等。

实际的大型网站设计往往更加复杂,业务需求也是变化多多。但是,万变不离其宗,根据不同的需求选择不同的技术方案。比如图片的存储,初期可以存储于数据库中,在演进过程中可以把它拿出来,改为存储到专门的图片服务器上,再继续演进,就该采用分布式文件系统了,比如FastDFS。一句话,根据具体的业务场景和现实情况,采取最适合的技术。千万别犯那种采用大炮打蚊子的错误。

以上只是泛泛而谈,因为这个话题可以写一本书,《大型分布式网站架构设计与实践》就是详述了大型网站架构设计的书籍,要想了解大型网站的架构细节,请阅读这本书吧!

阅读(2794) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~