大型网站构架路线图

如何构架一个复杂的网站,如果一个网站处于发展初期,或者规划阶段,在构架技术上我们关注的重点是什么?

构架能解决什么?

一两个程序员外加一个美工可能就能做出一个看起来不错的网站。那么构架是什么,能解决什么问题呢?

这里可以回答问题,一、构架能解决扩展性问题 二、构架能解决性能问题

随着创业公司的不断发展,业务上对网站的要求越来越多,扩展的功能越来越多,比如上个月家视频,下个月加音频,或者改变业务处理流程,这要求网站在构架上具有很大的灵活性,能够适应未来的变化。

随着访问量的不断增加,对网站的应能要求越来越高,因此网站构架要考虑到性能的问题。

扩展性是基础,性能的解决是基于扩展性的基础上的。

扩展分成两个方面,基于功能的扩展,基于性能的扩展。

 

先说功能的扩展: 

我们系统设计要基于需求,又要高于需求。以满足业务的拓展需要。
比如说购物模块,公司高层和市场部总会体术不同的促销策略,有些需求第一天提出第二天就要求完成,这要求我们的系统设计有足够高的扩展性满足这样的需求。我的方法就是设计模式,首先预知不确定性的变化,而作针对性的设计。

性能扩展:


性能扩展分纵向和横向
纵向的扩展比较简单,提高硬件的处理能力,但这种方法是有限度的。另外提高程序的运行效率,比如优化算法,优化查询,这种也是有极限的。

横向扩展。

 

第一步、子系统划分

网站创建之处,从成本(技术、人力和财力成本),首要考虑的问题是划分业务系统,比如一个博客系统,我们要把系统分为用户认证系统,内容管理系统,日志系统等

每个子系统都设计出API,现在比较流行的使用 webservice来构建。每个service除了API,内部的实现方式对外界来说完全是透明的。这要做有很多好处

首先保证了部署的灵活性,可以都放到一台机器上,也可以分开不同的机器部署。 这样实现了硬件方向的扩展。

另外修改功能时也不至于影响其他子系统,做功能扩展也方便。

一旦性能压力增大,我们可以方便的采取性能扩展方案,比如增加硬件,或者做分布式。

 

 

第二步、分布式的方案:

应用服务器的分布式要简单的多

部署多台web服务器,共享session.

 

难度在于数据库的分布式。

Db cluster是一种方法,但我们对于cluster的认识只限于一些商业的宣传资料,另外这些技术作为通用的解决方案,他试图解决所有问题,其效率就不是最优的

我更倾向于第二种方案:自己动手做分布式数据库。


具体的处理方法我们可以说一下:
第一条:读写分离
第二条:数据表拆分:

       比如数据到了一定的数量级我们就写存在于另外一台机器上的另外一个库。这样单台机器上的查询效率能比较优化。问题出在综合查询上,不知道应该从那个机器上去做查询,更新也有这样的问题,我们就做是先一个类似又mapreduce的方法。把查询请求发送到每一台机器上,使用一台专门的算法做结果的并归。最总返回用户正确的结果。这样搞一套专门的系统来处理这些事情。其实数据库集群做的就是这样的事情,只不过我们的解决方案是直接针对业务问题来开展的,效率要明显的多。

 

 

 

 


网站建设初期不做这个工作,后期调整构架的成本将会成本增加,甚至导致可能导致无法改动,网站运营的失败。这个道理非常浅显,但在实际中,大量的网站走过了这样的弯路,我们作出了漂亮的页面,新颖的功能,但网站做到一定规模,遇到了性能瓶颈,调整非常困难,另外扩展功能也不顺利,增加了大量的程序员,但工作效率仍然不见提高,导致了成本的直线飙升。


技术选型

理想状态下,技术选型包括按照子系统来划分,选择合适子系统的技术方案,但考虑到成本和管理问题,一般要采用一致的方案。

技术选型包括两部分:

硬件选择相对简单一些

主要考虑到一下因素

      存储系统

      内存的扩展需求

      网络带宽

软件选型:

      操作系统

      操作系统没有其他选择,一般是Linux或windows,我更倾向于使用Linux,因为其稳定,开源资源众多。

      数据库   

      数据库一般有 关系数据库和非关系数据库(Nosql)两种。关系数据库比较可靠,用来存储帐号,用户,交易记录等比较关键的信息,nosql速度快,对硬件要求底,用来存储发帖,文章等占用空间比较大的内容。一般来说刚开始创建网站可以统一采用关系数据库,等网站有了一定的规模把一部分子系统转移到nosql上,同时采用关系数据库和nosql的网站。

      在互联网行业,关系数据库普遍采用开源的mysql,具有成本低的优势。

      nosql中,mongodb不错,其设计逻辑和mysql接近,是开源系统。

  

      后台开发语言和软件框架

      适合网站开发的开发语言有很多,有php,java,asp.net 。影响选择的因素主要有两方面。

       1.软件框架是否能满足业务扩展需求,框架是否简练

       2.该语言是否适应该框架

       3. 开发人员的数量程度

      常用的语言有asp.net java php

      java的框架最丰富,有strus,spring,hitribe 等,但比较复杂,那些都是企业框架,不适合互量网。如果使用java,采用jsp + servlet +  一个webservice框架就够了。

     php 有一个zend framwork,比较不错

     asp.net适合windows系统,一般不建议使用

     当然最重要的问题是考虑程序员的熟练程度。

        

      WEB服务器

        和语言相关,asp.net选择iis

        php选择apache 

        jsp选择较多,一般选择tomcat就足够了。



      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值