分享web2.0:WEB架构设计经验分享

  架构设计几个心得体会:

  不要过设计:never over design

  这是个常常被提及话题但是只要想想你架构里有多少功能是根本没有用到或者最后废弃就能明白其重要性了初涉架构设计往往倾向于设计大而化架构希望设计出具有无比扩展性能适应切需求增加架构web开发领域是个非常动态过程我们很难预测下个星期变化而又需要对变化做出最快最有效响应

  ebay工程师说过他们架构设计从来都不能满足系统增长所以他们系统永远都在推翻重做请注意不是ebay架构师能力有问题他们设计架构总是建立旧版本瓶颈上希望通过新架构带来突破然而新架构带来突破总是在很短时间内就被新增需求淹没于是他们不得不又使用新架构

  web开发是个非常敏捷过程变化随时都在产生用户需求千变万化许多方面偶然性非常高较的软件Software开发希望用个架构规划以后所有设计是不现实

   2web架构生命周期:web architecture‘s le cycle

  既然要杜绝过设计又要保证前瞻性那么如何才能找到其中平衡呢?希望下面web架构生命周期能够帮到你

  WEB架构设计经验分享

  设计架构需要在1-10倍增长下通过简单增加硬件容量就能够胜任而在5-10倍增长期间请着手下个版本架构设计使的能承受下个10倍间增长

  google的所以能够称霸不完全是搜索技术和排序技术有多先进其实包括baidu和yahoo所使用技术现在也已经大同小异然而google能在个月内通过增加上万台服务器来达到足够系统容量能力确是很难被复制

   3缓存Cache:Cache

  空间换取时间缓存Cache永远计算机设计重中的重从cpu到io到处都可以看到缓存Cache身影web架构设计重缓存Cache设计必不可少有关怎样设计合理缓存Cachejbosscache创始人淘宝创始人是这样说:其实设计web缓存Cache和企业级缓存Cache是非常区别企业级缓存Cache偏重于逻辑而web缓存Cache简单快速为好

  缓存Cache带来问题是什么?是复杂度上升数据散布在多个进程所以同步就是个麻烦问题加上集群复杂度会进步提高在实际运用中采用怎样同步策略常常需要和业务绑定

  老钱为搜狐设计帖子设计了链表缓存Cache这样既可以满足灵活插入需要又能够快速阅读而其他些大型社区也经常采用类此结构来优化帖子列表memcache也是个常常用到工具

  钱宏武谈架构设计视频 http://211.100.26.82/CSDN_Live/140/qhw.flv

  Cache常用策略是:让数据在内存中而不是在比较耗时磁盘上从这个角度讲mysql提供heap引擎(存储方式)也是个值得研究思路方法,这种存储思路方法可以把数据存储在内存中,并且保留sql强大查询能力,是不是举两得呢?

  我们这里只说到了读缓存Cache其实还有种写缓存Cache在以内容为主社区里比较少用到这样社区最主要需要解决问题是读问题但是在处理能力低于请求能力时或者单个希望请求先被缓存Cache形成块然后批量处理时写缓存Cache就出现了在交互性很强社区设计里我们很容易找到这样缓存Cache

   4核心模块定要自己开发:DIY your core module

  这点我们是深有体会钱宏武和云风也都有谈到我们经常倾向于使用些开源模块如果不涉及核心模块确实是可以如果涉及那么就要小心了当访问量达到程度这些模块往往都有这样那样问题当然我们可以把问题归结为对开源模块不熟悉但是不管怎样核心出现问题时候不能完全掌握其代码是非常可怕

   5合理选择数据存储方式:reasonable data storage

  我们定要使用数据库吗雷鸣告诉我们搜索不定需要数据库云风告诉我们游戏不定需要数据库那么什么时候我们才需要数据库呢为什么不干脆用文件来代替他呢?

  首先我们需要先承认数据库也是对文件进行操作我们需要数据库主要是使用下面这几个功能个是数据存储个是数据检索在关系数据库中我们其实非常在乎数据库复杂搜索能力看看个统计用tsql就知道了(不用仔细读,扫眼就可以了)

  select c.Class_name,d.Class_name_2,a.Creativity_Title,b.User_name,(select count(Id) from review where Reviewid=a.Id) as countNum from Creativity as a,User_info as b, as c,2 as d where a.user_id=b.id and a.Creativity_Class=c.Id and a.Creativity_Class_2=d.Id

  select a.Id,max(c.Class_name),(max(d.Class_name_2),max(a.Creativity_Title),max(b.User_name),count(e.Id) as countNum from Creativity as a,User_info as b, as c,2 as d,review as e where a.user_id=b.id and a.Creativity_Class=c.Id and a.Creativity_Class_2=d.Id and a.Id=e.Reviewid group by a.Id ..............................................

  我们可以看出需要数据库关联排序能力这个能力在某些情况下非常重要但是如果你网站WebSite常规操作全是这样复杂逻辑那效率定是非常低所以我们常常在数据库里加入许多冗余字段来减小简单查询时关联等操作带来压力我们看看下面这张图可以看到数据库设计重心和网站WebSite(指内容型社区)需要面对问题实际是有些偏差

  WEB架构设计经验分享

  同样其他些软件Software产品也遇到同样问题所以具我了解有许多特殊运用都有自己设计特殊数据存储结构和思路方法比如有大型服务采取树形数据存储结构lucene使用文件来存储索引和文件

  从另外个角度上看使用数据库意味着数据和表现是完全分离(这当然是经典设计思路)也就是说当需要展示数据时不得不需要个转换过程也可以说是绑定过程当网站WebSite具备定规模时候数据库往往成为效率瓶颈所以许多网站WebSite也采用直接书写静态文件思路方法来避免读取操作时绑定

  这并不是说我们从今天起就可以把我们亲爱数据库打入冷宫而是我们在设计数据持久化时需要根据实际情况来选择存储方式而数据库不过是其中个选项

   6搞清楚谁是最重要人:who's the most important guy

  在用例需求分析时候常常讲到涉众就是和你设计息息相关在web中我们定以为最重要涉众莫过于用户了个传统互动社区开发中最重要东西是内容用户产生内容所以用户就是上帝至于内容挑选工具不就是给坐我后面 3排妹妹们用吗?凑或行了实在有问题我就在数据里手动帮你加得了这大概是眼下许多小型甚至中型网站WebSite技术人员普遍想法钱宏武在他讲座里谈到了这个问题:实际上网站WebSite每天产生内容非常普通人是不可能看完而编辑负责把精华内容推荐到首页上所以很多用户读到内容其实都依赖于编辑推荐所以设计让编辑工作方便工具也是非常重要有时甚至是最重要

   7不要执着于文档:don't be crazy about document

  web开发文档重要吗?什么文档最重要?我看法是web开发中交流>文档

  现在大软件Software公司比较流行做法是:

  注重产品设计文档在这种思路方法里产品文档非常详尽并且没有歧义开发人员基于设计文档开发测试人员基于设计文档制定测试方案任何新人都可以通过阅读产品设计文档来了解项目概况

  而web项目从概念到实现时间是非常短而且越短越好并且由于变化迅速要想写出完整产品和需求文档是几乎不可能大多数情况是等你写出完备文档项目早就是另外个样子但是没有文档问题是如果团队(Team)发生变化添加新成员怎样才能了解软件Software结构和概念呢种是每个人都了解软件Software整个结构除非你团队(Team)整体消失否则任何个人都能够担当培养新人责任这种face2face交流比文档有效率很多

  于是就有了前office开发者现任yahoo中国某产品开发负责人刘振飞所感觉到落差他说我们项目是吵出来我听完会心

   8团队(Team):team

  不要专家团队(Team)而要外科手术式团队(Team),你团队(Team)里定要有清道夫需要有弓箭手让他们和项目起成长才是项目负责人最大成就

  整理总结:

  0)架构是种权衡

  WEB架构设计经验分享

  1)web开发特点是是:没有太复杂技术难点切在于迅速把握需求其实这正式敏捷开发要旨所在切都可以非常快速建立非常快速重构我们开发工具底层库和框架包括搜索引擎和web文档提供帮助都提我们供给了敏捷能力



  2)此外相应最有效率交流方式必须留给web开发那就是face2face(面对面)不要太担心你设计不能被完备文档所保留下来他们会以交流代码和小卡片方式保存下来

  3)人原因会更加重要无论是对用户需求还是开发人员素质

  另:有关web效率有著名14条规则由yahoo性能效率小组所整理总结并广为流传业已出现相关插件(YSlow)针对具体网页按彼规则评分这次该小组负责人Tenni Theurer也受邀来到此次大会我把Tenni小姐(的前真没有想到她是个女孩并且如此年轻)和她团队(Team)14 rules列在下面

  Make Fewer HTTP Requests

  Use a Content Delivery Network

  Add an Expires Header

  Gzip Components

  Put CSS at the Top

  Move Scripts to the Bottom

  Avoid CSS Expressions

  Make JavaScript and CSS External

  Reduce DNS Lookups

  Miny JavaScript

  Avoid Redirects

  Remove Duplicate Scripts

  Configure ETags

  Make Ajax Cacheable

  通过安装firebug和YSlow这两个firefox插件(请注意要先安装firebug再安装yslow,下载后拖动到firefox里即可)我们可以看到你网页根据下面规则评分,这是我在博客园博客首页评分截图,上面D表示总分,下面是单项评分,A最好F最差,不知道还有没有G :)

  WEB架构设计经验分享



Tags:  架构设计 经验分享 web架构 分享web2.0

延伸阅读

最新评论

发表评论