PHP5研究室 - 国内Android用户的第一选择! http://www.phpv.net/ 为Android手机提供免费应用软件,ROM,免费游戏,破解刷机,汉化工具! 同时为Android开发者提供交流平台. Tue, 16 Jan 2018 19:38:28 +0000 Chiron ver1.0 zh-cn hourly 1 大型高性能网站的十项规则 http://www.phpv.net/html/1710.html http://www.phpv.net/html/1710.html#comment Mon, 19 Apr 2010 12:34:14 +0000 http://www.phpv.net/html/1710.html 在我们公司ChinaNetCloud,见 过多种不同类型的网站和系统,有好也有差。其中有些系统拥有良好的服务器/网络架构,并且进行了合理的调整和监控 ;然而一般的系统都会有安全和性能上的 问题,不能良好运行,也无法变得更流行。

在中国, 开源的LAMP栈是最流行的网络架构,它使用PHP开发,运行在Apache服务器上,以MySQL作为数据库,所有这些都运行在Linux上。它是个可靠的平台,运行良好,是现在全球最 流行的Internet系统架构。然而,我们很难对其规模进行正确的扩展并保持安全性,因为每个应用层都有其自身的问题、缺陷和最佳实践。我们的工作就是 帮助企业用最低的操作成本来创建并运行高性能的、可伸缩的、安全的系统,因此对于这类问题我们有很丰富的经验。

当前的实际情况是,很多网站都是由开发人员 快速而廉价地创建,通常没有任何IT人员或者经理,只是由程序员来管理系统。造成的结果是,虽然花费很低的成本网站就可以开始运行,但是当拥有大量用户、 需要扩展规模的时候,通常就会面临真正的问题。毕竟,中国拥有三亿八千万的Internet用户,如果其中的0.01%访问这个站点,就很容易引发25 万~50万的页面访问量。这些问题在各个级别上都会产生,下面总结的规则是对最一般的问题进行概述,并且说明为什么这些规则如此重要,以及最好采用什么方 法来修正它们。遵循这些建议的站点会提高它的可伸缩性、安全性以及操作上的稳定性。


使用合适的会话管理
第 一个想到的扩展系统的方法就是添加更多硬件。例如,使用两台服务器而不是一台。这听着合理,但会产生潜在问题:会话管理。这对Java程序来说是很严重的问题,在PHP中也会产生可延展性问题, 对于数据库的负载尤其如此。

会话被定义为单独的最终用户登录或者连接一 段时间,其中通常会包含多个TCP/IP的HTTP连接、几个Web页面,通常还包括几十个甚至上百个页面元素,如框架、菜单、Ajax更新等。所有这些 HTTP请求都需要知道用户是谁,才能满足安全的要求,并向用户传送适当的内容,因为这些都是会话的组成部分。通常每个会话都会包括相互关联的会话数据, 如用户名、用户ID、历史、购物车、统计资料等等信息。

问题在 于,在有两台Web服务器和多个 HTTP连接的情况下,用户流量会在两台服务器之间分配和移动,服务器很难知道用户是谁,并对所有数据进行跟踪,因为每个页面或者页面的组成部分都可能来 自不同的服务器。在PHP中,通常是这样解决的,在第一次连接或登录的时候就创建一个会话ID并将其放在Cookie中,然后这个Cookie会和每个 HTTP请求一起发送。

这样做带来一个问题,接下来每段PHP脚本 都需要基于ID来查找会话数据。由于PHP无法在执行过程之间保持状态(这与Java不同),这个会话数据需要存储在某个地方,通常是在数据库中。但是, 如果复杂的页面需要在每个页面载入过程中对其进行十次查找(这是经常要做的),那就意味着每个页面都要执行10次SQL查询,这会导致数据库上很大的负 载。

在前面所举的中国 Internet用户 0.01%的例子中,可能很容易在每秒内仅仅为了管理会话就生成上百个查询。解决方法是一直使用位于Cookie中的会话ID,并且使用像 Memcached之类的服务来缓存会话数据以获得高性能。

还要注 意其中存在安全性的问题,因为黑客可 以伪造另一个用户的会话ID,这是很容易找到或看到的,特别是在公用的Wi-Fi中。解决方法是对会话ID进行恰当的加密或者签名,并将其与时间区间、 IP地址以及其他关键信息 像浏览器或者其他细节相绑定。在Internet上有很多不错的关于良好的会话管理的例子,你可以根据需要找到最适合的。

 

总是要考虑安全性
尽管编写像防止SQL注入和登录安全之类的 代码涉及很多安全问题,但不幸的是,几乎没有人考虑过安全性,而那些考虑到的人也没有对其进行很好地理解。而本文要关注的是操作性的系统安全。对于这类安 全,我们的焦点集中在三个安全领域:防火墙、运行的用户以及文件访问权限。

除了配置专门的硬件防火墙(像Cisco的 ASA)之外,所有服务器都还应该运行像Iptables之类的防火墙,它会保护服务器免受其他威胁和攻击。这些威胁和攻击可能来自公共的 Internet、其他服务器或本地服务器,也包括使用VPN或者SSH通道的开发和操作人员。我们仅对指定的IP开放确实需要的端口。Iptables 可能会很复杂,但是有很多不错的模板,我们通常可以使用它们来帮助客户创建Iptables。例如,默认的RedHat或者CentOS防火墙的配置说明 只有10行,显然并不实用。我们最佳实践的Iptables配置大概有5页,这其中包含了Linux所能提供的最高级的安全防范。

所有公用的服务,都应该运行在专门的用户 下,如Apache。切记永远都不要使用Root用户运行,因为这会让任何闯入到Apache的用户接管整个服务器。如果Apache只是运行在 Apache用户下或者运行在Nobody下,那么闯入Apache就不是一件容易的事情了。

Web服务器运行或者服务的文件 (像.php和.html文件)对于Web服务器的用户应该是不可写的。这意味着Apache或者Nginx用户不应该拥有Web目录的写权限。有很多方 法都可以做到这一点,而最简单的就是将这些文件为其他用户所有,然后让Apache/Nginx等用户归属于能够使用640权限读取文件的组中。这会防范 几乎所有的黑客和针对页面的攻击。

此 外,永远不要使用Ftp来上传文件,特别 是在公用的Wi-Fi环境中,因为在其中黑客很容易盗取用户名和密码。取而代之的是使用Sftp会更加安全。另外,每个雇员都应该拥有自己的用户ID和随 机密码。

 

使用标准的路径和安装配置

一个令人讨厌的部署问题是,开发者很少考虑 他们的软件会被部署到生产Web服务器的什么位置,以及如何部署。我们看到过许多大型的系统将它们的PHP代码部署在/home/xiaofeng或者 /web/code路径下。事实上,这两个路径都是非常不标准的,并且会带来操作和安全性的问题。当这些系统从开发环境转移到测试环境再到生产环境中时, 因为每个安装配置都是非标准的,所以经常会出现问题,这时就需要开发者调整才能够正常工作。

你应该总是使用标准的安装包和二进制文件来 安装像Apache之类的服务器。不要从源代码编译或者安装Tarball,因为这会导致长期稳定性和管理上的问题,另外在服务器上安装多个不同的版本也 会造成混淆。

Web 站点应该总是在指定的平台和 Linux发布的标准路径下进行测试和部署 ,像 RedHat 或者CentOS下的/var/www/html路径。这有助于对系统进行有效的权限管 理、备份、配置、监控以及其他操作。

Web 服务器的日志应该存放在/var /logs或者/var/logs/app_name下,而不应该位于主代码区域。这样做的原因不仅仅是因为这些标准的路径很重要,更应该关注的是,恰当 地配置服务器会将/var配置为分离的文件系统。如果应用程序突然写入了大量日志并占用所有磁盘空间,由于我们做了以上的配置就不会导致系统崩溃,或者其 他严重的问题。如果日志位于其他位置,就可能会产生问题。

总是使用日志

在Web系统中做多少日志都不为过。所有系 统都应该将重要的数据写入到日志中,不管是它们自己的日志还是系统的Syslog。Cron的Job以及其他Shell脚本或者C语言的程序,对日志都有 相应标准以及简单的函数。在Shell脚本中,只需要使用 Logger命令就可以实现日志的写入。在脚本启动/停止、重要的脚本执行以及实时数据产生的 情况下都要执行写入日志操作。这样出现问题的时候,查看主要的系统日志就可以很容易地看到发生了什么。

大型系统经常会使用专门的工具如 Local5来记录日志,并配置Syslog或者Syslog-ng来将其存放在单独的文件中,这样会更容易使用。需要注意的是,Syslog工具和 Logger(以及任何Syslog调用)默认优先使用user.notice,如有必要,你可以对其进行调整。

一个好的系统会对程序进行配置,用来打开或 者关闭日志,并可以选择在每模块或者功能的级别上应用不同级别的日志。这使得我们可以记录非常详细和强大的日志,用来分析和调试在生产操作中所发生的问 题。


大型网站的十项规则

大型高性能网站的十项规则

 

使用良好的数据库设计和SQL

在任何系统中,数据库通常是最大的性能瓶 颈。而影响数据库性能的最大两个问题是数据库设计和SQL代码质量。很多系统都拥有良好的或者至少是可用的数据库设计,但由于没有经过适当的性能测 试,SQL代码质量通常都会很差。这样的SQL代码在开发环境中可能运行很快,因为其中只有小数据集和最小的负载。但是当成千上万的用户同时读取数据库中 上百万条记录的时候,它就很可能会崩溃。

不幸的 是,这些问题一开始并不明显,直到系 统增大、突然开始崩溃的时候才会显现出来。在增大的过程中,数据库系统看起来运行得很快(因为数据都位于内存中,而且很少有并发的查询),并且对用户的响 应也很快,但实际上它的内部运行效率很低。这并不重要,我们关注的是在系统增大并遇到性能问题之前找到这些问题并加以解决。

关于这个问题有很多不错的书和站点进行了解 析,其中的关键工具包括慢查询日志、INNODB状态系统,以及描述当前性能的MySQL统计信息。我们见到过很多系统每秒会读取500,000条数据, 这是出现SQL问题的明显预兆,但公司往往对其一无所知直到服务器开始崩溃。

MySQL系统应该对所有数据使用 INNODB存储引擎,因为INNODB与之前的MyISAM相比,运行得更快、更稳定,并且管理性能和备份工作也更加容易和快捷。在主配置文件 中,INNODB应该被设置为默认的数据库引擎,并且系统应该不时地进行检查,看是否意外创建了MyISAM的表。

总要拥有良好的DB配置和备份

很多公司都没有良好的备份机制,也不知道如 何恰当地完成这项工作。MySQL的Dump是不够的,因为最好的备份方法是使用LVM快照和INNODB对系统进行热备份,从而得到超快的速度和超高的 可靠性。

另外,在将所有备份文件从服务器上转移出来 之前要进行压缩和加密。另外还要确保拥有设计合理的MySQL配置。MySQL默认安装使用说明中只有5~10行关于配置的说明,这根本不适合开发使用。 而我们提供给客户的最佳实践文档足足有10页那么长。文档中大约有100种有用的关于安全、性能和稳定性问题的设定,包括防止数据败坏,其中很多设定都是 非常重要的。

使用读/写数据库分离

随着系统变得越来越庞大,特别是当它们拥有 很差的SQL时,一台数据库服务器通常不足以处理负载。但是多个数据库意味着重复,除非你对数据进行了分离。更一般地,这意味着建立主/从副本系统,其中 程序会对主库编写所有的Update、Insert和Delete变更语句,而所有Select的数据都读取自从数据库(或者多个从数据库)。

尽管概念上很简单,但是想要合理、精确地实 现并不容易,这可能需要大量的代码工作。因此,即便在开始时使用同一台数据库服务器,也要尽早计划在PHP中使用分离的DB连接来进行读写操作。如果正确 地完成该项工作,那么系统就可以扩展到2台、3台甚至12台服务器,并具备高可用性和稳定性。

使用类似Memcached之类的数据库缓存

即便有了好的数据库设计、SQL和读写分 离,大型的系统仍然需要更快的性能,特别是对会话状态、好友列表以及BBS文字之类的东西。为了达到这个目的,我们可以使用像MemCached之类的数 据缓存,它是一个高性能的简单数据缓存,已经被所有最大型的站点使用。但是要小心的是,不要100%依赖于一台Memcache服务器来提高性能,因为如 果那台服务器崩溃了,就会破坏整个系统的性能。在这种情况下,应该使用2~3台Memcache服务器形成簇集架构,并且有选择地包含一个缓存准备过程, 如果缓存服务器重启,需要重新载入数据,它能够快速地载入缓存。


构建测试和开发环境

很多公司只有开发者的桌面系统和他们的生产 服务器。当系统变得越来越大、越来越复杂时,测试和管理代码就会导致严重的问题。最佳的实践是拥有两个测试系统,一个用于开发者的代码和功能的整合测试, 另一个要与生产环境完全一致,从而更容易向生产环境平滑地过渡。幸运的是,现在使用云计算(或者私有云)可以轻松达到这一点。一个5~10台服务器的生产 环境,可以很容易地在办公室或者IDC中使用一台服务器来复制,从而用于测试,而这台服务器我们可以用于多个客户的项目。


使 用版本控制

最后,要对一切使用版本控制,包括测试和生 产环境的部署。很多开发者都使用SVN或者类似的方法。在理想状态下,这些方法可以被用于所有代码、脚本、HTML、图片、配置、文档和测试。版本控制应 该是代码转移到测试环境的必经之路,而不是简单地复制或者使用tar文件,因为这二者都是不可靠的。开发者应该将所有一切都签入,打上标签,然后将它们签 出到测试系统。如果所有都没问题,那么它们会将该版本签出到生产环境。

总结

不管 是在开发还是在运营过程中,创建可靠的 高性能Web系统都有很多应该注意的事项。本文试图从可操作性和可靠性的角度讨论最重要的几点。当你构建和管理站点的时候,请不要忘了这些重要的问题。遵 循这些规则会有助于确保系统长久、良好地运行。

作者简介:

Steve Mushero,ChinaNetCloud 公司联合创始人、CEO兼CTO,拥有全球20多年的技术管理经验。曾担任土豆网、Intermind和 Advanced Management Systems等多家企业CTO

译者简介:

侯伯薇,生于凤城,学在春城,做过国内和对 日项目,现在大连某保险公司工作。乐于钻研技术,同时注重业务知识,勤于思考,愿意与人交流和分享。

]]>
小规模低性能低流量网站设计原则 http://www.phpv.net/html/1687.html http://www.phpv.net/html/1687.html#comment Mon, 20 Apr 2009 10:43:51 +0000 抽烟的蚊子 http://www.phpv.net/html/1687.html 到处都是什么大规模啊,高流量啊,高性能之类的网站架构设计,这类文章一是满足人们好奇心,但看过之后也就看过了,实际收益可能并不大;另外一个副作用是容易让人心潮澎湃,没学走先学跑,在很多条件仍不具备的情况下,过度设计、过度扩展(高德纳大爷也说过,"过早优化是万恶之源"),所以,这里反弹琵琶,讨论一下小规模低性能低流量的网站该如何搞法。

如果站点起步阶段可能就是一台机器(或是一台虚拟机,比如 JobsDigg.com ),这个时候,去关注什么数据拆分啊,负载均衡啊,都是没影子的事情。很多大站点的经验绝不能照搬,辩证的参考才是硬道理。

拥抱熟知的技术

动手构建站点的时候,不要到处去问别人该用什么,什么熟悉用什么,如果用自己不擅长的技术手段来写网站,等你写完,黄花菜可能都凉了。所以,有现成 的软件组件可用,就不要自己重新发明轮子。人家说 Python 牛,但自己只懂 PHP ,那就 PHP 好了,如果熟悉 .net ?,那也不错。用烂技术不是丢人的事情,把好技术用烂才丢人。

架构层次清晰化

起步的阶段应该清楚的确定下来架构的层次。如果都搅和在一起,业务一旦扩增开来,如果原有的一堆东西拆不开就是非常痛苦的事情。

Web Server <--> (AppServer)<-->Cache(eg. Memcached)<-->DB

层次清晰化的一个体现是(以 LAMP 架构为例):即使只有一台机器,也应该起个 Memcached 的实例,效果的确非常好--一般人儿我不告诉他...不要把什么都压到 DB 上,DB 一旦 I/O 压力走到磁盘上,问题要暴露出来是很快的。没错,DB 本身也会利用自己的 Cache,但 DB 的Cache 和 Memcached 设计出发点毕竟不一样。

数据冗余? 有必要

很多人并不是数据库设计专家,如果应用要自己设计表结构什么的,基本都是临时抱佛脚,但三个范式很多人倒是记得牢,这是大多数小型 Web 站点遇到的一个头疼事儿,一个小小的应用搞了几十个表... 忘掉范式这个玩意儿! 记住,尽可能的冗余数据,你在数据层陷入的时间越多,你在产品上投入的就会越少。用户更关心的是产品的设计。

前端优化很重要

因为流量低,访客可能也不多,这时候值得注意的是页面不要太大,多数流量低的站点吃亏就在于一个页面动辄几兆(我前两天看到一个Startup的首页有4M之大,可谓惊人),用户看个页面半分钟都打不开,你说咋发展? 先把基本的条件满足,再去研究前端优化

功能增加要谨慎

不是有个 80/20 原则么? 把最重要的精力放在最能给你带来商业价值的地方。有些花里胡哨的功能带来很大的开销,反而收效甚微。记住,小站点,最有价值的是业务模式,而不是你的技术有多牛。技术是为业务服务的,不要炫技。

有些网站不停的添加功能,恰恰是把这些新功能变成了压死自己的稻草。

从开始考虑性能

这一点是可选的,但也重要。设计应用的时候在开始就应考虑 Profile 这件事情。一套应用能否在后期进行有效优化和扩展,很大的程度限制在是否有比较合适的 Profile 机制上。需要补充的是,对性能的考虑必然要把有关的历史数据考虑进来。另请参见网站运维之道的容量规划以及其它小帖子。

好架构不是设计出来的

这是最后要补充的一点。好的架构和最初的设计有关系,但最重要的是发展中的演化:

发展-->发现问题-->反馈-->解决问题(执行力)--> 改进->进化到下一阶段--新问题出现(循环)

有些站点到了某个阶段停足不前,可能卡在执行力这个地方,来自用户的反馈意见上来了之后,没有驱动力去做改进。最后也是死猪不怕开水烫了。最怕听到的就是"业务不允许"的托词,试想如果不改进业务都没了,那业务还允许么? 其实就是一层心理障碍。

这篇文章有浓重的山寨风格,所以,你不要太认真。如果在用短、平、快的方式构建某些山寨网站的话,可参考其中对你有益的点,不赞同的地方可以直接忽视掉,就没必要费力留言进行争论了。

]]>
web工程师的web架构设计经验分享 http://www.phpv.net/html/1663.html http://www.phpv.net/html/1663.html#comment Sat, 10 Jan 2009 13:56:46 +0000 抽烟的蚊子 http://www.phpv.net/html/1663.html 本人作为一位web工程师,着眼最多之处莫过于性能与架构,本次幸得参与sd2.0大会,得以与同行广泛交流,于此二方面,有些架构设计的心得,不敢独享,与众友分享,本文是这次参会与众同撩交流的心得.

架构设计的几个心得:


一,不要过设计:never over design

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

ebay的工程师说过,他们的架构设计从来都不能满足系统的增长,所以他们的系统永远都在推翻重做。请注意,不是ebay架构师的能力有问题,他们 设计的架构总是建立旧版本的瓶颈上,希望通过新的架构带来突破,然而新架构带来的突破总是在很短的时间内就被新增需求淹没,于是他们不得不又使用新的架构
web开发,是个非常敏捷的过程,变化随时都在产生,用户需求千变万化,许多方面偶然性非常高,较之软件开发,希望用一个架构规划以后的所有设计,是不现实的

二,web架构生命周期:web architecture‘s life cycle


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

architecture_life_cycle

所设计的架构需要在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 ..............................................

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

database

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

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

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


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


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


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


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

现在大的软件公司比较流行的做法是:
注重产品设计文档,在这种方法里,产品文档非常详尽,并且没有歧义,开发人员基于设计文档开发,测试人员基于设计文档制定测试方案,任何新人都可以通过阅读产品设计文档来了解项目的概况

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

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


八,团队:team


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

 

总结:

架构是一种权衡

architecture

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

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

人的因素会更加重要,无论是对用户的需求,还是开发人员的素质。

]]>
什么是信息架构? 个人谈如何理解WEB信息架构 http://www.phpv.net/html/1662.html http://www.phpv.net/html/1662.html#comment Fri, 09 Jan 2009 16:30:38 +0000 抽烟的蚊子 http://www.phpv.net/html/1662.html

一直不敢写关于信息架构概念方面的文章,因为一直觉得自己理解的只是皮毛,读了一些行业内的人关于信息架构的分析文章,感觉也是盲人摸象。


我曾经还在公司分享过关于信息架构的理解,现在看来非常片面和笼统。
写这篇文章也并非说我已经领悟了信息架构的要领,但起码比半年前有更深的理解,帮助我理解这个概念来自多方面:
1 信息管理专业背景出身的同事,以及产品分析人员做的一些竞品分析
2 读《基于信息理解的信息构建》一书
3 跟朋友聊天
4 在具体项目中的领悟(这个很重要)

信息架构是一门跨多学科、领域的知识,说说我曾经的误区:
读过《用户体验的要素》之后,我觉得在视觉和交互设计背后有更深次的学问,这个东西更加决定一个网站的好坏,当时觉得网站的架构的难度、复杂程度要远远高于一个细节的交互,重要程度也不一样。

当时的误区在于把信息架构片面地理解成了导航结构。
导航结构其实只是信息架构的表现层,跟交互设计一样,从某种意义上说,信息不经过设计和组织,其中也必然会有一些天然的联系,在设计的过程中,我们只是将这样的结构用一种用户可以理解的方式呈现出来,表现形式确实是导航结构,但在设计流程中,绝非设计导航那么简单。

千鸟很早以前说过,信息架构并非是互联网产生之后,很早的传统行业,最典型的就是图书馆,如果给成千上万的书籍分类索引。再比如超市,如何摆放货物等等。

我最早看到的只是信息架构的表现层,但在具体的项目工作中,如何通过数据的挖掘、信息的关系的强弱,将信息合理地映射成一个容易被理解的网状结构,这点是在导航结构设计之前需要弄清楚的问题。
前段时间我试着拿博客的架构来理解,谈得并不深入,多数说的也是表现层,但其实在理解表现层之前,要了解博客文章,先要理解文章的划分维度、特性:
1 文章是单元结构
2 文章与文章之间的(强弱)联系
3 文章本身将包含哪些属性?时间、作者、分类、tag等等

这些不经过设计,这些关系都是天然存在的。很多的博客架构不尽相同,只是因为每个作者偏重的关系不一样。

再比如说音乐和图片的网站,last.fm和flickr对两者的理解做得很到位,这两个站没有太多的营销、但是他们对图片信息、歌曲信息的各种组织方式,信息节点都考虑得很到位。
把信息关系搞清楚了,用户需要什么,信息入口在哪,优质内容如何呈现,这些问题可能就不那头疼了。
在理解信息架构的基础上,设计师在设计具体的页面结构设计的时候,会变得有理有据。

大家对信息架构的理解都还比较含糊,每个人都用自己的知识结构去理解,但很多信息类网站确实已经暴露了类似的问题,这方面的问题一定会被越来越被关注的。希望再过半年,我也能有新的理解。
接下来有时间再读一下这本书:《Web信息架构

]]>
大型网站架构系列之一 不得不考虑的问题 http://www.phpv.net/html/1659.html http://www.phpv.net/html/1659.html#comment Wed, 07 Jan 2009 17:10:58 +0000 抽烟的蚊子 http://www.phpv.net/html/1659.html   注意:这里的大型网站架构只包括高互动性高交互性的数据型大型网站,基于大家众所周知的原因,我们就不谈新闻类和一些依靠HTML静态化就可以 实现的架构了,我们以高负载高数据交换高数据流动性的网站为例,比如海内,开心网等类似的web2.0系列架构。我们这里不讨论是PHP还是JSP或 者.NET环境,我们从架构的方面去看问题,实现语言方面并不是问题,语言的优势在于实现而不是好坏,不论你选择任何语言,架构都是必须要面对的。

  文入正题:

  首先讨论一下大型网站需要注意和考虑的问题

  A. 海量数据的处理。

  众所周知,对于一些相对小的站点来说,数据量并不是很大,select和update就可以解决我们面对的问题,本身负载量不是很大,最多再加 几个索引就可以搞定。对于大型网站,每天的数据量可能就上百万,如果一个设计不好的多对多关系,在前期是没有任何问题的,但是随着用户的增长,数据量会是 几何级的增长的。在这个时候我们对于一个表的select和update的时候(还不说多表联合查询)的成本的非常高的。

  B. 数据并发的处理

  在一些时候,2.0的CTO都 有个尚方宝剑,就是缓存。对于缓存,在高并发高处理的时候也是个大问题。在整个应用程序下,缓存是全局共享的,然而在我们进行修改的时候就,如果两个或者 多个请求同时对缓存有更新的要求的情况下,应用程序会直接的死掉。这个时候,就需要一个好的数据并发处理策略以及缓存策略。

  另外,就是数据库的死锁问题,也许平时我们感觉不到,死锁在高并发的情况下的出现的概率是非常高的,磁盘缓存就是一个大问题。

  C. 文件存贮的问题

  对于一些支持文件上传的2.0的站点,在庆幸硬盘容量越来越大的时候我们更多的应该考虑的是文件应该如何被存储并且被有效的索引。常见的方案是 对文件按照日期和类型进行存贮。但是当文件量 是海量的数据的情况下,如果一块硬盘存贮了500个G的琐碎文件,那么维护的时候和使用的时候磁盘的Io就是一个巨大的问题,哪怕你的带宽足够,但是你的 磁盘也未必响应过来。如果这个时候还涉及上传,磁盘很容易就over了。

  也许用raid和专用存贮服务器能解决眼下的问题,但是还有个问题就是各地的访问问题,也许我们的服务器在北京,可能在云南或者新疆的访问速度如何解决?如果做分布式,那么我们的文件索引以及架构该如何规划。

  所以我们不得不承认,文件存贮是个很不容易的问题

  D. 数据关系的处理

  我们可以很容易的规划出一个符合第三范式的数据库,里面布满了多对多关系,还能用GUID来替换INDENTIFY COLUMN 但是,多对多关系充斥的2.0时代,第三范式是第一个应该被抛弃的。必须有效的把多表联合查询降到最低。

  E. 数据索引的问题

  众所周知,索引是提高数据库效率查询的最方面最廉价最容易实现的方案。但是,在高UPDATE的情况下,update和delete付出的成本 会高的无法想想,笔者遇到过一个情况,在更新一个聚焦索引的时候需要10分钟来完成,那么对于站点来说,这些基本上是不可忍受的。

  索引和更新是一对天生的冤家,问题A,D,E这些是我们在做架构的时候不得不考虑的问题,并且也可能是花费时间最多的问题,

  F. 分布式处理

  对于2.0网站由于其高互动性,CDN实现的效果基本上为0,内容是实时更新的,我们常规的处理。为了保证各地的访问速度,我们就需要面对一个绝大的问题,就是如何有效的实现数据同步和更新,实现各地服务器的实时通讯有是一个不得不需要考虑的问题。

  G. Ajax的利弊分析

  成也AJAX,败也AJAX,AJAX成为了主流趋势,突然发现基于XMLHTTP的post和get是如此的容易。客户端get或者post 到服务器数据,服务器接到数据请求之后返回来,这是一个很正常的AJAX请求。但是在AJAX处理的时候,如果我们使用一个抓包工具的话,对数据返回和处 理是一目了然。对于一些计算量大的AJAX请求的话,我们可以构造一个发包机,很容易就可以把一个webserver干掉。

  H. 数据安全性的分析

  对于HTTP协议来说,数据包都是明文传输的,也许我们可以说我们可以用加密啊,但是对于G问题来说的话,加密的过程就可能是明文了(比如我们 知道的QQ,可以很容易的判断他的加密,并有效的写一个跟他一样的加密和解密方法出来的)。当你站点流量不是很大的时候没有人会在乎你,但是当你流量上来 之后,那么所谓的外挂,所谓的群发就会接踵而来(从qq一开始的群发可见端倪)。也许我们可以很的意的说,我们可以采用更高级别的判断甚至HTTPS来实 现,注意,当你做这些处理的时候付出的将是海量的database,io以及CPU的成本。对于一些群发,基本上是不可能的。笔者已经可以实现对于百度空 间和qq空间的群发了。大家愿意试试,实际上并不是很难。

  I. 数据同步和集群的处理的问题

  当我们的一台databaseserver不 堪重负的时候,这个时候我们就需要做基于数据库的负载和集群了。而这个时候可能是最让人困扰的的问题了,数据基于网络传输根据数据库的设计的不同,数据延 迟是很可怕的问题,也是不可避免的问题,这样的话,我们就需要通过另外的手段来保证在这延迟的几秒或者更长的几分钟时间内,实现有效的交互。比如数据散 列,分割,内容处理等等问题

  K.数据共享的渠道以及OPENAPI趋势

  Openapi已经成为一个不可避免的趋势,从google,facebook,myspace到 海内校内,都在考虑这个问题,它可以更有效的留住用户并激发用户的更多的兴趣以及让更多的人帮助你做最有效的开发。这个时候一个有效的数据共享平台,数据 开放平台就成为必不可少的途径了,而在开放的接口的情况保证数据的安全性和性能,又是一个我们必须要认真思考的问题了。

  当然还有更多需要考虑的问题,我这里就写一个最需要考虑的问题,欢迎补充。下一篇文章将针对问题A,提出具体的解决方案和思路

]]>
Javascript跨域和Ajax跨域解决方案 http://www.phpv.net/html/1627.html http://www.phpv.net/html/1627.html#comment Sun, 31 Aug 2008 15:25:50 +0000 抽烟的蚊子 http://www.phpv.net/html/1627.html

    最近做的一个项目中需要ajax跨域取得数据,如果是在本域中确实没有问题,但是放到二级域和其他域下浏览器直接就弹出提示框:“该页正在访问其控制范围之外的数据,这有些危险,是否继续"


1.什么引起了ajax跨域不能的问题
ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告。

2.有什么完美的解决方案么?
没有。解决方案有不少,但是只能是根据自己的实际情况来选择。

具体情况有:
一、本域和子域的相互访问: www.aa.com和book.aa.com
二、本域和其他域的相互访问: www.aa.com和www.bb.com 用 iframe
三、本域和其他域的相互访问: www.aa.com和www.bb.com 用 XMLHttpRequest访问代理
四、本域和其他域的相互访问: www.aa.com和www.bb.com 用 JS创建动态脚本


解决方法:
一、 如果想做到数据的交互,那么www.aa.com和book.aa.com必须由你来开发才可以。可以将book.aa.com用iframe添加到 www.aa.com的某个页面下,在www.aa.com和iframe里面都加上document.domain = "aa.com",这样就可以统一域了,可以实现跨域访问。就和平时同一个域中镶嵌iframe一样,直接调用里面的JS就可以了。(这个办法我没有尝 试,不过理论可行)


二、当两个域不同时,如果想相互调用,那么同样需要两个域都是由你来开发才可以。用iframe可以实现数据的互相调用。解决方案就是用window.location对象的hash属性。hash属性就是http://domian/web/a.htm#dshakjdhsjka 里面的#dshakjdhsjka。利用JS改变hash值网页不会刷新,可以这样实现通过JS访问hash值来做到通信。不过除了IE之外其他大部分浏 览器只要改变hash就会记录历史,你在前进和后退时就需要处理,非常麻烦。不过再做简单的处理时还是可以用的,具体的代码我再下面有下载。大体的过程是 页面a和页面b在不同域下,b通过iframe添加到a里,a通过JS修改iframe的hash值,b里面做一个监听(因为JS只能修改hash,数据 是否改变只能由b自己来判断),检测到b的hash值被修改了,得到修改的值,经过处理返回a需要的值,再来修改a的hash值(这个地方要注意,如果a 本身是那种查询页面的话比如http://domian/web/a.aspx?id=3,在b中直接parent.window.location是无法取得数据的,同样报没有权限的错误,需要a把这个传过来,所以也比较麻烦),同样a里面也要做监听,如果hash变化的话就取得返回的数据,再做相应的处理。


三、 这种情形是最经常遇到的,也是用的最多的了。就是www.aa.com和www.bb.com你只能修改一个,也就是另外一个是别人的,人家告诉你你要取 得数据就访问某某连接参数是什么样子的,最后返回数据是什么格式的。而你需要做的就是在你的域下新建一个网页,让服务器去别人的网站上取得数据,再返回给 你。domain1下的a向同域下的GetData.aspx请求数据,GetData.aspx向domain2下的 ResponseData.aspx发送请求,ResponseData.aspx返回数据给GetData.aspx, GetData.aspx再返回给a,这样就完成了一次数据请求。GetData.aspx在其中充当了代理的作用。具体可以看下我的代码。


四、 这个和上个的区别就是请求是使用<script>标签来请求的,这个要求也是两个域都是由你来开发才行。原理就是JS文件注入,在本域内的a 内生成一个JS标签,它的SRC指向请求的另外一个域的某个页面b,b返回数据即可,可以直接返回JS的代码。因为script的src属性是可以跨域 的。具体看代码,这个也比较简单。

code:
http://www.live-share.com/files/300697/Cross_The_Site_Test_code.rar.html
(csdn不能粘贴附件么?)

总结:
第一种情况:域和子域的问题,可以完全解决交互。
第二种情况:跨域,实现过程非常麻烦,需要两个域开发者都能控制,适用于简单交互。
第三种情况:跨域,开发者只控制一个域即可,实现过程需要增加代理取得数据,是常用的方式。
第四种情况:跨域,两个域开发者都需要控制,返回一段js代码。

PS:代码自己按照情况修改即可。

这是拿别人的参考链接,老美的文章比较多。

1. Security Considerations: Dynamic HTML
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/sec_dhtml.asp

2. About Cross-Frame Scripting and Security
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/xframe_scripting_security.asp

3. Cross-Domain Proxy
http://ajaxpatterns.org/Cross-Domain_Proxy

4. Cross Domain XMLHttpRequest using an IFrame Proxy
http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75

5. Back Button Support for Atlas UpdatePanels
http://www.nikhilk.net/BackButtonSupport.aspx

6. Cross-document messaging hack
http://blog.monstuff.com/archives/000304.html

7. Building Mash-ups with "Atlas"
http://atlas.asp.net/docs/Walkthroughs/DevScenarios/bridge.aspx

8. Calling web services hosted outside of your application with “Atlas”
http://blogs.msdn.com/federaldev/archive/2006/07/31/684229.aspx

http://www.federaldeveloper.com/Shared%20Documents/Presentations%20by%20Marc%

20Schweigert/CallAtlasWebServiceInDifferentProject.zip

9. AJAX Tip: Passing Messages Between iframes
http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15

10. OSCON Cross-site Ajax Slides
http://blog.plaxo.com/archives/2006/07/oscon_crosssite.html

http://www.plaxo.com/css/api/Joseph-Smarr-Plaxo-OSCON-2006.ppt

11. OSCON 2006: Cross-site Ajax
http://www.sitepoint.com/blogs/2006/07/28/oscon-2006-cross-site-ajax/
]]>
如何为 MySQL 选择更合适的服务器硬件 http://www.phpv.net/html/1596.html http://www.phpv.net/html/1596.html#comment Fri, 02 May 2008 14:06:59 +0000 抽烟的蚊子 http://www.phpv.net/html/1596.html DBA notes为 MySQL 选择更合适的硬件我转摘过来,并根据自己的使用习惯做了点评.以下部分,红色字体为我的话.


-------------------------------------------- 分割线 ----------------------------------------


MySQL 爱好者关注的 2008 MySQL Conference & Expo 落幕后,很多文档都能看到了。今天读了一下这篇 Scaling Out MySQL: Hardware Today and Tomorrow。感兴趣的朋友也不防下载下来研究一下。

用什么样的硬件做 MySQL ,真不是三言两语能说清楚的。不过该讲座中还是能总结出来几点关键点的。


CPU 选择

首先如有可能就选择 64 位CPU,这样才可以安装 64 位操作系统,有了 64 位操作系统才能利用好更大的内存。如果非要抬杠的话,不是 64 位芯片也可以安装 64 位操作系统,也就是 Intel 的 EM64T 的解决方案(这也是文档中没提及的) 。

我个人倒是比较喜欢 AMD 64 位 CPU 的,物美价廉,性能也不错。

注意: MySQL 在多核上的 Bug 问题。


(1.现在配置的服务器,基本上都是64位的CPU.也许出于对稳定和系统兼容性的考虑,很多管理员更喜欢安装32位的操作系统.我前段上线的一台53XX的四核至强CPU服务器,安装的是linux 64位操作系统[ubuntu server 8.0.4] 测试下来,在跑WEB服务这块,似乎没有任何稳定和软件兼容上的问题,大家可放心使用.

2.CPU个数,当然是双路或者四路最好.但如果压力不是非常巨大,我认为一颗CPU也够用了.省下的钱去换好的硬盘和加大内存,效果会更明显)


内存,来者不拒

第二点是尽可能配置比较大的内存,当然,只配置大内存如果 MySQL 参数配置有问题,还是摆设,如何设置各个引擎的 Cache 相关参数,够写一本书的了。

现在市场上内存是越来越便宜了。我个人的感觉内存降价的程度比 CPU 和硬盘都夸张很多。所以,考虑到人力越来越贵,内存越来越便宜,配置服务器的时候就别太吝啬了。


(1. 这点几乎是共识了,个人推荐4G以上内存.参数配置和缓存设置方面我认为,一是别道听途说,自己多测试性能.按自己的实际情况调整参数. 二是认真看官方手册,手册的大多数,基本上算是真理了.)



硬盘--唯快不破

国内用 MySQL ,绝大多数都是直接仍在本机磁盘上的。这个磁盘的选择要慎重一点点。尽量选择 15K 而不要 10K 慢速磁盘,大多数数据库的磁盘问题都在速度上,如果只在磁盘上多花费 30%的钱而能得到总体性能的 30%收益,那么还是值得的,而容量多数情况下不会出现问题,现在的硬盘容量就是一个大。

至于选择什么类型的磁盘,SCSI 与 SAS 都可选,SATA 倒是够便宜,特定的应用再考虑吧。

这三板斧看是简单活,但是实际的应用场景下可未必就能做出更优的选择。最简单的东西也有人不知道不是?


(是的,把CPU节省下来的钱,换上一块好的硬盘吧. 如果有需要,推荐部署单独的数据库服务器)

]]>
什么是web 2.0 http://www.phpv.net/html/1481.html http://www.phpv.net/html/1481.html#comment Mon, 10 Oct 2005 01:27:43 +0000 easy http://www.phpv.net/html/1481.html 什么是web 2.0(1)
为下一代软件的设计模式和商业模板

2001年秋季网络泡沫的破灭标志着互联网的一个转折点。很多人得出结论说,互联网被过分夸大了,实际上,泡沫和随之而来的衰退看上去是所有科技革命的共同特点。衰退是正处于上升期的科技准备占据中央舞台的特色。伪装者被逐出门外,真正的成名故事显示出他们的实力,开始理解一个事物与其他分开的原因。

Web 2.0的概念开始于O’Reilly与 MediaLive International的一个献计献策会。网络先锋人物和O’Reilly公司副总裁Dale Dougherty指出,网络非但没有破灭,而且随着许多令人激动的新程序和网站让人惊讶的突然规律性出现,网络比以往的作用更重要。更重要的是,在互联网灾难中幸存下来的公司看上去有一些共同的特点。.com公司的垮掉能在某种程度上标志互联网的转折点吗, web 2.0这样的称呼有意义吗?我们同意它的确是,web 2.0大会就这样诞生了。

在那以后的一年半时间内,web 2.0这个词就无疑已经生根,在Google上有超过950万个引用结果。但仍有大量对web 2.0含义的不同观点,一些人谴责这只不过是一个毫无意义的市场时髦吵作词汇(buzzword),其他人则认为它是一个新的传统概念。

本文旨在阐明我们通过web2.0想要表达的含义。

在最初的集体讨论上,我们用例子阐明了我们对web2.0的理解。

Web 1.0―> Web 2.0
DoubleClick―>Google AdSense
Ofoto(网上照片
贮存和共享服务的提供商)―>Flickr
Akamai(阿卡迈技术公司)―>BitTorrent
mp3.com―>Napster
不列颠百科全书在线―>Wikipedia
个人网站―>网络日志(博客、部落格)
evite―>upcoming.org and EVDB
域名投机买卖―>搜索引擎优化(SEO)
网页浏览―>每次点击成本
屏幕抓取―>网络服务
发表/出版―>参与
内容管理系统(CMS)―>维基(wiki)
目录(分类)―>标签(“folksonomy”)
粘性―>聚合

这个表格还可以不断往前进。但是,究竟什么可以让我们确定一种程序或道路是web 1.0,而另外一种则是web 2.0呢?(这个问题非常迫切,因为web 2.0 概念已经非常流行,许多公司把它当作市场时髦词汇了,却并不真正理解它的含义。问题特别困难,因为许多对时髦词汇有癖好的创业型公司绝对不是web 2.0。其他有些程序如napster和BT被认为是web2.0,但它们甚至不是适当的网络应用程序!译者注:应该是由于版权问题)
web 1.0有一些被成功故事以及最有趣的新应用程序证明的原则,下面是列表。
1,作为平台的网络

和其他许多重要的概念一样,web2.0没有坚实的分界线,但有重力的核心。可以通过一系列原则和实践把web 2.0形象化,并证明部分或所有原则都在离核心或远或近的地方。

上图显示了在FOO Camp的一次献计献策会上的web 2.0“meme map”。这是一项正在进行的工作,但显示了许多来自web 2.0核心的思想。
例如,在2004年10月第一届web 2.0大会上,John Battelle和我在公开讨论中列出了初步的一系列原则。第一个原则就是“作为平台的互联网”。虽然这也是web 1.0时代骄子网景公司的口号。更重要的是,web 1.0时代最初的2个标兵

]]>
Web网站安全性的五个误解 http://www.phpv.net/html/1400.html http://www.phpv.net/html/1400.html#comment Tue, 15 Mar 2005 00:59:38 +0000 easy http://www.phpv.net/html/1400.html 目前,黑客攻击已成为一个很严重的网络问题。许多黑客甚至可以突破SSL加密和各种防火墙,攻入Web网站的内部,窃取信息。黑客可以仅凭借浏览器和几个技巧,即套取Web网站的客户信用卡资料和其它保密信息。

   随着防火墙和补丁管理已逐渐走向规范化,各类网络设施应该是比以往更完全。但不幸的是,道高一尺,魔高一丈,黑客们已开始直接在应用层面对Web网站下手。市场研究公司Gartner的分析师指出,目前有70%的黑客袭击事件都发生在应用程序方面。要增强Web网站的安全性,首先要澄清五个误解。

   一、“Web网站使用了SSL加密,所以很安全”

   单靠SSL加密无法保障网站的安全。网站启用SSL加密后,表明该网站发送和接收的信息都经过了加密处理,但是SSL无法保障存储在网站里的信息的安全。许多网站采用了128位SSL加密,但还是被黑客攻破。此外,SSL也无法保护网站访问者的隐私信息。这些隐私信息直接存在网站服务器里面,这是SSL所无法保护的。

   二、“Web网站使用了防火墙,所以很安全”

   防火墙有访问过滤机制,但还是无法应对许多恶意行为。许多网上商店、拍卖网站和BBS都安装了防火墙,但依然脆弱。防火墙通过设置“访客名单”,可以把恶意访问排除在外,只允许善意的访问者进来。但是,如何鉴别善意访问和恶意访问是一个问题。访问一旦被允许,后续的安全问题就不是防火墙能应对了。

   三、“漏洞扫描工具没发现任何问题,所以很安全”

   自1990年代初以来,漏洞扫描工具已经被广泛使用,以查找一些明显的网络安全漏洞。但是,这种工具无法对网站应用程序进行检测,无法查找程序中的漏洞。

   漏洞扫描工具生成一些特殊的访问请求,发送给Web网站,在获取网站的响应信息后进行分析。该工具将响应信息与一些漏洞进行对比,一旦发现可疑之处即报出安全漏洞。目前,新版本的漏洞扫描工具一般能发现网站90%以上的常见安全问题,但这种工具对网站应用程序也有很多无能为力的地方。

   四、“网站应用程序的安全问题是程序员造成的”

      程序员确实造成了一些问题,但有些问题程序员无法掌控。

   比如说,应用程序的源代码可能最初从其它地方获得,这是公司内部程序开发人员所不能控制的。或者,公司可能会请一些离岸的开发商作一些定制开发,与原有程序整合,这其中也可能会出现问题。或者,一些程序员会拿来一些免费代码做修改,这也隐藏着安全问题。再举一个极端的例子,可能有两个程序员来共同开发一个程序项目,他们分别开发的代码都没有问题,安全性很好,但整合在一起则可能出现安全漏洞。

   很现实地讲,软件总是有漏洞的,这种事每天都在发生。安全漏洞只是众多漏洞中的一种。加强员工的培训,确实可以在一定程度上改进代码的质量。但需要注意,任何人都会犯错误,漏洞无可避免。有些漏洞可能要经过许多年后才会被发现。

   五、“我们每年会对Web网站进行安全评估,所以很安全”

   一般而言,网站应用程序的代码变动很快。对Web网站进行一年一度的安全评估非常必要,但评估时的情况可能与当前情况有很大不同。网站应用程序只要有任何改动,都会出现安全问题的隐患。

   网站喜欢选在节假日对应用程序进行升级,圣诞节就是很典型的一个旺季。网站往往会增加许多新功能,但却忽略了安全上的考虑。如果网站不增加新功能,这又会对经营业绩产生影响。网站应该在程序开发的各个阶段都安排专业的安全人员。

]]>