jeffy

BlogJava 首页 新随笔 联系 聚合 管理
  70 Posts :: 1 Stories :: 14 Comments :: 0 Trackbacks

2008年1月3日 #


查看tomcat的错误日志, 错误原因是:javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found

是由于jdk1.5 与 tomcat5.0之间的关于 TransformerFactoryImpl 类的冲突造成的。

用高版本的tomcat就可以解决。

posted @ 2008-08-28 22:22 Live-in Java 阅读(569) | 评论 (0)编辑 收藏

 1.  打开HKEY_CURRENT_USER\Software\Microsoft\Office\11.0(如果是Outlook XP,此处为10.0)\Outlook\Preferences项目
  2.  建立一个DWord的值(双字节值),名称为"MinToTray", 取值改成 1
posted @ 2008-08-21 16:35 Live-in Java 阅读(234) | 评论 (0)编辑 收藏

---删除用户及其用户下面的所有对象
drop user ca cascade;(删除用户下面的所有对象,注意关键字cascade)
---删除表空间及其表空间里的所有内容
drop tablespace ATMV INCLUDING CONTENTS;(删除表空间)
drop tablespace INDX INCLUDING CONTENTS;(删除表空间)
----创建表空间,指定数据文件,初始化100M 自增加50M
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;
-----创建用户,指定表空间
create user ca identified by atm123 default tablespace ATMV ;
---给用户授权
grant dba to ca;

---运行SQL文件
@D:\workspace\JATMP\ChannelAge.sql

posted @ 2008-08-15 11:11 Live-in Java 阅读(3459) | 评论 (0)编辑 收藏

关于axis1.2中对象的序列化和发序列化                            

我从开始使用wtp来开发web service开始, 就在思考一个问题:
那些java的对象是可以序列化为xml的, 并且可以从xml反序列化为java对象的?
那些对象与xml之间不能够序列化和反序列化?
在开发的时候应该注意哪些问题?

根据我的理解, 有如下几种对象:
1)axis1.2内在支持的几种对象类型。
          这几种内在支持的对象包括:
          java基本类型 : int, float,,,,
          基本类型包装类 : Integer, Float, Long...
          还有String, Date, Calendar, BigDecimal, BigInteger, List, Map.
    凡是这些内在支持的对象, 不管他们作为某个Service的input 还是 output, 我们在服务端的axis1.2的WEB-INF/server-config.wsdd的该Service的定义中都不需要加入<beanMapping>或者是<typeMapping>的声明。

2)简单的javabean对象类型。
       对于简单的javabean对象, 比如对象中所有的field都是上面提到的基本类型。 axis1.2也提供了很好的支持。
       比如:
       public class JavaBeanInputService { 
           public void testJavaBeanInput(MyBean bean) {
               ......
          }
       }
        由于MyBean是一个自定义的JavaBean对象, 所以在server-config.wsdd中就必须加上<beanMapping ...../>的声明, 让axis知道怎么把request中xml数据deserialize为MyBean对象, 又如何把MyBean对象serialize为xml数据作为response.用wtp自动为JavaInputService生成的wsdl中, MyBean是作为一个complexType在wsdl中定义的。

3)复杂一点的JavaBean对象。
        比如JavaBean对象中的一些field又是自定义的JavaBean,  这种情况下, wsdl中生成的complextype会有多个, 而在wsdd定义的<beanMapping .../>也会有多个, axis1.2支持起来都是易如反掌。

4)普通的非javabean对象。
      对于一些不是javaBean的对象, wtp也会替你生成对应的wsdl的ComplexType, 依据的是对象的getter方法。但是显然这是不够的。 比如说有些对象的数据结构比较复杂, 像java.util.HashMap(虽然这个已经被axis内在支持了。)这些对象如果想要把自己的状态进行serialization和deserialization, 就得自己编写serializer和deserializer,  而且还必须保证wsdl中的该complexType的描述是正确的。

5)java中的List, Map问题。
       试想一下如果一个service的样子是这样子的。
       public class ListService{
             public List listTest(List list) {
                    for(Iterator iter = list.iterator(); iter.hasNext(); ) {
                           (MyBean)list.next();//进行强转。
                    }
              }
       }
        用wtp为这个service生成的wsdl中把list映射为一个type为xsd:anyType的maxOccurs="unbound"的complexType。这样的话客户端生成的Stub中的接口中类似于:
        public interface ListService{
             public Object[] listTest(Object[] list) ;
        }
        如果Client端用户传递的入口参数是String[],那么在服务端执行的必然会发生转型错误。
        因此,在webservice中把List, Map作为service的input, output的做法都是不可行的。至少在jdk1.4的版本中是这样的。
       
一个更好的方法就是:

6)java中的数组。
      上例中的ListService如果改造为下面这样,基本上就没有上面提到的问题了。
      public class ListService{
             public MyBean[] listTest(MyBean[] list) {
                   ...
             }
       }
       这样在wsdl中, MyBean被映射为一种ComplexType,MyBean[]为映射为ComplexType为映射为可以重复出现的MyBean类型。在客户端的Stub的接口跟这个也是类似的。从而也成功地避免了List, Map中型别问题。
       要注意的是,在server-config.wsdd中需要配置<arrayMapping.../>
       似乎List, Map的问题用数组就可以解决了。事实上就是如此。但是还得注意的是:
   javabean里边也不能含有List. 如果MyBean跟其它某个对象是1:n的关系,那么也只能写成数组的形式,而不能是List的形式。

7)特殊对象java.lang.Object
       如果一个service写成了下面的形式:
       public class ObjectService{
             public Object objInvoke(Object obj) {
                   ...
             }
       }
        想把它发布为web service, 那么几乎是不太可能的。遇到obj类型,wsdl里边只能定义为xsd:anyType类型,而这种类型如果给客户端返回一个比如MyBean类型,那么必然会导致xml的serialization的失败。结论就是:
        web service中如果input 或者是output是java.lang.Object类型,那么将会导致严重问题。

       
       
上面的几种对象类型基本上能够涵盖将java class发布为web service时需要考虑的对象类型。可以看到开发web service的时候,并不是所有的java都能够轻而易举地发布为web service, 一些复杂的类的对象类型,还有一些特殊的对象类型都是要考虑的。最后一个问题是:子类是否也很容易的得到序列化和反序列化?
         答案是肯定的。如下的Service:
          public class PolymorphicService{
             public MyBean objInvoke(MyBean obj) {
                   ...
             }
         }
          客户端的Stub如下:
          public class PolymorphicServiceStub{
             public MyBean objInvoke(MyBean obj) {
                   ...
             }
         }
         如果在客户端调用stub时传入的不是MyBean类的对象,而是它的子类的一个对象,那么也可以被序列化而传到服务端。同样,如果服务端返回的对象是MyBean类的字类的一个对象,也可以成功的被序列化到客户端。

posted @ 2008-04-10 14:14 Live-in Java 阅读(5512) | 评论 (1)编辑 收藏

  服务器端定义:

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;
 }

}





server-config.wsdd中的配置:

自定义类
<typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns6:Bean" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.test.bean.Bean" xmlns:ns6="http://bean.test.com"/>

数组
<typeMapping xmlns:ns7="http://bean.test.com" qname="ns7:ArrayOf_Bean" type="java:com.test.bean.Bean[]" serializer="org.apache.axis.encoding.ser.ArraySerializerFactory" deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory" encodingStyle="" /> 

客户端调用:
          String endpoint = "http://localhost:8081/axistest/services/TestService";

            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())); 


 
posted @ 2008-04-01 16:07 Live-in Java 阅读(537) | 评论 (0)编辑 收藏

当互联网吵吵嚷嚷的进入2.0时代,当互联网的技术不再是那么高不可攀,当复制变成家常便饭,互联网热闹起来了

     myspace火了,中国冒出更多的myspace

     youtube刚刚起来,中国的视频网站就遍地开花

     51拔地而起,中国出了无数的SNS

     facebook则改变了中国站长的抄袭方式,不再学chianren了,校内火了
     ..........

     当抄袭变成习惯,我想说的是,模仿,站长,你准备好了吗?

     如果你打算做垃圾站,或者赚点广告费的网站,请不要点击这篇文章,我从技术角度方面谈谈WEB2.0网站的模仿问题。

     当投资和流量都不是问题的时候,我想说的是,您真的一帆风顺吗?

     拿SNS网站来说,当匆匆上线的2.0,当一笔笔投资砸进去的时候,当流量上去的时候,您的困惑在什么地方?

     我做过多个2.0公司的技术顾问,简单的谈谈2.0公司遇到的问题(涉及隐私,我用A B C D代替),这里就不再赘述大家众所周知的页面静态化,缓存和代码安全等问题了,有点技术的2.0公司的CTO都知道这些东西,我们谈点发展之后的问题

A公司

     A公司做的是SNS网站,程序是两个毛头小伙子做的,目标直指51,程序开发是一帆风顺,功能也比51牛多了,推广也是一帆风顺(A公司有自己独到的推广 方式。但是当ALEXA到2W的时候问题出来了,每天下午4点左右,网站速度慢的惊人,基本上打不开,公司三台服务器CPU100%,让人郁闷的是公司的 网络配置方式,居然是双WEB的集群,而单独一台DB数据库。整个瓶颈在数据库,于是我建议做DB的集群,分析了一下数据结构,MD,典型的WEB程序员 的作品,没有一点数据库设计规范,功能实现是可以,如果要扩展,不可能,集群基本上是不可能的,怎么办?不能办,于是,一个月的时间修改程序,数据结构基 本上换了一遍 前期砸进去的几十万打了水飘,用户走光了。

     结论:WEB2.0前期设计的时候不应该只考虑功能,应该认真考虑一下底层和数据结构了。

B公司

     B公司也是做的SNS网站,程序是3个人开发的,CEO是某名牌大学的经济学硕士,有点知己网的味道,又有一些特色出来,说实话,公司的潜力不错,CEO 有很强的运作能力,感觉前景不错。系统架构还行,但是---但是系统崩溃了,why?系统没有考虑到用户有个海量的说法,文件也有个海量的说法,用户的相 册,图片全部存贮在WEB服务器的一个分区上,每个用户一个目录,而打开性能监视器,磁盘的IO高的惊人,基本上无暇响应。众所周知,文件系统也是一个数 据库,单独大文件无所谓,关键是整个是300多个G的零碎文件,大量的读写操作,系统崩溃,数据丢失,文件系统的一个链断了,用户数据全部丢失!!!这是 一个非常沉重的问题,系统整整停了一个月来做数据恢复(单独文件很容易,但是海量文件目前还没有一个软件能组织起来软件架构)。解决方案:修改程序架构, 做分布式文件存贮(程序修改用了8天,但是文件转移却又用去了将近一个月),20万用户损失殆尽

     结论:WEB2.0前期的设计应该有应付海量存贮的考虑,整个涉及了程序架构的修改,前期规划不好的话基本上思路一条。

C公司

     C公司是一个值得尊敬的公司,CEO技术出身,和比尔盖茨一样,大学未毕业出来做网络,01到03年做短信狠赚了一笔,后来做的小项目也小有所成,说实 话,我很佩服。公司做的是校友方面,但是更偏重myspace风格,注重个人主页,推广方面也下了大手笔。系统崩溃的原因其实很简单,由于采用的是微软的 SqlServer,而微软直接就告诉了我们,SQLSERVER不支持集群,他们的数据库超负载,100%就没有下去过,只能横向增加配置,采用了4路 4核CPU系统,但是系统还是崩溃了... 高互动注定了高负载。解决方案: 现从基本入手,解决掉几个程序耗能大户,对数据库采用横向切割,将用户每10万进行分组,同时对数据库系统进行散列,将多个表垂直分割,同时进行文件分组 ,解决问题. 因为修改了数据结构,程序也基本上大动了一下。 好在系统没有出大错,损失不算很大,不过对用户体验造成了很坏的影响。

     结论:WEB2.0前期设计应该有良好的散列考虑,程序应该能有配合的扩充性,符合数据库的扩充

D公司

     D公司是一个各个方面做的比较好的公司,做了CDN加速,图片也独立分出了N个服务器,数据库不错的一个,(CTO是个数据库专家),系统崩溃的原因在于 WEB,按道理说WEB很容易做集群的,但是发现集群并解决不掉问题,他们的集群只允许做4台的WEB集群,但是4台都当掉了。仔细分析,找到原因,我估 计整个也是大部分CTO最容易犯的一个错误,或者说他们根本就想不到的问题,就是WEB上传的问题,上传的时候由于时间的原因,线程是保持链接的,300 个线程就可以把一个WEB Server当掉了。解决方案:这个最简单,把上传和其他耗能大户分离出独立出来。程序改动不是很大,但是之前半个月速度满对用户体验的损失也不可小视。

     结论:没有什么结论了,毕竟有海量访问经验的CTO不多,也就是那几个大站的。

     总结:不是泼冷水,模仿其实是很容易的,随便找几个WEB程序员就能做到,并且很简单,速度可能还很高效,因为WEB2.0无非就是跟数据库打交道,会操 作数据库就会做。但是真正做大并不容易,因为能应付海量访问的程序并不简单,现在的程序员都太自命不凡,其实真正有经验的并不多,不要相信一个月薪5K- -10K的程序员能给你多大的惊喜,能应付海量访问的程序员不是那个价格。如果您想做2.0,想做大,有几个个建议:

     一.找DBMS的专家设计好数据库,大部分程序员都不知道分区视图,数据散列,数据组的概念

     二.设计好程序架构(这个其实不难,有个高人指导就行了),保持良好的扩展性,成本考虑可以找兼职的系统架构设计师做好系统架构,确定将来的发展瓶颈。

     三.考虑好文件存贮的问题。文件存贮的技术含量看起来很低,其实是很高的,可以考虑反向代理的方案。文件存贮出问题了,站点基本上就完蛋了,不仅仅是RAID的问题和存贮服务器的问题,不过道理倒是一点就破的

     四.中国国情考虑,这个最致命,需要考虑电信和网通的问题,CDN并不能解决所有问题。互动性的东西并CDN并不是很有效。最关键的是,现有的双线机房遇 到DDOS攻击基本上都会当掉,原因很简单,双线机房都是私人机房,本身就不会有太高的带宽,随便攻击一下就可以D掉(顺带提一个笑话,我知道一个双线机 房的老总总共1G的带宽却买了4G的金盾墙,很简单800M的攻击就可以搞定)。

     五.网络延迟的问题,这是分布式系统必须要考虑的,程序要能容忍0到100秒的数据延迟的功能,也就是同步的问题。不要小看这几十秒,问题很大的,如果你 的站点有交互式功能,比如即时聊天,你可以想象一下是个什么结果。对于即时聊天的东西,可以用反向代理来解决(成本较高)。但是对于留言和评论的影响不 大,但是如果系统为了健壮做了缓存和静态化的时候,这个东西可能就是灾难性的了。

     六.分散你的程序,如果你没有太多的资金构筑动辄百万的服务器,建议把功能分散开来,比如相册一台服务器,留言一台服务器

     七.看好你的程序员,如果没有很好的激励措施的话你的程序员很容易写出敷衍性的代码,而这个可能就是将来的大患,程序架构定下来后要修改可能就要费牛劲了。最好你的CTO能对你100%的衷心,100%的负责。

     八.文件同步的问题,这个问题可能你觉得没有必要,如果你看一下网通和电信的TTL就明白了,同步要支持续传,并且不能是持续的,否则你的成本会高出N倍,不要期望能通过你的软件实现,交给你的程序员吧,把上面的话告诉他他就知道怎么做了。

     九.最狠的一个问题了,也是吃亏最大的问题,不管您跟网警的关系多好,看好你的用户,审核好你的东西,一被停机可能就致命,本人就吃过N次亏。




一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的。

大型网站,比如门户网站。在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。

上面提供的几个解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。

1、HTML静态化

其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。

除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩就是使用了这样的策略,网易社区等也是如此。

同时,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。

2、图片服务器分离

大家知道,对于Web服务器来说,不管是Apache、IIS还是其他容器,图片是最消耗资源的,于是我们有必要将图片与页面进行分离,这是基本上大型网站都会采用的策略,他们都有独立的图片服务器,甚至很多台图片服务器。这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片问题而崩溃,在应用服务器和图片服务器上,可以进行不同的配置优化,比如apache在配置ContentType的时候可以尽量少支持,尽可能少的LoadModule,保证更高的系统消耗和执行效率。

3、数据库集群和库表散列

大型网站都有复杂的应用,这些应用必须使用数据库,那么在面对大量访问的时候,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法满足应用,于是我们需要使用数据库集群或者库表散列。

在数据库集群方面,很多数据库都有自己的解决方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是类似的方案,您使用了什么样的DB,就参考相应的解决方案来实施即可。

上面提到的数据库集群由于在架构、成本、扩张性方面都会受到所采用DB类型的限制,于是我们需要从应用程序的角度来考虑改善系统架构,库表散列是常用并且最有效的解决方案。我们在应用程序中安装业务和应用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户ID进行表散列,这样就能够低成本的提升系统的性能并且有很好的扩展性。sohu的论坛就是采用了这样的架构,将论坛的用户、设置、帖子等信息进行数据库分离,然后对帖子、用户按照板块和ID进行散列数据库和表,最终可以在配置文件中进行简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能。

4、缓存

缓存一词搞技术的都接触过,很多地方用到缓存。网站架构和网站开发中的缓存也是非常重要。这里先讲述最基本的两种缓存。高级和分布式的缓存在后面讲述。
架构方面的缓存,对Apache比较熟悉的人都能知道Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。
网站程序开发方面的缓存,Linux上提供的Memory Cache是常用的缓存接口,可以在web开发中使用,比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯共享,一些大型社区使用了这样的架构。另外,在使用web语言开发的时候,各种语言基本都有自己的缓存模块和方法,PHP有Pear的Cache模块,Java就更多了,.net不是很熟悉,相信也肯定有。

5、镜像

镜像是大型网站常采用的提高性能和数据安全性的方式,镜像的技术可以解决不同网络接入商和地域带来的用户访问速度差异,比如ChinaNet和EduNet之间的差异就促使了很多网站在教育网内搭建镜像站点,数据进行定时更新或者实时更新。在镜像的细节技术方面,这里不阐述太深,有很多专业的现成的解决架构和产品可选。也有廉价的通过软件实现的思路,比如Linux上的rsync等工具。

6、负载均衡

负载均衡将是大型网站解决高负荷访问和大量并发请求采用的终极解决办法。
负载均衡技术发展了多年,有很多专业的服务提供商和产品可以选择,我个人接触过一些解决方法,其中有两个架构可以给大家做参考。
硬件四层交换
第四层交换使用第三层和第四层信息包的报头信息,根据应用区间识别业务流,将整个区间段的业务流分配到合适的应用服务器进行处理。 第四层交换功能就象是虚IP,指向物理服务器。它传输的业务服从的协议多种多样,有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基础上,需要复杂的载量平衡算法。在IP世界,业务类型由终端TCP或UDP端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCP和UDP端口共同决定。
在硬件四层交换产品领域,有一些知名的产品可以选择,比如Alteon、F5等,这些产品很昂贵,但是物有所值,能够提供非常优秀的性能和很灵活的管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteon就搞定了。

软件四层交换

大家知道了硬件四层交换机的原理后,基于OSI模型来实现的软件四层交换也就应运而生,这样的解决方案实现的原理一致,不过性能稍差。但是满足一定量的压力还是游刃有余的,有人说软件实现方式其实更灵活,处理能力完全看你配置的熟悉能力。
软件四层交换我们可以使用Linux上常用的LVS来解决,LVS就是Linux Virtual Server,他提供了基于心跳线heartbeat的实时灾难应对解决方案,提高系统的鲁棒性,同时可供了灵活的虚拟VIP配置和管理功能,可以同时满足多种应用需求,这对于分布式的系统来说必不可少。

一个典型的使用负载均衡的策略就是,在软件或者硬件四层交换的基础上搭建squid集群,这种思路在很多大型网站包括搜索引擎上被采用,这样的架构低成本、高性能还有很强的扩张性,随时往架构里面增减节点都非常容易。这样的架构我准备空了专门详细整理一下和大家探讨。

对于大型网站来说,前面提到的每个方法可能都会被同时使用到,我这里介绍得比较浅显,具体实现过程中很多细节还需要大家慢慢熟悉和体会,有时一个很小的squid参数或者apache参数设置,对于系统性能的影响就会很大,希望大家一起讨论,达到抛砖引玉之效。

posted @ 2008-01-03 13:30 Live-in Java 阅读(280) | 评论 (0)编辑 收藏