这一切只为你
点燃生命
梦随着爱飞翔
随着那夜的月光来到天边
换成礼花的颜色
星蕊漫步银河
不知哪儿是方向
烟花袭来
一声爆破
坠到死海
失去火的滋味
一缕青烟
无目的的等待
永远不知散去
飘到云霄
使大地得到震撼
点燃生命
梦随着爱飞翔
随着那夜的月光来到天边
换成礼花的颜色
星蕊漫步银河
不知哪儿是方向
烟花袭来
一声爆破
坠到死海
失去火的滋味
一缕青烟
无目的的等待
永远不知散去
飘到云霄
使大地得到震撼
从一扇长长的窗口开始,一个女人走进秋天
吹散的长发与风无关。山一直在倾听着海啸
男人习惯用佛的预言拉长时间的距离和窃喜
撒哈拉对廊桥的渴望羽化成五百年前的擦肩
一片简单的叶子 轻易就将悲欢刻入了筋脉
精致的月光从不同的角度收集了慌乱的温柔
落魄诗人以聊斋的方式染红了江边的青草地
满天飞舞的柳絮和女人交换了童年的羊角辫
有没有一泓清泉在山的那边静静编织蓑衣?
有没有一枝短笛轻轻吹起了马背上的歌谣?
给你一个借口,你会纵身跳进我无边的眼神
给你一根火柴,你会和今夜的天空一起燃烧
偶尔的一阵风无意间碰醒了铁轨边的老槐树
一些洁白的冰棱耐心地收藏起了诗人的痕迹
月光泼下来,覆盖着千年万年的惊叹
开始与结束,这死亡的回归呀
我将牵谁的手一起共度
饶过感情,你始终走在我的面前
在你手指叠出的风韵里
我仅是一只远行之雁,那些
姹紫嫣红的景致,与我无关
在一个很瘦的黄昏,我悟出了
伤心的细节,于是
我读你远去的背影,慌如隔世的梦
爱你,最终无法逃避尘世的捆扰
PHP是一个很优秀的工具,它可以简单,也可以复杂。不一样的项目,应该用不一样的PHP。
小项目 – 简单而直接的PHP
一般对于一个功能页面在20以下的网站,我们可以用一个很简单的框架结构来写。在这个规模上,我建议是使用比较直接的面向过程编码方法,原因很简单,没有必要把class文件弄的N 多,结果controller里边就一个new就完了。当然,需求频繁变化的项目除外。
在这个级别上,php优点表现的很明显:快速开发,一目了然。缺点同时也被隐藏得很好。
中型项目 – 结构优美的OO化的PHP
对于一个中型项目,我建议使用一个良好设计的框架来做,这个框架可以是基于MVC模型,封装了众多底层操作的,当然,一定要有一个好的最好是透明的cache机制,这样,我们为了适应变化而加入的OO机制可以运行得更快更好。
在这个级别上。php的缺点开始凸现,像对OO支持的不完整(这个PHP5有很大改进),只能单线程模式。另外一些外围工具开始出现缺乏支持,像PHP没有好的重构工具,没有好的集成到IDE中的单元测试工具。优点当然还是原来的快速开发,广泛的可用的开源资源。
大型项目 – 扩展、优化后的PHP
这里的大型项目,简单的指分布式项目,就是说,你的程序需要被部署在N台服务器上了。在这个层级上,PHP比起j2ee的确缺乏很多支持。我曾和shadow在735上详细讨论过PHP要在大型系统上应用需要解决的一些问题,当然这些问题不光是PHP这个语言的问题,也包括了周边开发的问题:
1 PHP的页面代码共享,PHP的源代码被载入内存一次以后,就在其中保留 – 这个用APC和Zend的优化器可以搞定。
2 PHP页面之间的数据对象共享,a.php和b.php之间可以共享一个数据对象,比如数组,这个现在可以用序列化来作,但是会有文件io,这块可以用共享内存或者memcached来处理。
3 PHP的数据库连接池,因为在多前端的情况下,PHP控制不住对数据库的连接,所以需要在数据库前边去作一个连接池,类似于sqlrelay的东西。另外数据缓存也是很重要的,大压力开发有一个tip,就是能不动数据库就不要动数据库。
4 PHP的前端cache系统。一个透明的可控制的cache机制,确保网站的页面以最少次数查询数据库。这个有很多实现,但是没有找到特别好的。
5 一个PHP应用,成功的解决调这几个问题以后,应付稍微大一点的压力是没有什么问题的。
在这个级别上,重要的是,把PHP java C++ python之类融合起来,使其成为一个高效系统。我们可以用memcached来做分布式内存管理,可以用Lucene 来作全文检索,用ejb 容器来放一些业务逻辑组件,PHP则作为前端和系统的胶水,快速而灵活的把这些粘合起来
Imperva(专注于数据库及应用系统安全的专业技术公司)已经给SecureSphere(数据库安全网关,Imperva公司产品)增加了一项新的技术,这项技术可以追踪到数据库中哪些敏感字段值受到修改。
Imperva已经将这个新功能加入到它的数据库监控产品中,能够让用户追踪到敏感字段值的修改,这种追踪的精确度能达到行级。
该公司将此技术称为Track Value Change,作为SecureSphere数据库安全网关软件的一部分。旨在追踪数据库中字段值的修改,公司官员称此产品可成为所谓“内部威胁”的解决方案,还能为那些指望通过遵守如萨班斯•奥克斯利法案(Sarbanes-Oxley Act)来解决财务安全问题的公司排忧解难。
公司官员说未经授权对数据库进行修改的用户,将会面临长期和全面的调查,以此来揭示未授权者对哪些数据做了修改,并且还能恢复到原来的值。
公司官员还说使用Track Value Change技术,SecureSphere能够监控和审核特定记录的数值,或者一张数据库表中的某些行。另外,SecureSphere还能让组织机构进行一些设置,当一些字段值的修改违反了先前制定的规则或者界限时,会生成一个警告。举个例子,SecureSphere能够识别一些潜在的欺骗行为,如信用卡额度大幅增加,销售发票过度折扣,产品库存量大幅增加等。
Imperva公司在企业数据库审查领域,和其它多家公司竞争,包括Application Security、Guardian、Lumigent Technologies 和Tizor System。
和基于触发器的方法不同,SecureSphere使用重复运行记录来监控修改操作,并且识别执行该操作的用户。
Imperva公司市场战略高级经理Mark Kraynak说:“使用数据库触发器的方法的产品需要维护,并不是一蹴而就的,需要有人工的介入。而SecureSphere追踪字段值的修改的方法更加智能化,不需要人工干预而达到一个很好的效果。因此,使用数据库触发器来追踪字段值的修改,就像让狐狸来守卫鸡舍,因为数据库管理员可以介入进行操作,他们能创建和修改触发器,达不到实际的安全效果,而SecureSphere却能实现职权分离。
另外,不像基于数据库触发器的方法,需要对数据库进行侵入式修改。SecureSphere的方法不需要改变数据库。为了实现追踪字段值的修改,用户可以进入SecureSphere规则管理界面,使用下拉菜单来设置允许的规则,并且规定数据库字段值变化的范围。
Kraynak说:“SecureSphere已经预定义了各种模板,用户可以应付各种不同的操作,包括插入、删除和修改操作,实现追踪数据库字段值的修改,并且对于容易违反规则的修改给出警告提示”
Imperva公司的简介
Imperva公司总部位于美国硅谷,是一家专注于数据库及应用系统安全的专业技术公司。其产品和技术填补了行业的巨大空白——即,保障企业运营系统、管理和业务系统的核心的数据库及相关应用系统。目前Imperva已服务的客户涵盖各大行业的顶级企业,如金融业的Visa、RBS,电信业的英国电信,IT产业的惠普、Oracle,电子商务领域的Scottrade,等等。
Imperva SecureSphere 数据库安全网关
通过实时的设备监控和数据库审核,Imperva公司的SecureSphere可以有效防止攻击,所有违反安全特征的数据库读写都将被视为未被授权的行为。 在对数据库的运行、稳定性和管理方面没有丝毫影响的情况下,SecureSphere可以实现所有的功能。在监控数据库读写是否违反安全的同时,SecureSphere可以识别哪些是正常的数据库读写、哪些是可疑的行为。对于那些需要遵守相应管理规定的企业来说,SecureSphere可以支持数据库活动日志功能,并提供可定制安全报告的功能。
ECC是“Error Checking and Correcting”的简写,中文名称是“错误检查和纠正”。ECC是一种能够实现“错误检查和纠正”的技术,ECC内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定。
要了解ECC技术,就不能不提到Parity(奇偶校验)。在ECC技术出现之前,内存中应用最多的是另外一种技术,就是Parity(奇偶校验)。我们知道,在数字电路中,最小的数据单位就是叫“比特(bit)”,也叫数据“位”,“比特”也是内存中的最小单位,它是通过“1”和“0”来表示数据高、低电平信号的。在数字电路中8个连续的比特是一个字节(byte),在内存中不带“奇偶校验”的内存中的每个字节只有8位,若它的某一位存储出了错误,就会使其中存储的相应数据发生改变而导致应用程序发生错误。而带有“奇偶校验”的内存在每一字节(8位)外又额外增加了一位用来进行错误检测。比如一个字节中存储了某一数值(1、0、1、0、1、0、1、1),把这每一位相加起来(1+0+1+0+1+0+1+1=5)。若其结果是奇数,对于偶校验,校验位就定义为1,反之则为0;对于奇校验,则相反。当CPU返回读取存储的数据时,它会再次相加前8位中存储的数据,计算结果是否与校验位相一致。当CPU发现二者不同时就作出视图纠正这些错误,但Parity有个缺点,当内存查到某个数据位有错误时,却并不一定能确定在哪一个位,也就不一定能修正错误,所以带有奇偶校验的内存的主要功能仅仅是“发现错误”,并能纠正部分简单的错误。
通过上面的分析我们知道Parity内存是通过在原来数据位的基础上增加一个数据位来检查当前8位数据的正确性,但随着数据位的增加Parity用来检验的数据位也成倍增加,就是说当数据位为16位时它需要增加2位用于检查,当数据位为32位时则需增加4位,依此类推。特别是当数据量非常大时,数据出错的几率也就越大,对于只能纠正简单错误的奇偶检验的方法就显得力不从心了,正是基于这样一种情况,一种新的内存技术应允而生了,这就是ECC(错误检查和纠正),这种技术也是在原来的数据位上外加校验位来实现的。不同的是两者增加的方法不一样,这也就导致了两者的主要功能不太一样。它与Parity不同的是如果数据位是8位,则需要增加5位来进行ECC错误检查和纠正,数据位每增加一倍,ECC只增加一位检验位,也就是说当数据位为16位时ECC位为6位,32位时ECC位为7位,数据位为64位时ECC位为8位,依此类推,数据位每增加一倍,ECC位只增加一位。总之,在内存中ECC能够容许错误,并可以将错误更正,使系统得以持续正常的操作,不致因错误而中断,且ECC具有自动更正的能力,可以将Parity无法检查出来的错误位查出并将错误修正。
SIP协议是当前VoIP和IM等多媒体协议的呼叫建立协议。P2P技术提供了分布式的网络架构中通信节点之间得对等通信能力,P2P网络架构经历了集中目录式网络架构、纯P2P网络架构、混合式P2P网络架构和结构化P2P网络架构。通过引入P2P技术,SIP网络的能力可以得到增强。P2PSIP网络主要有两个重要的操作:对P2P节点的操作和用户层面的操作。
1 SIP网络
会话发起协议(SIP)是互联网工程任务组(IETF)制定的多媒体通信应用层控制协议,用于建立、修改和终止多媒体会话。SIP协议借鉴了超文本传输协议(HTTP)、简单邮件传输协议(SMTP)等,采用基于文本协议控制方式,支持代理、重定向、登记定位用户等功能[1]。
SIP凭借其简单、易于扩展、便于实现等诸多优点而得到了广泛应用。3GPP等标准化组织已经选择SIP作为下一代网络(NGN)和3G多媒体子系统(IMS)中的通信协议,业界已广泛应用了多种基于SIP的多媒体业务[2]。
SIP网络采用客户端/服务器(C/S)的网络架构,按域划分用户。每个域的SIP服务器管理着本域内的用户,用户在使用SIP业务时,需要注册到SIP服务器。各用户之间的通信需要由SIP服务器来进行路由,因此存在SIP服务器的“单点故障”和“性能瓶颈”等问题。
目前有多种提升SIP服务器处理能力的方案,如采用高处理能力的服务器、采用多服务器间的N+1或热备份方案,或者采用多服务器负载均衡技术。
2 P2P技术在互联网上的应用
P2P技术本身并不是新的概念或技术,它的原理是将网络上的通信节点作为平等的通信终端,任意两个通信节点之间既互为“服务器”又互为“客户端”。这一点与互联网的基础协议TCP/IP一致,TCP/IP也没有服务器或客户端的概念,任意两个节点之间是平等通信的。随着互联网应用的扩展,P2P技术得到了广泛的应用。P2P网络采用分布式对象定位机制,使得信息或媒体流在节点之间直接传送,降低了中转开销,从而提高了网络的可扩展性,节省了网络带宽。
很多基于P2P技术如共享MP3格式音乐文件的Napster服务、SETI@Home计划,尤其是Skype应用的成功,使得P2P技术成为业界关注的焦点。
3 P2P网络架构
P2P 网络的技术核心是解决分布式节点之间的资源定位,这需要合适的网络架构,发展至今共经历了3代网络架构。
3.1集中目录式网络架构
最早出现的P2P应用模式就是集中目录式P2P网络,Napster是该架构模型最典型的代表。用户需要登录到中心目录服务器,通过目录服务器查询存储各个节点的资源信息。这种结构的最大特点是所有的资料都是存贮在各个用户节点中。用户获取资源时,节点根据网络流量和延迟等信息选择合适的节点建立直接连接,而不必经过中央服务器。
3.2纯P2P网络架构
纯P2P网络架构采用的是广播式的P2P模型。在这种架构下,没有集中的中央服务器,每个用户节点随机接入到网络,并与自己相邻的一组节点通过端到端连接构成一个逻辑覆盖的网络。节点之间的内容查询和内容共享都是直接通过相邻节点以广播方式接力传递。为了避免循环搜索现象,每个节点会记录其搜索轨迹。
Gnutella模型是现在应用最广泛的纯P2P网络架构,采用泛洪式的节点搜索算法,解决了网络结构中心化的问题,扩展性和容错性较好。但是Gnutella网络可用性较差,易被病毒攻击,并且极大地消耗了网络带宽,很容易造成网络拥塞与不稳定。
3.3混合式P2P网络架构
混合式P2P网络在纯P2P网络架构基础上加入了超级节点的概念。在这种网络下,将节点按能力 (计算能力、内存大小、连接带宽、网络滞留时间等)不同区分为普通节点和超级节点两类。超级节点与其临近的若干普通节点之间构成一个自治的簇,簇内采用基于集中目录式的P2P模式,而整个P2P网络中各个不同的簇之间再通过纯P2P的模式将超级节点相连。有时甚至也可以在各个超级节点之间再次选取性能最优的节点,或者另外引入一新的性能最优的节点作为索引节点来保存整个网络中可以利用的超级节点信息,并且负责维护整个网络的结构。
普通节点的文件搜索先在本簇内进行,只有查询结果不充分时再通过超级节点之间进行有限的泛洪。同时,每个簇中的超级节点监控着所有普通节点的行为,从而确保一些恶意的攻击行为能在网络局部得到控制,也在一定程度上提高了整个网络的负载平衡。
混合式P2P网络架构综合了集中目录式P2P快速查找和纯P2P去中心化的优势,Kazaa模型是P2P混合模型的典型代表。
然而,由于超级节点本身的脆弱性也可能导致其簇内的节点处于孤立状态,因此这种局部索引的方法仍然存在一定的局限性。这导致了结构化的P2P网络模型的出现。
3.4结构化P2P网络架构
结构化P2P架构采用纯分布式的消息传递机制,根据关键字进行节点查找定位。目前结构化网络的主流查询定位方法是采用分布式哈希表(DHT)技术,这也是目前扩展性最好的P2P路由方式之一。
DHT将节点管理的资源或文档作为“关键字”,将节点的IP地址作为“数值”,组成关键字-数值对,并能根据关键字查找数值。DHT技术中的存储和查询是分布在多个节点上进行的,对单一节点的依赖性低,容易实现网络上任一节点的无序加入或退出,对整个网络性能影响较低。
DHT各节点并不要维护整个网络的信息,只需存储其临近后继节点信息,因此通过较少的路由就可以到达目标节点。DHT又取消了泛洪算法,有效地减少了节点信息的发送操作数量,增强了P2P网络的扩展性。
在实际应用中,出于冗余度以及延时的考虑,大部分DHT总是在节点的虚拟标识与关键字最接近的节点上备份冗余信息,这样也避免了单一节点失效的问题。
但是基于DHT的网络拓扑结构的维护和修复也比Gnutella模型和Kazaa模型等无结构的系统要复杂得多,有时甚至出现“绕路”的问题。
目前基于DHT的研究项目主要还集中在具有相同能力的较小规模的网络中,对于大规模的Internet部署还在研究中。同时大量实际的P2P应用还大都是基于无结构的拓扑和泛洪广播机制,采用DHT方式的P2P系统缺乏在Internet中大规模真实部署的成功实例。
4 P2PSIP网络架构
P2P网络[3]的优点是没有中心服务器,节点间直接通信、交换资源和文档,并且可以扩展到分布式的负载分担网络。从理论分析看,P2P网络可以降低C/S结构网络中的“单点故障”和“性能瓶颈”问题。作为C/S结构网络一种的SIP网络也可以利用P2P技术来实现,并且具有以下特点:
去中心化,避免中心SIP服务器的单点故障隐患;
增强SIP网络的扩展性,降低网络中的存储、计算、带宽等性能瓶颈;
提高网络的高可用性,采用P2P网络全分布的架构来提高网络的健壮性;
降低成本,充分利用节点闲置的处理能力、存储和带宽资源。
P2P SIP网络利用SIP协议的扩展和承载来完成P2P层叠加网络节点的加入、定位、查找和路由,降低P2P私有协议带来的扩展性和兼容性问题,实现不同P2P网络的互通。
P2P SIP网络以SIP协议为基础,无需大规模改动现有设备,并且无需改动VoIP终端设备,只要升级现有SIP服务器的软件,即可实现SIP网络的P2P化,提升网络的处理能力和可用性。
在P2P SIP网络中,原来管理一个域的单节点SIP服务器变成多台P2P SIP服务器(称为PN节点),PN之间通过P2P机制互联,彼此分担负载,构成一个逻辑上的重叠网络。每个节点将和它相连的下一节点当作下一跳PN可以承担原来服务中压力最大的部分,比如注册、代理和计费。用户连接到任一PN,都可以有效使用服务。部分PN的宕机或故障不会影响到整个P2P SIP网络的正常运行。当需要扩大P2P SIP网络的容量,加入新的PN就可以了[4]。
P2P SIP网络有两个重要操作:一是对P2P节点的操作,包括节点注册和离开,实现重叠网络的维护[5];另一个是用户层面的操作,包括用户的注册、资源定位、会话建立等。
4.1P2PSIP节点操作
P2P节点在地理上散布各处,逻辑上根据选用的P2P机制的不同可以是环形的(Chord协议)、矩阵的(CAN协议)、网状的(Pastry协议和Tapestry协议)。基本的P2P节点至少包括注册和代理两种功能。从运营角度出发,还需要部署全局认证服务器、全局账务服务器和网管服务器等等,用于管理全部用户和所有节点。
每个节点在网络中都有一个节点ID号,该ID号由节点IP地址和端口号进行哈希运算获得,节点信息被存储在一张DHT表中。每个节点负责存储对应信息,如用户注册信息等。
当一个节点申请加入网络中时,先定位一个缺省的网络节点,并发送SIP REGISTER消息给该缺省节点,申请加入网络。如果该缺省节点是负责对应区域的节点,则响应200OK消息,并允许新加入节点加入网络。响应消息中包含邻近节点的信息。
如果缺省节点不是负责对应信息区域的节点,则通过SIP 302响应提供新加入节点前转的网络节点。新加入节点向前转节点发送SIP REGISTER消息,申请加入。前转节点根据自己是否是负责该区域的节点对REGISTER消息进行处理。上述过程一直持续到找到对应的节点为止。
当新加入节点成功加入网络后,新加入节点存储所需要负责的用户信息如用户注册信息,同时通知网络中其它节点更新自己的信息。
4.2P2PSIP用户注册操作
在P2P SIP网络中,每个用户被看成是一个资源,以资源ID标识,资源ID由资源名称经哈希运算获得。
当用户申请注册时,首先生成对应的资源ID。用户所在的节点通过查找路由表,找到一个资源ID和节点ID最接近的节点,并向该节点发送REGISTER消息。如果该最近节点是负责该资源ID的节点,它会将用户名称和IP地址存储在注册表中,并回送200OK消息给用户节点。
如果该最近节点不是负责该资源ID的节点,则通过302消息通知用户节点需要注册到下一节点。下一节点按照和上一节点同样的方式进行处理,直至找到对应的处理节点。对应的处理节点发送200OK消息给用户节点,并存储用户的名字和IP地址。
4.3P2PSIP会话建立操作
用户注册成功后,可以和其他用户进行会话。在会话前,会议发起方需要确定会话接收方的地址。发起方首先生成接收方的资源ID,并确定一个和资源ID最近的节点。然后发送INVITE消息给该最近节点,直到查找到负责接收方的节点。如果接收方用户没有注册,则负责节点通知发送方停止会话;如果接收方已正常注册,负责节点将接收方用户的IP地址通过302响应通过发送方。
在获得了接收方的IP地址后,发起方和接收方就可以按照传统SIP协议的方式建立会议。
5 结束语
利用P2P技术的分布处理和无中心的架构来建设SIP网络是网络发展的一个重要方向。从现在的P2P SIP网络的应用和实践看,这种结合方案还有很多挑战,主要表现在:
P2P技术还不成熟,资源动态分布的优化,资源恢复技术还在进一步研究中。现有的P2P应用主要还是集中在非实时的互联网数据应用上,对于实时的通信节点,以及资源的快速分配定位,还有很多需要P2PSIP网络研究的领域。
P2P的成功应用目前还只是在互联网领域的非实时应用,对于SIP应用,特别是实时通信要求高的呼叫处理而言,基于P2P的SIP网络还需要进行优化。P2PSIP网络利用在去中心化的节点群集来代替原SIP网络中的服务器,现有的P2P技术发现,在P2PSIP网络中对等通信方的查找时间原大于普通SIP网络的对等通信方查找时间。实验发现,两种网络的查找实验时间比超过4倍。
P2P对于带宽和资源的消耗,路由效率低下是P2P技术取得成功应用的难点。现有的成功的P2P应用大都利用“免费”的互联网资源,包括带宽、存储、计算能力等。对于一个可运营可管理的P2PSIP网络而言,需要提高P2P网络技术对资源的使用效率。
P2PSIP网络结构复杂,对于运营商的管理带来了很大的困难。如何实现可运营可管理的P2PSIP网络是目前业界的一个重要课题。