- 浏览: 70411 次
- 性别:
- 来自: 武汉
最新评论
-
wanglantao:
谢谢了!!!!
ext中文API文档及例子 -
lilongsy:
问一下,phpcms和supesite哪个更好用?
我现在用 ...
phpcms转supesite转换程序bug修正 -
hwn0412:
辛苦了..刚好要用..
Ajax框架之ExtJs、DWR入门书籍 -
wkl17:
感谢楼主分享,但是step4修改了之后,进行转换,会提示
引用 ...
phpcms转supesite转换程序bug修正 -
Chen_ZX:
之前接触得比较少,现在有时间多学习一点。谢谢分享!
ext中文API文档及例子
一,不要过设计:never over design
这是一个常常被提及的话题,但是只要想想你的架构里有多少功能是根本没有用到,或者最后废弃的,就能明白其重要性了,初涉架构设计,往往倾向于设计大而化一的架构,希望设计出具有无比扩展性,能适应一切需求的增加架构,web开发领域是个非常动态的过程,我们很难预测下个星期的变化,而又需要对变化做出最快最有效的响应。。
ebay的工程师说过,他们的架构设计从来都不能满足系统的增长,所以他们的系统永远都在推翻重做。请注意,不是ebay架构师的能力有问题,他们设计的架构总是建立旧版本的瓶颈上,希望通过新的架构带来突破,然而新架构带来的突破总是在很短的时间内就被新增需求淹没,于是他们不得不又使用新的架构
web开发,是个非常敏捷的过程,变化随时都在产生,用户需求千变万化,许多方面偶然性非常高,较之软件开发,希望用一个架构规划以后的所有设计,是不现实的
二,web架构生命周期:web architecture‘s life cycle
既然要杜绝过设计,又要保证一定的前瞻性,那么怎么才能找到其中的平衡呢?希望下面的web架构生命周期能够帮到你
所设计的架构需要在1-10倍的增长下,通过简单的增加硬件容量就能够胜任,而在5-10倍的增长期间,请着手下一个版本的架构设计,使之能承受下一个10倍间的增长
google之所以能够称霸,不完全是因为搜索技术和排序技术有多先进,其实包括baidu和yahoo,所使用的技术现在也已经大同小异,然而,google能在一个月内通过增加上万台服务器来达到足够系统容量的能力确是很难被复制的
三,缓存:Cache
空间换取时间,缓存永远计算机设计的重中之重,从cpu到io,到处都可以看到缓存的身影,web架构设计重,缓存设计必不可少,关于怎样设计合理的缓存,jbosscache的创始人,淘宝的创始人是这样说的:其实设计web缓存和企业级缓存是非常不同的,企业级缓存偏重于逻辑,而web缓存,简单快速为好。。
缓存带来的问题是什么?是程序的复杂度上升,因为数据散布在多个进程,所以同步就是一个麻烦的问题,加上集群,复杂度会进一步提高,在实际运用中,采用怎样的同步策略常常需要和业务绑定
老钱为搜狐设计的帖子设计了链表缓存,这样既可以满足灵活插入的需要,又能够快速阅读,而其他一些大型社区也经常采用类此的结构来优化帖子列表,memcache也是一个常常用到的工具
钱宏武谈架构设计视频 http://211.100.26.82/CSDN_Live/140/qhw.flv
Cache的常用的策略是:让数据在内存中,而不是在比较耗时的磁盘上。从这个角度讲,mysql提供的heap引擎(存储方式)也是一个值得思考的方法,这种存储方法可以把数据存储在内存中,并且保留sql强大的查询能力,是不是一举两得呢?
我们这里只说到了读缓存,其实还有一种写缓存,在以内容为主的社区里比较少用到,因为这样的社区最主要需要解决的问题是读问题,但是在处理能力低于请求能力时,或者单个希望请求先被缓存形成块,然后批量处理时,写缓存就出现了,在交互性很强的社区设计里我们很容易找到这样的缓存
四,核心模块一定要自己开发:DIY your core module
这点我们是深有体会,钱宏武和云风也都有谈到,我们经常倾向于使用一些开源模块,如果不涉及核心模块,确实是可以的,如果涉及,那么就要小心了,因为当访问量达到一定的程度,这些模块往往都有这样那样的问题,当然我们可以把问题归结为对开源的模块不熟悉,但是不管怎样,核心出现问题的时候,不能完全掌握其代码是非常可怕的
五,合理选择数据存储方式: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,class as c,class2 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,class as c,class2 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 ..............................................
我们可以看出需要数据库关联,排序的能力,这个能力在某些情况下非常重要,但是如果你的网站的常规操作,全是这样复杂的逻辑,那效率一定是非常低的,所以我们常常在数据库里加入许多冗余字段,来减小简单查询时关联等操作带来的压力,我们看看下面这张图,可以看到数据库的设计重心,和网站(指内容型社区)需要面对的问题实际是有一些偏差的
同样其他一些软件产品也遇到同样的问题所以具我了解,有许多特殊的运用都有自己设计的特殊数据存储结构与方法,比如有的大型服务程序采取树形数据存储结构,lucene使用文件来存储索引和文件
从另外一个角度上看,使用数据库,意味着数据和表现是完全分离的(这当然是经典的设计思路),也就是说当需要展示数据时,不得不需要一个转换的过程,也可以说是绑定的过程,当网站具备一定规模的时候,数据库往往成为效率的瓶颈,所以许多网站也采用直接书写静态文件的方法来避免读取操作时的绑定
这并不是说我们从今天起就可以把我们亲爱的数据库打入冷宫,而是我们在设计数据的持久化时,需要根据实际情况来选择存储方式,而数据库不过是其中一个选项
六,搞清楚谁是最重要的人:who's the most important guy
在用例需求分析的时候常常讲到涉众,就是和你的设计息息相关的人,在web中我们一定以为最重要的涉众莫过于用户了。,在一个传统的互动社区开发中,最重要的东西是内容,用户产生内容,所以用户就是上帝,至于内容挑选工具,不就是给坐我后面三排的妹妹们用的吗?凑或行了,实在有问题我就在数据里手动帮你加得了。。这大概是眼下许多小型甚至中型网站技术人员的普遍想法。钱宏武在他的讲座里谈到了这个问题:实际上网站每天产生的内容非常的多,普通人是不可能看完的,而编辑负责把精华的内容推荐到首页上,所以很多用户读到的内容其实都依赖于编辑的推荐,所以设计让编辑工作方便的工具也是非常重要,有时甚至是最重要的。
七,不要执着于文档:don't be crazy about document
web开发的文档重要吗?什么文档最重要?我的看法是web开发中交流>文档,
现在大的软件公司比较流行的做法是:
注重产品设计文档,在这种方法里,产品文档非常详尽,并且没有歧义,开发人员基于设计文档开发,测试人员基于设计文档制定测试方案,任何新人都可以通过阅读产品设计文档来了解项目的概况
而web项目从概念到实现的时间是非常短的,而且越短越好,并且由于变化迅速,要想写出完整的产品和需求文档是几乎不可能的,大多数情况是等你写出完备的文档,项目早就是另外一个样子,但是没有文档的问题是,如果团队发生变化,添加新成员怎样才能了解软件的结构和概念呢,一种是每个人都了解软件的整个结构,除非你的团队整体消失,否则任何一个人都能够担当培养新人的责任,这种face2face交流比文档有效率很多。
于是就有了前office开发者,现任yahoo中国某产品开发负责人的刘振飞所感觉到的落差,他说,我们的项目是吵出来的,我听完会心一笑
八,团队:team
不要专家团队,而要外科手术式的团队,你的团队里一定要有清道夫,需要有弓箭手,让他们和项目一起成长,才是项目负责人的最大成就
总结:
0)架构是一种权衡
1)web开发的特点是是:没有太复杂的技术难点,一切在于迅速的把握需求,其实这正式敏捷开发的要旨所在,一切都可以非常快速的建立,非常快速的重构,我们的开发工具,底层库和框架,包括搜索引擎和web文档提供的帮助,都提我们供给了敏捷的能力。
2)此外,相应的,最有效率的交流方式必须留给web开发,那就是face2face(面对面),不要太担心你的设计不能被完备的文档所保留下来,他们会以交流,代码和小卡片的方式保存下来
3)人的因素会更加重要,无论是对用户的需求,还是开发人员的素质。
另:有关web效率,有著名的14条规则,由yahoo性能效率小组所总结,并广为流传。业已出现相关插件(YSlow),针对具体网页按彼规则评分,这次该小组负责人Tenni Theurer也受邀来到此次大会,我把Tenni小姐(之前真的没有想到她是个女孩,并且如此年轻)和她的团队的14 rules列在下面
发表评论
-
supesite系统视频播放功能的分析及设置默认打开页面播放
2009-12-16 20:34 1925最近做的一个php项目需求中有视频这个频道,于是研究了一下su ... -
php之smarty技术中文文档
2009-12-07 19:46 1231最近因工作关系投身于了php语言.基于上都是基于supesit ... -
phpcms转supesite转换程序bug修正
2009-12-03 21:13 2001因客户前期使用的门户站是phpcms产品,现要升级到康盛的su ... -
Android通用布局对象
2009-09-02 14:49 3164FrameLayout FrameLayout is the ... -
java p2p技术
2009-07-27 10:45 5198英文原文地址: http://ww ... -
承接Java项目
2009-07-13 15:09 1013本人从事软件开发4年,主要为供电局做远程集抄、营销系统、MIS ... -
WEB前端高性能优化之JavaScript优化细节
2009-06-11 14:07 804作为一名网站开发WEB前端工程师,对自己开发的网站项目应该尽可 ... -
NIO的基本概念及简单示例
2009-04-03 14:43 1796在JDK 1.4的新特性中,NIO无疑是最显著和鼓舞人心的。N ... -
Ext官方中文教程
2009-03-25 15:09 3725Extjs.com官方中文教程列表: so good~~! ... -
程序员的十层楼(菜鸟,大虾,牛人......)
2009-03-19 10:41 1126到底中国的程序员水平比西方程序员水平差,还是中国有许多优秀的程 ... -
欲为Java技术大牛所需的25个学习要点
2009-02-24 10:17 7941. 你需要精通面向对象 ... -
Java对象的生命周期分析
2009-01-17 15:20 2511从以下可心看出使 ... -
软件工程师不可不知的10个概念
2009-01-17 13:27 713出色的软件工程师善用设计模式,勤于代码重构,编写单元测试,并对 ... -
类设计的技巧
2008-12-31 10:09 933设计一个类要明确这个类所要完成的功能,类里的成员变量和 ... -
B/S前端优化
2008-12-03 12:02 8711. 合并脚本文件 包括 ... -
30个优秀源码网站
2008-11-28 14:25 1188从csdn上摘录下来,记录一下 1.51源码:http:// ... -
避免发生与安全有关的javascript错误
2008-11-28 11:40 986會產生 JavaScript錯誤: eval() 函數 s ... -
java socket/Serversocket编程详解(中/英文)
2008-10-23 15:09 2457socket /套接字 Sockets let y ... -
ext中文API文档及例子
2008-09-26 18:51 5349附件为一个chm文件,主要以ext文档为主,还附有一些ext包 ... -
Eclipse匆删恢复
2008-09-20 16:05 1320昨天coding时,不知道是脑袋抽筋还是咋滴了,一不小心把一个 ...
相关推荐
以下几点是从实际工作中总结出来的心得: 1. **权限分立与互相制约**: - **概念**:在系统设计时,应确保不同部门间的权限分离,并通过制度设计实现相互监督与制约。 - **实施要点**: - **权限分配**:例如...
"web架构设计经验分享" 本文将分享web架构设计的经验,总结了五个重要的...我们需要数据库,主要是使用下面这几个功能,一个是数据存储,一个是数据检索,在关系数据库中,我们其实非常在乎数据库的复杂搜索的能力。
在软件和软件密集型的系统工程领域,架构设计(ArchitectureDesign)是最近才浮现的一个技术领域。虽然建筑行业中,建筑师(Architect)作为受到普遍认可的一个专业角色,已经存在了几百年了。可是在软件领域,架构师...
反作弊技术架构与设计的整体架构设计主要包括端大数据设备识别分析、识别作弊信息、综合判定识别、端常规CPU信息、特定路径驱动程序、硬件传感器、手机运营商家CACHE特性、IMSI、IDS、DEFAULT、PHONE、arm、x86 ...
合理的架构应具备以下几个特点:高内聚、低耦合,保证各部分之间的独立性;良好的扩展性,能够适应需求变化;高效的性能,通过优化数据结构和算法来提高系统响应速度。 总之,架构设计是软件开发的核心,而设计模式...
通过对分布式消息队列的设计与架构演进过程的深入探讨,我们可以看到,从最初的单体架构到微服务架构的转变,再到具体的实现细节和技术实践,每一个环节都非常重要。只有不断地学习和积累经验,才能在不断变化的技术...
PLC 设计的步骤包括需求分析、系统设计、编程、调试和测试等几个阶段。在需求分析阶段,需要了解客户的需求和设计的目标;在系统设计阶段,需要设计 PLC 的硬件和软件架构;在编程阶段,需要编写 PLC 的程序代码;在...
浏览量比较大的网站应该从哪几个方面入手? 17 用负载均衡技术建设高负载站点 20 大型网站的架构设计问题 25 开源平台的高并发集群思考 26 大型、高负载网站架构和应用初探 时间:30-45分钟 27 ...
本书的核心内容涵盖了分布式系统的诸多关键知识点,包括但不限于以下几个方面: 1. **分布式系统基础**:首先,书中会讲解分布式系统的基本概念,比如CAP定理、BASE理论等,帮助读者理解在分布式环境下如何权衡可用...
具体来说,可以采取以下几个方向的优化措施: 1. **将请求拦截在上游**:传统秒杀系统的问题在于所有请求最终都会到达后端数据层,导致读写锁冲突严重,从而影响性能。因此,将大部分请求在系统上游拦截显得尤为...
实现过程中,开发团队需要考虑以下几个关键点: 1. 技术选型:可以选择Java、Python、PHP等后端语言,搭配MySQL、PostgreSQL等数据库系统,前端则可采用HTML5、CSS3和JavaScript,配合Vue.js、React.js等前端框架...
在整个实验过程中,遵循了几个核心的人机交互原则,包括易用性、可访问性、反馈和容错性。易用性体现在简单的操作流程和直观的界面设计;可访问性确保即使是小孩也能轻松上手;系统会根据用户的操作提供即时反馈,...
因此,设计师需要特别注意以下几个方面: 1. **避免不必要的等待**:减少应用的启动时间和加载时间,确保应用运行流畅。 2. **处理不确定性**:移动设备可能面临网络不稳定、电量不足等问题,设计时应考虑这些因素...
为了实现这一目标,我们需要遵循以下几个原则: 1. **代码规范**:一套清晰的编码规范可以确保代码的一致性和可读性。这包括命名规则、注释标准和代码结构,以便团队成员能够迅速理解代码的功能和逻辑。 2. **框架...
着眼最多之处莫过于性能与架构,本次幸得参与sd2.0大会,得以与同行广泛交流,于此二方面,有些心得,不敢独享,与众博友分享,本文是这次参会与众同撩交流的心得,有兴趣者可以查看视频架构设计的几个心得:...
机票销售系统课程设计报告附心得 本设计报告旨在设计并实现一个机票销售系统,解决航空客运订票系统中的问题。该系统可以实现航班信息查询、订票业务、退票业务等功能。 设计综述 本设计旨在解决航空客运订票系统...
总结起来,这个主题涵盖的内容可能非常广泛,包括但不限于以下几个知识点: 1. 需求分析与架构规划:如何从需求出发,确定系统的边界和核心功能,进而设计出满足需求的架构。 2. 技术选型:如何根据业务特点选择...
在这一阶段,架构师需要关注以下几个方面来提高系统的响应速度和吞吐量: - **缓存机制**:利用Redis等内存数据库实现数据缓存,减少数据库访问次数。 - **负载均衡**:通过Nginx或HAProxy等工具实现服务器间的请求...