??xml version="1.0" encoding="utf-8" standalone="yes"?>
是由于jdk1.5 ?tomcat5.0之间的关?TransformerFactoryImpl cȝ冲突造成的?br />
用高版本的tomcat可以解冟?br />
---删除表空间及其表I间里的所有内?br />
drop tablespace ATMV INCLUDING CONTENTS;(删除表空_
drop tablespace INDX INCLUDING CONTENTS;(删除表空_
----创徏表空_指定数据文gQ初始化100M 自增?0M
create tablespace ATMV datafile 'D:/oracle/product/10.2.0/oradata/orcl/ATMV.dat' size 100m autoextend on next 50m maxsize unlimited;
create tablespace INDX datafile 'D:/oracle/product/10.2.0/oradata/orcl/INDX.dat' size 100m autoextend on next 50m maxsize unlimited;
-----创徏用户Q指定表I间
create user ca identified by atm123 default tablespace ATMV ;
---l用h?br />
grant dba to ca;
---q行SQL文g
@D:\workspace\JATMP\ChannelAge.sql
我从开始用wtp来开发web service开始, 在思考一个问题:
那些java的对象是可以序列化ؓxml的, q且可以从xml反序列化为java对象的?
那些对象与xml之间不能够序列化和反序列化?
在开发的时候应该注意哪些问题?
Ҏ(gu)我的理解Q?有如下几U对象:
1Qaxis1.2内在支持的几U对象类型?br />
q几U内在支持的对象包括Q?br />
java基本cd : int, float,,,,
基本cd包装c?: Integer, Float, Long...
q有String, Date, Calendar, BigDecimal, BigInteger, List, Map.
凡是q些内在支持的对象, 不管他们作ؓ某个Service的input q是 output, 我们在服务端的axis1.2的WEB-INF/server-config.wsdd的该Service的定义中都不需要加?lt;beanMapping>或者是<typeMapping>的声明?br />
2Q简单的javabean对象cd?br />
对于单的javabean对象Q?比如对象中所有的field都是上面提到的基本类型?nbsp;axis1.2也提供了很好的支持?br />
比如Q?br />
public class JavaBeanInputService {
public void testJavaBeanInput(MyBean bean) {
......
}
}
׃MyBean是一个自定义的JavaBean对象Q?所以在server-config.wsdd中就必须加上<beanMapping ...../>的声明, 让axis知道怎么把request中xml数据deserialize为MyBean对象Q?又如何把MyBean对象serialize为xml数据作ؓresponse.用wtp自动为JavaInputService生成的wsdl中, MyBean是作Z个complexType在wsdl中定义的?br />
3Q复杂一点的JavaBean对象?br />
比如JavaBean对象中的一些field又是自定义的JavaBean, q种情况下, wsdl中生成的complextype会有多个Q?而在wsdd定义?lt;beanMapping .../>也会有多个, axis1.2支持h都是易如反掌?br />
4Q普通的非javabean对象?br />
对于一些不是javaBean的对象, wtp也会替你生成对应的wsdl的ComplexType, 依据的是对象的getterҎ(gu)。但是显然这是不够的?比如说有些对象的数据l构比较复杂Q?像java.util.HashMap(虽然q个已经被axis内在支持了?q些对象如果惌把自q状态进行serialization和deserializationQ?得自己~写serializer和deserializer, 而且q必M证wsdl中的该complexType的描q是正确的?br />
5Qjava中的List, Map问题?br />
试想一下如果一个service的样子是q样子的?br />
public class ListService{
public List listTest(List list) {
for(Iterator iter = list.iterator(); iter.hasNext(); ) {
(MyBean)list.next();//q行{?br />
}
}
}
用wtp个service生成的wsdl中把list映射Z个type为xsd:anyType的maxOccurs="unbound"的complexType。这L话客L生成的Stub中的接口中类g:
public interface ListService{
public Object[] listTest(Object[] list) ;
}
如果Client端用户传递的入口参数是String[]Q那么在服务端执行的必然会发生{型错误?br />
因此Q在webservice中把List, Map作ؓservice的input, output的做法都是不可行的。至在jdk1.4的版本中是这L?br />
一个更好的Ҏ(gu)是:
6Qjava中的数组?br />
上例中的ListService如果攚wؓ下面q样Q基本上没有上面提到的问题了?br />
public class ListService{
public MyBean[] listTest(MyBean[] list) {
...
}
}
q样在wsdl中, MyBean被映ؓ一UComplexTypeQMyBean[]为映ؓComplexType为映ؓ可以重复出现的MyBeancd。在客户端的Stub的接口跟q个也是cM的。从而也成功地避免了List, Map中型别问题?br />
要注意的是,在server-config.wsdd中需要配|?lt;arrayMapping.../>
gList, Map的问题用数组可以解决了。事实上是如此。但是还得注意的是:
javabean里边也不能含有List. 如果MyBean跟其它某个对象是1Qn的关p,那么也只能写成数l的形式Q而不能是List的Ş式?br />
7Q特D对象java.lang.Object
如果一个service写成了下面的形式Q?br />
public class ObjectService{
public Object objInvoke(Object obj) {
...
}
}
x它发布ؓweb service, 那么几乎是不太可能的。遇到objcdQwsdl里边只能定义为xsd:anyTypecdQ而这U类型如果给客户端返回一个比如MyBeancdQ那么必然会Dxml的serialization的失败。结论就是:
web service中如果input 或者是output是java.lang.ObjectcdQ那么将会导致严重问题?br />
上面的几U对象类型基本上能够늛java class发布为web service旉要考虑的对象类型。可以看到开发web service的时候,q不是所有的java都能够轻而易丑֜发布为web service, 一些复杂的cȝ对象cdQ还有一些特D的对象cd都是要考虑的。最后一个问题是Q子cL否也很容易的得到序列化和反序列化Q?br />
{案是肯定的。如下的Service:
public class PolymorphicService{
public MyBean objInvoke(MyBean obj) {
...
}
}
客户端的Stub如下:
public class PolymorphicServiceStub{
public MyBean objInvoke(MyBean obj) {
...
}
}
如果在客L调用stub时传入的不是MyBeancȝ对象Q而是它的子类的一个对象,那么也可以被序列化而传到服务端。同P如果服务端返回的对象是MyBeancȝ字类的一个对象,也可以成功的被序列化到客L?/font>
public class TestService {
public String getStr(String input) {
return "Input string:"+input;
}
public Bean getBean(Bean bean) {
System.out.println("Bean Name:"+bean.getName());
bean.setName(bean.getName()+"OK");
Bean bb = new Bean();
bb.setName("haha");
return bb;
}
public Bean[] getBeans(String str) {
Bean[] rets = new Bean[2];
Bean bean1 = new Bean();
bean1.setName("name 1");
Bean bean2 = new Bean();
bean2.setName("name 2");
rets[0] = bean1;
rets[1] = bean2;
return rets;
}
}
Service service3 = new Service();
Call call3 = (Call) service3.createCall();
QName qn3 = new QName("http://bean.test.com","ArrayOf_Bean");
//注册 bean
call3.registerTypeMapping(Bean.class,qn,new BeanSerializerFactory(Bean.class, qn),new BeanDeserializerFactory(Bean.class, qn));
call3.registerTypeMapping(Bean[].class,qn3,new BeanSerializerFactory(Bean[].class, qn3),new BeanDeserializerFactory(Bean[].class, qn3));
call3.setTargetEndpointAddress(new java.net.URL(endpoint));
call3.setOperationName(new QName("getBeans"));
call3.addParameter("arg1", qn, ParameterMode.IN);
call3.setReturnType(qn,Bean.class);
java.util.ArrayList ret3 = (java.util.ArrayList) call3.invoke(new Object[] {"test--"});
System.out.println((ret3==null)?"null":(""+ret3.size()));
当互联网吵吵嚷嚷的进?.0时代Q当互联|的技术不再是那么高不可攀Q当复制变成家常侉KQ互联网热闹h?/p>
myspace火了Q中国冒出更多的myspace
youtube刚刚hQ中国的视频|站遍地开?/p>
51拔地而vQ中国出了无数的SNS
facebook则改变了中国站长的抄袭方式,不再学chianren了,校内火了
..........
当抄袭变成习惯,我想说的是,模仿Q站长,你准备好了吗Q?/p>
如果你打做垃圾站,或者赚点广告费的网站,请不要点击这文章,我从技术角度方面谈谈WEB2.0|站的模仉K题?/p>
当投资和量都不是问题的时候,我想说的是,(zhn)真的一帆风吗Q?/p>
拿SNS|站来说Q当匆匆上线?.0Q当一W笔投资砸进ȝ时候,当流量上ȝ时候,(zhn)的困惑在什么地方?
我做q多?.0公司的技术顾问,单的谈谈2.0公司遇到的问?涉及隐私Q我用A B C D代替)Q这里就不再赘述大家众所周知的页面静态化Q缓存和代码安全{问题了Q有Ҏ(gu)术的2.0公司的CTO都知道这些东西,我们谈点发展之后的问?/p>
A公司
A公司做的是SNS|站Q程序是两个毛头伙子做的,目标直指51Q程序开发是一帆风,功能也比51牛多了,推广也是一帆风(A公司有自q到的推广 方式。但是当ALEXA?W的时候问题出来了Q每天下?点左叻I|站速度慢的惊hQ基本上打不开Q公怸台服务器CPU100%Q让人郁L是公司的 |络配置方式Q居然是双WEB的集,而单独一台DB数据库。整个瓶颈在数据库,于是我徏议做DB的集,分析了一下数据结构,MDQ典型的WEBE序?的作品,没有一Ҏ(gu)据库设计规范Q功能实现是可以Q如果要扩展Q不可能Q集基本上是不可能的,怎么办?不能办,于是Q一个月的时间修改程序,数据l构?本上换了一?前期砸进ȝ几十万打了水飘,用户走光了?/p>
l论QWEB2.0前期设计的时候不应该只考虑功能Q应该认真考虑一下底层和数据l构了?/p>
B公司
B公司也是做的SNS|站Q程序是3个h开发的QCEO是某名牌大学的经学士Q有点知q的味道,又有一些特色出来,说实话,公司的潜力不错,CEO 有很强的q作能力Q感觉前景不错。系l架构还行,但是---但是pȝ崩溃了,why?pȝ没有考虑到用h个v量的说法Q文件也有个量的说法,用户的相 册,囄全部存贮在WEB服务器的一个分ZQ每个用户一个目录,而打开性能监视器,盘的IO高的惊hQ基本上无暇响应。众所周知Q文件系l也是一个数 据库Q单独大文g无所谓,关键是整个是300多个G的零文Ӟ大量的读写操作,pȝ崩溃Q数据丢失,文gpȝ的一个链断了Q用h据全部丢失!Q!q是 一个非常沉重的问题Q系l整整停了一个月来做数据恢复Q单独文件很Ҏ(gu)Q但是v量文件目前还没有一个Y件能l织h软g架构Q。解x案:修改E序架构Q?做分布式文g存贮Q程序修改用?天,但是文g转移却又用去了将q一个月Q,20万用h失殆?/p>
l论QWEB2.0前期的设计应该有应付量存贮的考虑Q整个涉及了E序架构的修改,前期规划不好的话基本上思\一条?/p>
C公司
C公司是一个值得敬的公司,CEO技术出w,和比盖茨一P大学未毕业出来做|络Q?1?3q做短信狠赚了一W,后来做的项目也有所成,说实 话,我很佩服。公司做的是校友斚wQ但是更偏重myspace风格Q注重个Z,推广斚w也下了大手笔。系l崩溃的原因其实很简单,׃采用的是微Y?SqlServerQ而微软直接就告诉了我们,SQLSERVER不支持集,他们的数据库负载,100%没有下去过Q只能横向增加配|,采用??4核CPUpȝQ但是系l还是崩溃了... 高互动注定了高负载。解x案: C基本入手Q解x几个E序耗能大户Q对数据库采用横向切Ԍ用h10万进行分l,同时Ҏ(gu)据库pȝq行散列Q将多个表垂直分Ԍ同时q行文g分组 Q解决问? 因ؓ修改了数据结构,E序也基本上大动了一下?好在pȝ没有出大错,损失不算很大Q不q对用户体验造成了很坏的影响?/p>
l论QWEB2.0前期设计应该有良好的散列考虑Q程序应该能有配合的扩充性,W合数据库的扩充
D公司
D公司是一个各个方面做的比较好的公司,做了CDN加速,囄也独立分ZN个服务器Q数据库不错的一个,(CTO是个数据库专ӞQ系l崩溃的原因在于 WEBQ按道理说WEB很容易做集群的,但是发现集群q解决不掉问题,他们的集只允许?台的WEB集群Q但?台都当掉了。仔l分析,扑ֈ原因Q我?计整个也是大部分CTO最Ҏ(gu)犯的一个错误,或者说他们Ҏ(gu)想不到的问题,是WEB上传的问题,上传的时候由于时间的原因Q线E是保持链接的,300 个线E就可以把一个WEB Server当掉了。解x案:q个最单,把上传和其他耗能大户分离出独立出来。程序改动不是很大,但是之前半个月速度满对用户体验的损׃不可视?/p>
l论Q没有什么结ZQ毕竟有量讉Kl验的CTO不多Q也是那几个大站的?/p>
ȝQ不是泼hQ模仿其实是很容易的Q随便找几个WEBE序员就能做刎ͼq且很简单,速度可能q很高效Q因为WEB2.0无非是跟数据库打交道,会操 作数据库׃做。但是真正做大ƈ不容易,因ؓ能应付v量访问的E序q不单,现在的程序员都太自命不凡Q其实真正有l验的ƈ不多Q不要相信一个月?K- -10K的程序员能给你多大的惊喜Q能应付量讉K的程序员不是那个h。如果?zhn)惛_2.0Q想做大Q有几个个徏议:
一.找DBMS的专家设计好数据库,大部分程序员都不知道分区视图Q数据散列,数据l的概念
?设计好程序架构(q个其实不难Q有个高人指导就行了Q,保持良好的扩展性,成本考虑可以扑օ职的pȝ架构设计师做好系l架构,定来的发展瓶颈?/p>
?考虑好文件存贮的问题。文件存贮的技术含量看h很低Q其实是很高的,可以考虑反向代理的方案。文件存贮出问题了,站点基本上就完蛋了,不仅仅是RAID的问题和存贮服务器的问题Q不q道理倒是一点就破的
?中国国情考虑Q这个最致命Q需要考虑?sh)信和网通的问题QCDNq不能解x有问题。互动性的东西qCDNq不是很有效。最关键的是Q现有的双线机房?到DDOSd基本上都会当掉,原因很简单,双线机房都是Uh机房Q本w就不会有太高的带宽Q随便攻M下就可以D掉(带提一个笑话,我知道一个双U机 房的老Ld1G的带宽却C4G的金监֢Q很?00M的攻d可以搞定Q?/p>
?|络延迟的问题,q是分布式系l必要考虑的,E序要能容忍0?00U的数据延迟的功能,也就是同步的问题。不要小看这几十U,问题很大的,如果?的站Ҏ(gu)交互式功能,比如x聊天Q你可以惌一下是个什么结果。对于即时聊天的东西Q可以用反向代理来解冻I成本较高Q。但是对于留a和评论的影响?大,但是如果pȝZ健壮做了~存和静态化的时候,q个东西可能是N性的了?/p>
?分散你的E序Q如果你没有太多的资金构{动辄百万的服务器,把功能分散开来,比如相册一台服务器Q留a一台服务器
?看好你的E序员,如果没有很好的激励措施的话你的程序员很容易写出敷衍性的代码Q而这个可能就是将来的大?zhn)Q程序架构定下来后要修改可能p费牛劲了。最好你的CTO能对?00%的衷心,100%的负责?/p>
?文g同步的问题,q个问题可能你觉得没有必要,如果你看一下网通和?sh)信的TTL明白了Q同步要支持l传Qƈ且不能是持箋的,否则你的成本会高出N倍,不要期望能通过你的软g实现Q交l你的程序员吧,把上面的话告诉他他就知道怎么做了?/p>
?最狠的一个问题了Q也是吃亏最大的问题Q不?zhn)跟网警的关系多好Q看好你的用P审核好你的东西,一被停机可能就致命Q本人就吃过Nơ亏?/p>
一个小型的|站Q比如个人网站,可以使用最单的html静态页面就实现了,配合一些图片达到美化效果,所有的面均存攑֜一个目录下Q这L|站对系l架构、性能的要求都很简单,随着互联|业务的不断丰富Q网站相关的技术经q这些年的发展,已经l分到很l的Ҏ(gu)面面Q尤其对于大型网站来_所采用的技术更是涉及面非常q,从硬件到软g、编E语a、数据库、WebServer、防火墙{各个领域都有了很高的要求,已经不是原来单的html静态网站所能比拟的?
大型|站Q比如门L站。在面对大量用户讉K、高q发h斚wQ基本的解决Ҏ(gu)集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编E语a、还有高性能的Web容器。但是除了这几个斚wQ还没法Ҏ(gu)解决大型|站面的高负蝲和高q发问题?
上面提供的几个解x\在一定程度上也意味着更大的投入,q且q样的解x\具备瓉Q没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验?
1、HTML静态化
其实大家都知道,效率最高、消耗最的是U静态化的html面Q所以我们尽可能使我们的|站上的面采用静态页面来实现Q这个最单的Ҏ(gu)其实也是最有效的方法。但是对于大量内容ƈ且频J更新的|站Q我们无法全部手动去挨个实现Q于是出C我们常见的信息发布系lCMSQ像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布pȝ来管理和实现的,信息发布pȝ可以实现最单的信息录入自动生成静态页面,q能具备频道理、权限管理、自动抓取等功能Q对于一个大型网站来_拥有一套高效、可理的CMS是必不可的?
除了门户和信息发布类型的|站Q对于交互性要求很高的Ccd|站来说Q尽可能的静态化也是提高性能的必要手D,社区内的帖子、文章进行实时的静态化Q有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩是使用了这L{略Q网易社区等也是如此?
同时Qhtml静态化也是某些~存{略使用的手D,对于pȝ中频J用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实玎ͼ比如论坛中论坛的公用讄信息Q这些信息目前的L论坛都可以进行后台管理ƈ且存储再数据库中Q这些信息其实大量被前台E序调用Q但是更新频率很,可以考虑这部分内容q行后台更新的时候进行静态化Q这样避免了大量的数据库讉Kh?
2、图片服务器分离
大家知道Q对于Web服务器来_不管是Apache、IISq是其他容器Q图片是最消耗资源的Q于是我们有必要图片与面q行分离Q这是基本上大型|站都会采用的策略,他们都有独立的图片服务器Q甚臛_多台囄服务器。这L架构可以降低提供面讉Kh的服务器pȝ压力Qƈ且可以保证系l不会因为图片问题而崩溃,在应用服务器和图片服务器上,可以q行不同的配|优化,比如apache在配|ContentType的时候可以尽量少支持Q尽可能的LoadModuleQ保证更高的pȝ消耗和执行效率?
3、数据库集群和库表散?
大型|站都有复杂的应用,q些应用必须使用数据库,那么在面对大量访问的时候,数据库的瓉很快p昄出来Q这时一台数据库很快无法满_用,于是我们需要用数据库集群或者库表散列?
在数据库集群斚wQ很多数据库都有自己的解x案,Oracle、Sybase{都有很好的Ҏ(gu)Q常用的MySQL提供的Master/Slave也是cM的方案,(zhn)用了什么样的DBQ就参考相应的解决Ҏ(gu)来实施即可?
上面提到的数据库集群׃在架构、成本、扩张性方面都会受到所采用DBcd的限Ӟ于是我们需要从应用E序的角度来考虑改善pȝ架构Q库表散列是常用q且最有效的解x案。我们在应用E序中安装业务和应用或者功能模块将数据库进行分,不同的模块对应不同的数据库或者表Q再按照一定的{略Ҏ(gu)个页面或者功能进行更的数据库散列,比如用户表,按照用户IDq行表散列,q样p够低成本的提升系l的性能q且有很好的扩展性。sohu的论坛就是采用了q样的架构,论坛的用户、设|、帖子等信息q行数据库分,然后对帖子、用h照板块和IDq行散列数据库和表,最l可以在配置文g中进行简单的配置便能让系l随时增加一C成本的数据库q来补充pȝ性能?
4、缓?
~存一词搞技术的都接触过Q很多地方用到缓存。网站架构和|站开发中的缓存也是非帔R要。这里先讲述最基本的两U缓存。高U和分布式的~存在后面讲q?
架构斚w的缓存,对Apache比较熟?zhn)的h都能知道Apache提供了自q~存模块Q也可以使用外加的Squid模块q行~存Q这两种方式均可以有效的提高Apache的访问响应能力?
|站E序开发方面的~存QLinux上提供的Memory Cache是常用的~存接口Q可以在web开发中使用Q比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯׃nQ一些大型社Z用了q样的架构。另外,在用web语言开发的时候,各种语言基本都有自己的缓存模块和Ҏ(gu)QPHP有Pear的Cache模块QJava更多了Q?net不是很熟(zhn),怿也肯定有?
5、镜?
镜像是大型网站常采用的提高性能和数据安全性的方式Q镜像的技术可以解决不同网l接入商和地域带来的用户讉K速度差异Q比如ChinaNet和EduNet之间的差异就促了很多网站在教育|内搭徏镜像站点Q数据进行定时更新或者实时更新。在镜像的细节技术方面,q里不阐q太深,有很多专业的现成的解x构和产品可选。也有廉L通过软g实现的思\Q比如Linux上的rsync{工兗?
6、负载均?
负蝲均衡是大型|站解决高负药问和大量q发h采用的终极解军_法?
负蝲均衡技术发展了多年Q有很多专业的服务提供商和品可以选择Q我个h接触q一些解x法,其中有两个架构可以给大家做参考?
g四层交换
W四层交换用第三层和第四层信息包的报头信息Q根据应用区间识别业务流Q将整个区间D늚业务分配到合适的应用服务器进行处理。 W四层交换功能就象是虚IPQ指向物理服务器。它传输的业务服从的协议多种多样Q有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基上,需要复杂的载量q法。在IP世界Q业务类型由l端TCP或UDP端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCP和UDP端口共同军_?
在硬件四层交换品领域,有一些知名的产品可以选择Q比如Alteon、F5{,q些产品很昂贵,但是物有所|能够提供非常优秀的性能和很灉|的管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteon搞定了?
软g四层交换
大家知道了硬件四层交换机的原理后Q基于OSI模型来实现的软g四层交换也就应运而生Q这L解决Ҏ(gu)实现的原理一_不过性能E差。但是满一定量的压力还是游刃有余的Q有软g实现方式其实更灵z,处理能力完全看你配置的熟(zhn)能力?
软g四层交换我们可以使用Linux上常用的LVS来解冻ILVS是Linux Virtual ServerQ他提供了基于心跳线heartbeat的实时灾隑ֺ对解x案,提高pȝ的鲁性,同时可供了灵zȝ虚拟VIP配置和管理功能,可以同时满多种应用需求,q对于分布式的系l来说必不可?
一个典型的使用负蝲均衡的策略就是,在Y件或者硬件四层交换的基础上搭建squid集群Q这U思\在很多大型网站包括搜索引擎上被采用,q样的架构低成本、高性能q有很强的扩张性,随时往架构里面增减节点都非常容易。这L架构我准备空了专门详l整理一下和大家探讨?
对于大型|站来说Q前面提到的每个Ҏ(gu)可能都会被同时用到Q我q里介绍得比较浅显,具体实现q程中很多细节还需要大家慢慢熟(zhn)和体会Q有时一个很的squid参数或者apache参数讄Q对于系l性能的媄响就会很大,希望大家一赯论,辑ֈ抛砖引玉之效?br />
字段 | 允许?/th> | 允许的特D字W?/th> | ||
---|---|---|---|---|
U?/code> |
0-59 |
, - * / |
||
?/code> |
0-59 |
, - * / |
||
时 |
0-23 |
, - * / |
||
日期 |
1-31 |
, - * ? / L W C |
||
月䆾 |
1-12 或?JAN-DEC |
, - * / |
||
星期 |
1-7 或?SUN-SAT |
, - * ? / L C # |
||
q_可选) |
留空, 1970-2099 |
, - * / |