大型网站系统架构的演进(一)(转)

前言

写这篇文章的目的是想用来帮助自己思考和理清头绪,以及如何从一个简单的网站架构演进发展成一个大型网站架构,主要侧重在技术方面 

简单的网站

由于我没有做过php,那么就以jsp为例,jsp做网站前端,以电子商务网站为例,描述一个简单的网站架构 

前端 jsp+css+js 

后端 java ssh 

Web容器 tomcat 

数据库 mysql 

开发人员,美工1个,前端一个,java一个 

部署方案为: 

一台服务器,部署tomcat和mysql 

架构图如下: 

应用和数据库分布式部署

那么网站运行一段时间,开始盈利了,用户也增多了,这时候数据库的数据量还不是很大 

但是越来越多的用户访问,会占用大量的服务器内存和cpu,应该要将数据库和应用分开部署,架构图如下 

这样网站还能运营一段时间 

解耦合开发

那么我们再来看看开发方面的问题,但是开发和运维往往是分不开的,由于网站业务发展较快,我们肯定要在上面添加新的功能,否则没法玩了,功能也越来越多,开发人员 也变多了,互相之间依赖也变多了,以前的开发模式是,java程序员从jsp一直写到dao,全部包揽,那么现在有5个java一起开发了,各负责不同的功能,如用户模块,商品模块,订单模块,交易模块等,那么问题就来了 

1 java程序员经常干些调css,和写大量javascript的活,我们用的是jquery 

2 并不是每次都要等到所有模块都完成开发了才上线,很多时候只需要一个模块完成修改,就可以上线了,然后代码都写在一个项目里面,版本控制变得相当困难,而且每次修改一个模块的功能,可能影响到另一个模块的功能,导致项目变的非常不稳定,正在运营中的项目,出现这种情况将是致命的,无限的加班加点也于事无补,痛苦啊。 

解决方案1(模块化)

这是多年前我想到的一个方案,这么多功能不能混乱的放在一个project里面,这里我指的是java web项目,至少要在开发的时候模块化,将不同的功能独立出去,模块之间通过接口调用,比如分为用户模块,应用模块,商品模块,订单模块,交易模块等,不同的人负责开发,那么模块之间怎么进行通信呢,我当时的方案是,每个后端模块都是一个jar包项目,发布的时候打成jar包给其他模块调用,项目通过maven进行构建,这样开发到部署就比较自动化,基本实现模块化开发了,项目发布也变得稳定多了。 

 

用maven做模块化的缺点

这个思想是从spring那里得来的,他们也是将不同功能进行模块化,然后这种形式却有很多的缺点: 

1 随着时间的推移,各个模块都在不停的更新,版本一直在升级,假如模块A依赖模块B,C 

可以理解为A是web前置模块,B是用户模块,C是订单模块 

如下图: 

如果B或者C变更了,那么A有2种选择: 

1 不更新B和C,仍然可以用,带来的后果将是得不到最新的b和c的功能支持 

2 如果选择更新,A需要重新加入新的B或者C的jar包并进行调试和测试工作, 

从接口依赖来看 

由于B和C需要查数据库,因此B和C的jar包暴露了过多的api给A,且没办法很好的控制,对于项目A的开发者来说,接口不明确,几乎所有public的方法都可以调用,这样B和C的变更对上层的A来说,造成的影响是不可控的。 

从系统性能来看 

由于B和C都是要查数据库的,那么以jar的形式在A中,占用A项目所有服务器的内存和cpu等资源,无法分布式部署。 

解决方案2:模块化并分布式部署

那么应该用什么方案呢,最好是分布式部署,A与B,C通过网络通信进行调用 

这样带来的好处 

1 A,B,C实现分布式部署 

2 B,C提供明确的接口给A调用,只要接口不变,B和C修改内部业务逻辑,A不需要重新构建和部署,达到最大限度的解耦合,就是说修改系统的部分功能,其他模块可以不受影响,或者受较小影响,而且影响范围是可以控制的。

http://www.cnblogs.com/tangyanbo/p/4387167.html

 

时间: 2024-11-03 02:45:10

大型网站系统架构的演进(一)(转)的相关文章

大型网站系统架构演化之路

大型网站系统架构演化之路 前言 一个成熟的大型网站(如淘宝.天猫.腾讯等)的系统架构并不是一开始设计时就具备完整的高性能.高可用.高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式.技术架构.设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线.所以成熟的系统架构是随着业务的扩展而逐步完善的,并不是一蹴而就:不同业务特征的系统,会有各自的侧重点,例如淘宝,要解决海量的商品信息的搜索.下单.支付,例如腾讯,要解决数亿用户的实时消息传

大型网站系统架构分析

http://blog.csdn.net/tglg/archive/2009/12/03/4923999.aspx

大型网站系统学习笔记

大型网站及其架构演进过程     (一)网站初建     作为一个交易网站,需要具备的最基本三个功能:     (1) 用户:用户注册.用户管理.信息维护--     (2) 商品:商品展示.商品管理--     (3) 交易:创建交易.交易管理--  如果基于JAVA用单机技术,即一台服务器来构建应用,示意图大概会如下所示   各个功能模块之间通过JVM内部方法调用来进行交互,而应用和服务器则通过JDBC进行访问 (二)单机负载告警,数据库与应用分离     网站对外服务后,访问量会不断增大,

专访曾宪杰:大型网站系统与Java中间件实践

摘要:淘宝近10年来历次技术飞跃的参与者.贡献者和带领者曾宪杰做客了CSDN社区问答栏目,担任第四期的嘉宾,带您了解大型网站系统与Java中间件的实践.在活动开始之前,我们采访到了曾老师,一窥他的技术和人生. 编者按:淘宝技术部总监.淘宝技术委员会Java分会会长曾宪杰将携他的新书<大型网站系统与Java中间件实践>做客我们社区问答栏目,担任第四期的问答嘉宾,届时会接受广大网友的提问,欢迎各位网友前来与淘宝网中间件大牛曾宪杰一起碰撞思想的火花.以下为采访正文:  淘宝技术部总监曾宪杰,他是淘宝

CSDN社区问答第4期:曾宪杰 大型网站系统与Java中间件

问题描述 本期的社区问答(5月19日-5月25日)我们请来了<大型网站系统与Java中间件实践>一书的作者曾宪杰(华黎)为大家解答关于大型网站和支撑大型网站架构的Java中间件.分布式系统方面的问题.曾宪杰,淘宝花名华黎,现任淘宝技术部总监.2002年毕业于浙江大学计算机系.2007年加入淘宝网平台架构团队,负责构建淘宝自主的消息中间件系统,同期主导了淘宝数据层的创建,这两个产品也是淘宝中间件中较为重要的两个.2010年下半年起开始负责整个淘宝中间件团队,帮助团队成为业内知名的Java技术团队

一、大型网站技术架构演化

大型网站系统的特点 1.高并发,大流量 2.高可用:7*24小时不间断服务,不宕机 3.海量数据储存及管理 4.网络复杂 5.安全性 6.易扩展,可伸缩:需求快速变更,发布频繁 7.渐进式发展:脸谱网是宿舍,谷歌是斯坦福大学实验室,淘宝是马云家 一句话,高可用,高性能,易扩展,可伸缩且安全的网站. 大型网站架构演化发展历程 1.初始阶段     单机服务器:应用程序+数据库+文件都在一台服务器上. 2.应用服务和数据服务分离     应用服务器,文件服务器和数据库服务器. 中间通过通信的是:HT

大型网站技术架构——核心原理与案例分析(一)

一.大型网站架构模式: 1.分层 - 横向 如应用层.服务层.数据层 2.分割-纵向 将业务化分为不同粒度的细小的功能和服务 如订单业务.购物车业务.短信业务.邮件业务等 3.分布式-将不现的服务.不同的模块部署在不同的服务器,通过远程调用协同工作,分布式静态资源.分布式数据和存储.分布式计算.注意,会对性能有影响(网络请求开销),分布式事物.数据一致性. 4.集群-用更多服务器提供相同的服务,可以提供很好的并发性,不足以支持访问量时,只需要要向集群中加入新的机器即可.当一台机子不可用时,可通过

大型网站的实例分析 掌握构建大型网站的架构

本文主要以理论为主,建议您阅读下面的相关阅读,是关于国外大型照片分享网站Flickr的http://www.aliyun.com/zixun/aggregation/11116.html">网站架构方案研究,很实际很有用. 学习和掌握构建大型网站的架构,需要汇总散落的文章,梳理零散的内容.做好这项工作很有意义,但是也比较困难.我们的体会是,不妨抓住以下几个主题,逐个分析大型网站的实例,然后横向比较. 1. Database 数据存储历来是麻烦,尤其是需要存储海量数据的时候,往往单个数据库容

app-PHP PC APP 移动网站系统架构

问题描述 PHP PC APP 移动网站系统架构 之前项目需求做一个移动网站,我选了PHPCMS来做后台,前端HTML5. 现在需求加入要支持PC,APP 需求一直在增加. php做服务端, 1 需要具备CMS功能,信息的发布,PC端 2 又要提供APP 接口. 3 提供API接口给第三方. 现在集成在一起用PHPCMS做? 还是分成2,3个系统,一个提供CMS功能,一个提供接口功能,提供API,公用一个数据库 后台要集中管理几个系统. 解决方案 如果你要做一个需求很多的网站,用现成的PHPCM