﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>PHP博客-苏广贤-随笔分类-文案</title><link>http://www.phpweblog.net/susam119/category/393.html</link><description>专注成就将来！</description><language>zh-cn</language><lastBuildDate>Fri, 21 Dec 2007 11:23:00 GMT</lastBuildDate><pubDate>Fri, 21 Dec 2007 11:23:00 GMT</pubDate><ttl>60</ttl><item><title>[转载]互联网项目到底该如何进展</title><link>http://www.phpweblog.net/susam119/archive/2007/12/11/2528.html</link><dc:creator>阿门119</dc:creator><author>阿门119</author><pubDate>Tue, 11 Dec 2007 06:20:00 GMT</pubDate><guid>http://www.phpweblog.net/susam119/archive/2007/12/11/2528.html</guid><wfw:comment>http://www.phpweblog.net/susam119/comments/2528.html</wfw:comment><comments>http://www.phpweblog.net/susam119/archive/2007/12/11/2528.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.phpweblog.net/susam119/comments/commentRss/2528.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/susam119/services/trackbacks/2528.html</trackback:ping><description><![CDATA[<p>前段时间有些迷惑，整理下思路，也顺便对2007进行一些总结。<br><br>1、怪怪兄强调产品的技术壁垒，我对此并不认可，我认为应该是思路的壁垒 -&gt; 技术的壁垒 -&gt; 最终形成综合资源的壁垒，比如用户、口碑等等。<br><br>2、前几日得一朋友介绍，与互联网中的老大哥畅谈了大约1小时，此位老大哥也属于很前辈很成功的人物了，按照他的说法，互联网项目，逐渐在走向一个幕头阶段，于新战场上进行创新并取得主导地位的几率正在下降，这时候对创始人的考验是很大的，更重要的一点在于需要有一个很强力的扩张能力，而这个能力于VC等机构的作用性很强，如果按此说法，那采取循序渐进，先出一个样品，试探市场后，将主要精力用来不务正业的去把项目推销给VC，取得一定资源后再发力市场？这和我之前的思路不太一致，我坚信VC不是SB，我也不是HY强人，项目的本质得不到一个质的提高，即便取得VC的信任，恐怕对自身发展也不利，我的这一思想是否应该有所转变？<br><br>3、到底是产品重要，还是技术重要，我觉得需要分阶段，技术，按词解释应当是一切可作用于生产领域，并提高生产效率的方式方法，那么至少我觉得都先创建这个生产领域，才有进一步提高效率可言，所以我继续坚持我的观点，应当快速的把自己的思路体现出来，这时候不要沉迷于技术，然后不断的提高，不要完美主义，不要妄想一出来，我的技术门槛就很牛X，我更认可积累性的技术门槛，只要知道下一步该如何做，技术上如何进行深耕，如何积累，让产品从初始的创意竞争力逐步转为技术竞争力，即可，不要迷失，即可。<br><br>4、说说讨厌的web2.0，前几日拜读了谢老前辈关于SNS的文章，觉得说得有理，对谢老前辈于SNS的理论还是觉得比较佩服的，思路很清晰，很直接，近日又读了一篇麦田的关于web2.0这个非常让我鄙视的词汇，或许是我年轻的叛逆心理，我对于web2.0本身其实并不反感，主要在于该词汇于社会、互联网行业的滥用，用了几个JS，搞搞AJAX，就以为自己web2.0了，搞个博客，就认为自己web2.0了，于是让web2.0成为2007年行内最俗的词汇，以至于自己对此很不屑。。而麦田的此文，大致也就阐述了和我相同的观点，所以自己比较赞同，单独依靠一个blog就搞个bsp这样的模式，不可能做出什么成就，包括对园子，我也是这么说，dudu对此应该有很深刻的认识，园子的转型基本是必然的，对此就不必多说，而至于什么饭否，模仿一个twitter就想取得成绩，也只能是有人气没票房的份，所以很赞成麦田说的那句：&#8220;web2.0是一种思维，不是某个产品，也不是某种技术&#8221;<br><br>5、最后说回老本行，07年，也需要给自己做做总结，这一年，感觉自己的成长比较大，特别是年末的这几个月，此前，为贫血充血苦恼，到底该用什么好，在各种架构中挣扎，总试图建立一个很牛X的架构出来，然后在上面可以做几乎任何事，各种设计模式、理论、OO、AOP乱78糟的充斥着我的大脑，而最近的一个项目，我直接于aspx.cs中写了sql代码，我认为这是一种成长，其实世界本来是很简单的，为什么要刻意的复杂化呢？过度设计，实际上困扰着大部分同行，其实仔细想想，我的项目真有那么复杂？真的每个细节都需要如此设计？不设计，又会有什么后果？引发什么灾难性的鼓掌？在这个时间点，时间重要，还是今后的维护成本重要，我们真的有仔细考虑过吗？至少我觉得我过去，太想当然了，一味的觉得，是的，我的项目很复杂，如果不这样做，将来的维护性会不好，但我从来仔细考虑过，不好，那会导致什么，将来重构的成本又会很高吗？假如现在的过度设计让项目失去未来，还有什么维护性可言？不过话说回来，我并不是鼓励那种写烂代码的行为，这中间其实就是一念之差，具体这个话题，回头我会继续整理，用文字更清晰的表达出来，话说得有点重，不过本人向来以坏人自居，总说坏话。<br><br>今年还有很多收获，认识了很多朋友，他们让我学会了许多，间接的让我成长，感谢他们，感激他们。</p>
<img src ="http://www.phpweblog.net/susam119/aggbug/2528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/susam119/" target="_blank">阿门119</a> 2007-12-11 14:20 <a href="http://www.phpweblog.net/susam119/archive/2007/12/11/2528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]web架构设计经验分享</title><link>http://www.phpweblog.net/susam119/archive/2007/12/05/2471.html</link><dc:creator>阿门119</dc:creator><author>阿门119</author><pubDate>Wed, 05 Dec 2007 14:31:00 GMT</pubDate><guid>http://www.phpweblog.net/susam119/archive/2007/12/05/2471.html</guid><wfw:comment>http://www.phpweblog.net/susam119/comments/2471.html</wfw:comment><comments>http://www.phpweblog.net/susam119/archive/2007/12/05/2471.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.phpweblog.net/susam119/comments/commentRss/2471.html</wfw:commentRss><trackback:ping>http://www.phpweblog.net/susam119/services/trackbacks/2471.html</trackback:ping><description><![CDATA[<p>本人作为一位web工程师，着眼最多之处莫过于 性能与架构，本次幸得参与sd2.0大会，得以与同行广泛交流,于此二方面，有些心得，不敢独享，与众博友分享，本文是这次参会与众同撩交流的心得，有兴趣者可以查看视频
<p>架构设计的几个心得：
<p><strong><br>一，不要过设计：never over design<br></strong><br>这是一个常常被提及的话题，但是只要想想你的架构里有多少功能是根本没有用到，或者最后废弃的，就能明白其重要性了，初涉架构设计，往往倾向于设计大而化一的架构，希望设计出具有无比扩展性，能适应一切需求的增加架构，web开发领域是个非常动态的过程，我们很难预测下个星期的变化，而又需要对变化做出最快最有效的响应。。 </p>
<p>ebay的工程师说过，他们的架构设计从来都不能满足系统的增长，所以他们的系统永远都在推翻重做。请注意，不是ebay架构师的能力有问题，他们设计的架构总是建立旧版本的瓶颈上，希望通过新的架构带来突破，然而新架构带来的突破总是在很短的时间内就被新增需求淹没，于是他们不得不又使用新的架构<br>web开发，是个非常敏捷的过程，变化随时都在产生，用户需求千变万化，许多方面偶然性非常高，较之软件开发，希望用一个架构规划以后的所有设计，是不现实的 <br>
<p><strong>二，web架构生命周期：web architecture&#8216;s life cycle</strong>
<p><br>既然要杜绝过设计，又要保证一定的前瞻性，那么怎么才能找到其中的平衡呢？希望下面的web架构生命周期能够帮到你
<p><a href="http://www.cnblogs.com/images/cnblogs_com/yizhu2000/WindowsLiveWriter/web_8D00/architecture_life_cycle.gif" atomicselection="true"><img height=242 alt=architecture_life_cycle src="http://www.cnblogs.com/images/cnblogs_com/yizhu2000/WindowsLiveWriter/web_8D00/architecture_life_cycle_thumb.gif" width=734></a>
<p>所设计的架构需要在1－10倍的增长下，通过简单的增加硬件容量就能够胜任，而在5－10倍的增长期间，请着手下一个版本的架构设计，使之能承受下一个10倍间的增长
<p>google之所以能够称霸，不完全是因为搜索技术和排序技术有多先进，其实包括baidu和yahoo，所使用的技术现在也已经大同小异，然而，google能在一个月内通过增加上万台服务器来达到足够系统容量的能力确是很难被复制的
<p><strong><br>三，缓存：Cache</strong>
<p><br>空间换取时间，缓存永远计算机设计的重中之重，从cpu到io，到处都可以看到缓存的身影，web架构设计重，缓存设计必不可少，关于怎样设计合理的缓存，jbosscache的创始人，淘宝的创始人是这样说的：其实设计web缓存和企业级缓存是非常不同的，企业级缓存偏重于逻辑，而web缓存，简单快速为好。。
<p>缓存带来的问题是什么？是程序的复杂度上升，因为数据散布在多个进程，所以同步就是一个麻烦的问题，加上集群，复杂度会进一步提高，在实际运用中，采用怎样的同步策略常常需要和业务绑定
<p>老钱为搜狐设计的帖子设计了链表缓存，这样既可以满足灵活插入的需要，又能够快速阅读，而其他一些大型社区也经常采用类此的结构来优化帖子列表，memcache也是一个常常用到的工具
<p>钱宏武谈架构设计视频 <a href="http://211.100.26.82/CSDN_Live/140/qhw.flv">http://211.100.26.82/CSDN_Live/140/qhw.flv</a>
<p>Cache的常用的策略是：让数据在内存中，而不是在比较耗时的磁盘上。从这个角度讲，mysql提供的heap引擎（存储方式）也是一个值得思考的方法,这种存储方法可以把数据存储在内存中,并且保留sql强大的查询能力,是不是一举两得呢?
<p>我们这里只说到了读缓存，其实还有一种写缓存，在以内容为主的社区里比较少用到，因为这样的社区最主要需要解决的问题是读问题，但是在处理能力低于请求能力时，或者单个希望请求先被缓存形成块，然后批量处理时，写缓存就出现了，在交互性很强的社区设计里我们很容易找到这样的缓存 <br>
<p><strong>四，核心模块一定要自己开发：DIY your core module</strong>
<p><br>这点我们是深有体会，钱宏武和云风也都有谈到，我们经常倾向于使用一些开源模块，如果不涉及核心模块，确实是可以的，如果涉及，那么就要小心了，因为当访问量达到一定的程度，这些模块往往都有这样那样的问题，当然我们可以把问题归结为对开源的模块不熟悉，但是不管怎样，核心出现问题的时候，不能完全掌握其代码是非常可怕的
<p><strong><br>五，合理选择数据存储方式：reasonable data storage</strong>
<p><br>我们一定要使用数据库吗，不一定，雷鸣告诉我们搜索不一定需要数据库，云风告诉我们，游戏不一定需要数据库，那么什么时候我们才需要数据库呢，为什么不干脆用文件来代替他呢？<br>首先我们需要先承认，数据库也是对文件进行操作。我们需要数据库，主要是使用下面这几个功能，一个是数据存储，一个是数据检索，在关系数据库中，我们其实非常在乎数据库的复杂搜索的能力，看看一个统计用的tsql就知道了(不用仔细读,扫一眼就可以了)
<p>select&nbsp;&nbsp; c.Class_name,d.Class_name_2,a.Creativity_Title,b.User_name,(select&nbsp;&nbsp; count(Id)&nbsp;&nbsp; from&nbsp;&nbsp; review&nbsp;&nbsp; where&nbsp;&nbsp; Reviewid=a.Id)&nbsp;&nbsp; as&nbsp;&nbsp; countNum&nbsp;&nbsp; from&nbsp;&nbsp; Creativity&nbsp;&nbsp; as&nbsp;&nbsp; a,User_info&nbsp;&nbsp; as&nbsp;&nbsp; b,class&nbsp;&nbsp; as&nbsp;&nbsp; c,class2&nbsp;&nbsp; as&nbsp;&nbsp; d&nbsp;&nbsp; where&nbsp;&nbsp; a.user_id=b.id&nbsp;&nbsp; and&nbsp;&nbsp; a.Creativity_Class=c.Id&nbsp;&nbsp; and&nbsp;&nbsp; a.Creativity_Class_2=d.Id <br>select&nbsp;&nbsp; a.Id,max(c.Class_name),(max(d.Class_name_2),max(a.Creativity_Title),max(b.User_name),count(e.Id)&nbsp;&nbsp; as&nbsp;&nbsp; countNum&nbsp;&nbsp; from&nbsp;&nbsp; Creativity&nbsp;&nbsp; as&nbsp;&nbsp; a,User_info&nbsp;&nbsp; as&nbsp;&nbsp; b,class&nbsp;&nbsp; as&nbsp;&nbsp; c,class2&nbsp;&nbsp; as&nbsp;&nbsp; d,review&nbsp;&nbsp; as&nbsp;&nbsp; e&nbsp;&nbsp; where&nbsp;&nbsp; a.user_id=b.id&nbsp;&nbsp; and&nbsp;&nbsp; a.Creativity_Class=c.Id&nbsp;&nbsp; and&nbsp;&nbsp; a.Creativity_Class_2=d.Id&nbsp;&nbsp; and&nbsp;&nbsp; a.Id=e.Reviewid&nbsp;&nbsp; group&nbsp;&nbsp; by&nbsp;&nbsp; a.Id ..............................................
<p>我们可以看出需要数据库关联，排序的能力，这个能力在某些情况下非常重要，但是如果你的网站的常规操作，全是这样复杂的逻辑，那效率一定是非常低的，所以我们常常在数据库里加入许多冗余字段，来减小简单查询时关联等操作带来的压力，我们看看下面这张图，可以看到数据库的设计重心，和网站(指内容型社区)需要面对的问题实际是有一些偏差的
<p><a href="http://www.cnblogs.com/images/cnblogs_com/yizhu2000/WindowsLiveWriter/web_8D00/database.gif" atomicselection="true"><img height=495 alt=database src="http://www.cnblogs.com/images/cnblogs_com/yizhu2000/WindowsLiveWriter/web_8D00/database_thumb.gif" width=664></a>
<p>同样其他一些软件产品也遇到同样的问题所以具我了解，有许多特殊的运用都有自己设计的特殊数据存储结构与方法，比如有的大型服务程序采取树形数据存储结构，lucene使用文件来存储索引和文件
<p>从另外一个角度上看，使用数据库，意味着数据和表现是完全分离的（这当然是经典的设计思路），也就是说当需要展示数据时，不得不需要一个转换的过程，也可以说是绑定的过程，当网站具备一定规模的时候，数据库往往成为效率的瓶颈，所以许多网站也采用直接书写静态文件的方法来避免读取操作时的绑定
<p>这并不是说我们从今天起就可以把我们亲爱的数据库打入冷宫，而是我们在设计数据的持久化时，需要根据实际情况来选择存储方式，而数据库不过是其中一个选项
<p><strong><br>六，搞清楚谁是最重要的人：who's the most important guy</strong>
<p><br>在用例需求分析的时候常常讲到涉众，就是和你的设计息息相关的人，在web中我们一定以为最重要的涉众莫过于用户了。，在一个传统的互动社区开发中，最重要的东西是内容，用户产生内容，所以用户就是上帝，至于内容挑选工具，不就是给坐我后面三排的妹妹们用的吗？凑或行了，实在有问题我就在数据里手动帮你加得了。。这大概是眼下许多小型甚至中型网站技术人员的普遍想法。钱宏武在他的讲座里谈到了这个问题：实际上网站每天产生的内容非常的多，普通人是不可能看完的，而编辑负责把精华的内容推荐到首页上，所以很多用户读到的内容其实都依赖于编辑的推荐，所以设计让编辑工作方便的工具也是非常重要，有时甚至是最重要的。
<p><strong><br>七，不要执着于文档：don't be crazy about document</strong>
<p><br>web开发的文档重要吗？什么文档最重要？我的看法是web开发中交流<strong>&gt;</strong>文档，
<p>现在大的软件公司比较流行的做法是：<br>注重产品设计文档，在这种方法里，产品文档非常详尽，并且没有歧义，开发人员基于设计文档开发，测试人员基于设计文档制定测试方案，任何新人都可以通过阅读产品设计文档来了解项目的概况
<p>而web项目从概念到实现的时间是非常短的，而且越短越好，并且由于变化迅速，要想写出完整的产品和需求文档是几乎不可能的，大多数情况是等你写出完备的文档，项目早就是另外一个样子，但是没有文档的问题是，如果团队发生变化，添加新成员怎样才能了解软件的结构和概念呢，一种是每个人都了解软件的整个结构，除非你的团队整体消失，否则任何一个人都能够担当培养新人的责任，这种face2face交流比文档有效率很多。
<p>于是就有了前office开发者，现任yahoo中国某产品开发负责人的刘振飞所感觉到的落差，他说，<strong>我们的项目是吵出来的</strong>，我听完会心一笑
<p><strong><br>八，团队：team</strong>
<p><br>不要专家团队，而要外科手术式的团队,你的团队里一定要有清道夫，需要有弓箭手，让他们和项目一起成长，才是项目负责人的最大成就
<p><strong></strong>&nbsp;
<p><strong>总结：</strong>
<p>0)架构是一种权衡
<p><a href="http://www.cnblogs.com/images/cnblogs_com/yizhu2000/WindowsLiveWriter/web_8D00/architecture.gif" atomicselection="true"><img height=272 alt=architecture src="http://www.cnblogs.com/images/cnblogs_com/yizhu2000/WindowsLiveWriter/web_8D00/architecture_thumb.gif" width=368></a>
<p>1)web开发的特点是是：没有太复杂的技术难点，一切在于迅速的把握需求，其实这正式敏捷开发的要旨所在，一切都可以非常快速的建立，非常快速的重构，我们的开发工具，底层库和框架，包括搜索引擎和web文档提供的帮助，都提我们供给了敏捷的能力。
<p>2)此外，相应的，最有效率的交流方式必须留给web开发，那就是face2face（面对面），不要太担心你的设计不能被完备的文档所保留下来，他们会以交流，代码和小卡片的方式保存下来
<p>3)人的因素会更加重要，无论是对用户的需求，还是开发人员的素质。
<p>&nbsp;
<p>另：有关web效率，有著名的14条规则，由yahoo性能效率小组所总结，并广为流传。业已出现相关插件（<a href="http://download.csdn.net/source/299494">YSlow</a>），针对具体网页按彼规则评分，这次该小组负责人Tenni Theurer也受邀来到此次大会，我把Tenni小姐（之前真的没有想到她是个女孩，并且如此年轻）和她的团队的14 rules列在下面
<li><a href="http://developer.yahoo.com/performance/rules.html#num_http">Make Fewer HTTP Requests</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#cdn">Use a Content Delivery Network</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#expires">Add an Expires Header</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#gzip">Gzip Components</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#css_top">Put CSS at the Top</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#js_bottom">Move Scripts to the Bottom</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#css_expressions">Avoid CSS Expressions</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#external">Make JavaScript and CSS External</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#dns_lookups">Reduce DNS Lookups</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#minify">Minify JavaScript</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#redirects">Avoid Redirects</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#js_dupes">Remove Duplicate Scripts</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#etags">Configure ETags</a>
<li><a href="http://developer.yahoo.com/performance/rules.html#cacheajax">Make Ajax Cacheable</a>
<p>&nbsp;</p>
<p>通过安装<a href="http://download.csdn.net/source/299505">firebug</a>和<a href="http://download.csdn.net/source/299494">YSlow</a>这两个firefox插件(请注意要先安装firebug再安装yslow,下载后拖动到firefox里即可)我们可以看到你的网页根据下面的规则的评分,这是我在博客园博客首页的评分截图,上面D表示总分,下面是单项评分,A最好F最差,不知道还有没有G :)</p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/yizhu2000/WindowsLiveWriter/web_8D00/YSlow.gif" atomicselection="true"><img height=467 alt=YSlow src="http://www.cnblogs.com/images/cnblogs_com/yizhu2000/WindowsLiveWriter/web_8D00/YSlow_thumb.gif" width=474></a> </p>
<p>&nbsp;</p>
<p>相关连接</p>
<p>yahoo性能团队:<a title=http://developer.yahoo.com/performance/ href="http://developer.yahoo.com/performance/">http://developer.yahoo.com/performance/</a></p>
</li>
<img src ="http://www.phpweblog.net/susam119/aggbug/2471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.phpweblog.net/susam119/" target="_blank">阿门119</a> 2007-12-05 22:31 <a href="http://www.phpweblog.net/susam119/archive/2007/12/05/2471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>