摘要:Replica Set 节点类型分为三种:standard:常规节点,它存储一份完整的数据副本,参与选举投票,有可能成为primary节点;passive:存储了完整的数据副本,参与投票,不能成为primary节点;arbiter:仲裁节点,只参与投票,不接收复制的数据,也不能成为primary节点。本文配置使用2个常规节点和一个arbiter节点,arbiter节点由于不同步数据,所以负载会很小,部署对硬件没有太大的要求。假设192.168.1.211、192.168.1.212为常规节点,192.168.1.68为arbiter节点。三个节点上的mongodb都是用下面的配置文件,文件存放
阅读全文
12 2012 档案
摘要:转载自http://my.oschina.net/zhzhenqin/blog/97268现在网上很多教程都在讲MongoDB分片配置,但大多都没有经过实战,胡乱转载。而且用的MongoDB版本不同各种配置眼花寮乱,让入门者莫衷一是。最近我也做了MongoDB分片,贴出自己的配置。并且把需要注意的问题和大伙聊聊,不恰当的地方希望大家指正。 也同时希望让后来者能绕过这些问题。正式环境为了保证数据安全都要进行备份的,关于分片复制请见alibaba教程:http://www.taobaodba.com/html/525_525.html我配置的集群是测试用的,没有复制。只是简单的分片存储数据进行测试
阅读全文
摘要:转载自http://www.cnblogs.com/spnt/当MongoDB整个架构已经部署好以后,真正考验架构者能力的时候就到了:该如何选择片键。如果选择了一个不恰当的片键,他可能会在访问量变大的时候,使你的整个应用系统崩溃,同样好的片键可以构成一个良性的生态系统,根据需要增删服务器,MongoDB会确保系统一直正确的运行下去。咱们先看看几种不恰当的片键1,小基数片键 假设我们有一个存储用户信息的应用程序,每个文档有一个continent的字段,存储用户所在地区,其值有:africa,antarctica,asia,australia,europe,north america,south
阅读全文
摘要:转载自http://www.cnblogs.com/spnt/MongoDB的Sharding机制解决了海量存储和动态扩容的问题,但离生产环境的高可靠,高可用还有距离,Sharding在单点出现故障时就无能为力了。但是MongoDB的副本集却可以很轻松的处理单点故障,所以就有了Replica Sets + Sharding的高可用,高安全的架构。 架构如下: 1,shard服务器:使用Replica Sets确保每个数据节点都具有备份、自动容错转移、自动恢复的能力。 2,配置服务器:使用使用3个配置服务器确保元数据完整性 3,路由进程:使用3个路由进程实现平衡,提高客户端接入性能,架构如下3个
阅读全文
摘要:转载自http://www.cnblogs.com/spnt/Mongodb的Sharding维护也是就那几个命令,相对来说都很简单,结合实例做下演示。1,列出所有的Shard Server注意一点是:需要连接到路由的admin下。listshards的参数1是一个固定的默认值,没有特殊的意义。2,查看Sharding的信息切换到Friends数据库,使用printShardingStatus(),可以看到当前Sharding的信息。3,对现有的表执行Sharding。 上面我们对FriendUserAttach表执行了分片,下面我们在对另外一个表FriendUser进行分片。 首先我们查看下
阅读全文
摘要:转载自http://www.cnblogs.com/spnt/副本集实现了网站的安全备份和故障的无缝转移,但是并不能实现数据的大容量存储,毕竟物理硬件是有极限的,这个时候就需要做分布式部署,把数据保存到其他机器上。Mongodb的分片技术就很完美的实现了这个需求。理解Mongodb的分片技术即Sharding架构 什么是Sharding?说白了就是把海量数据水平扩展的集群系统,数据分表存储在Sharding的各个节点上。 Mongodb的数据分开分为chunk,每个chunk都是collection中的一段连续的数据记录,一般为200MB,超出则生成新的数据块。 构建Sharding需要三种角
阅读全文
摘要:转载自http://www.cnblogs.com/spnt/Mongodb副本集配置好以后,少不了维护,维护内容也不是很多,主要是现在状态和增删节点等。在说维护之前,得先说说Mongodb副本集的同步机制。数据复制的目的是使数据得到最大的可用性,避免单点故障引起的整站不能访问的情况的发生,Mongodb的副本集在同一时刻只有一台服务器是可以写的,副本集的主从复制也是一个异步同步的过程,是slave端从primary端获取日志,然后在自己身上完全顺序的执行日志所记录的各种操作(该日志是不记录查询操作的),这个日志就是local数据库中的oplog.rs表,默认在64位机器上这个表是比较大的,占
阅读全文
摘要:转载自http://www.cnblogs.com/spnt/既然使用Mongodb,就不得不用他的安全备份机制:副本集。Mongodb副本集是什么东西? 通俗的讲就是用多台机器进行同一数据的异步同步,从而使多台机器拥有同一数据的多个副本,并且当主库当掉时在不需要用户干预的情况下自动切换其他备份服务器做主库。而且还可以利用副本服务器做只读服务器,实现读写分离,提高负载。需要指数的是:Mongodb的主从复制模式官方已经不在推荐使用了。那么该如何实现呢?我用一台的机器的不同文件夹来做下模拟(生产环境下最好用不同的服务器来做物理隔绝)。我的文件目录是:F:\mongodb1\F:\mongodb2
阅读全文
摘要:Data 作为SpringSource的其中一个父项目, 旨在统一和简化对各类型持久化存储, 而不拘泥于是关系型数据库还是NoSQL 数据存储。无论是哪种持久化存储, 数据访问对象(或称作为DAO,即Data Access Objects)通常都会提供对单一域对象的CRUD (创建、读取、更新、删除)操作、查询方法、排序和分页方法等。Spring Data则提供了基于这些层面的统一接口(CrudRepository,PagingAndSortingRepository)以及对持久化存储的实现。你可能接触过某一种Spring 模型对象——比如JdbcTemplate——来编写访问对象的实现。基于
阅读全文
摘要:从一个简单的 JPA 示例开始本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例;接着重构该示例,并引入 Spring 框架,这两部分不会涉及过多的篇幅,如果希望能够深入学习 Spring 和 JPA,可以根据本文最后提供的参考资料进一步学习。自 JPA 伴随 Java EE 5 发布以来,受到了各大厂商及开源社区的追捧,各种商用的和开源的 JPA 框架如雨后春笋般出现,为开发者提供了丰富的选择。它一改之前 EJB 2.x 中实体 Bean 笨重且难以使用的形象,充分吸收了在
阅读全文
摘要:spring的 ThreadPoolTaskExecutor类最终是通过调用java 的ThreadPoolExecutor的voidexecute(Runnable task)方法或Future<?> submit(Runnable task)方法执行任务的下面是spring的任务执行类和接口的继承层次interfaceExecutor void execute(Runnable command);interfaceTaskExecutorextends Executor void execute(Runnable task);interfaceAsyncTaskExecutor
阅读全文
摘要:前言:最近在做分布式海量数据处理项目,使用到了java的线程池,所以搜集了一些资料对它的使用做了一下总结和探究,前面介绍的东西大多都是从网上搜集整理而来。文中最核心的东西在于后面两节无界队列线程池和有界队列线程池的实例使用以及线上问题处理方案。 1. 为什么要用线程池?在Java中,如果每当一个请求到达就创建一个新线程,开销是相当大的。在实际使用中,每个请求创建新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源,甚至可能要比花在实际处理实际的用户请求的时间和资源要多的多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果在一个JVM中创建太多...
阅读全文
摘要:JAVA5提供了多种类型的线程池,如果你对这些线程池的特点以及类型不太熟悉或者非常熟悉,请帮忙看看这篇文章(顺便帮忙解决里面存在的问题,谢谢!):http://xtu-xiaoxin.iteye.com/admin/blogs/647580 如果对ThreadPoolExecutor还不是很熟悉,可以看看一篇对ThreadPoolExecutor的介绍的博文:http://blog.csdn.net/waterbig/archive/2009/11/10/4794244.aspx 首先,JAVA中使用ThreadPoolExecutor的常用方式: 实例代码1Java代码Runnablerun
阅读全文
摘要:我们都知道使用线程池能够控制线程的数量,尤其是大量的“短命”线程存在时,线程池将大大降低系统消耗(内存和CPU)。不过,线程池也同样需要管理,于是我写了本篇。首先,我们来看看管理器的整个继承关系:显而易见,有ThreadPoolExecutor和ScheduledThreadPoolExecutor两个实现类,当然Executor类里也有一些内部类实现了特定的功能(如class DelegatedScheduledExecutorService),我们也可以自己通过扩展这里所有的接口、抽象类、类来实现自己的特定功能,如继承ThreadPoolExecutor类,覆写beforeExecute(
阅读全文
摘要:Executor框架是juc里提供的线程池的实现。前两天看了下Executor框架的一些源码,做个简单的总结。线程池大概的思路是维护一个的线程池用于执行提交的任务。我理解池的技术的主要意义有两个:资源的控制,如并发量限制。像连接池这种是对数据库资源的保护。资源的有效利用,如线程复用,避免频繁创建线程和线程上下文切换。那么想象中设计一个线程池就需要有线程池大小、线程生命周期管理、等待队列等等功能,下面结合代码看看原理。Excutor整体结构如下:Executor接口定义了最基本的execute方法,用于接收用户提交任务。ExecutorService定义了线程池终止和创建及提交futureTas
阅读全文
摘要:来源:YidingHe's Blog从 Java 5 开始,Java 提供了自己的线程池。线程池就是一个线程的容器,每次只执行额定数量的线程。 java.util.concurrent.ThreadPoolExecutor 就是这样的线程池。它很灵活,但使用起来也比较复杂,本文就对其做一个介绍。首先是构造函数。以最简单的构造函数为例:publicThreadPoolExecutor( intcorePoolSize, intmaximumPoolSize, longkeepAliveTime, TimeUnitunit, BlockingQueue<Runnable>wor
阅读全文
摘要:转载http://llying.iteye.com/blog/496541大家都了解在MS家族中iis作为internet服务器可谓是赫赫有名,简单,方便。而且相关的web程序(asp,asp.net)也是比比皆是。我们希望java开发的web程序可以和iis共存(共同使用80端口发布)。这方面的教程网上很多,多数是copy之后又copy,以至于有些细节一直含糊不清,也导致我走了许多弯路。在此留个脚印防止日后的错误。软件及环境windows server 2003IIS 6.0Tomcat 6.0.20JDK 6.0JK isapi_redirect-1.2.14 (很多情况下是由于isapi
阅读全文
摘要:转载http://www.infoq.com/cn/articles/zh-tomcat-http-request-2?utm_source=infoq&utm_medium=related_content_link&utm_campaign=relatedContent_articles_clk很多开源应用服务器都是集成tomcat作为web container的,而且对于tomcat的servlet container这部分代码很少改动。这样,这些应用服务器的性能基本上就取决于Tomcat处理HTTP请求的connector模块的性能。本文首先从应用层次分析了tomcat所
阅读全文
摘要:转载http://www.infoq.com/cn/articles/zh-tomcat-http-request-1很多开源应用服务器都是集成tomcat作为web container的,而且对于tomcat的servlet container这部分代码很少改动。这样,这些应用服务器的性能基本上就取决于Tomcat处理HTTP请求的connector模块的性能。本文首先从应用层次分析了tomcat所有的connector种类及用法,接着从架构上分析了connector模块在整个tomcat中所处的位置,最后对connector做了详细的源代码分析。并且我们以Http11NioProtocol
阅读全文
摘要:本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996 我们知道,在Tomcat的世界里,一个Host容器代表一个虚机器资源,Context容器代表一个应用,所谓的部署器就是能够把Context容器添加进Host容器中去的一个组件。显然,一个Host容器应该拥有一个部署器组件。简单的部署代码应该是下面这样的:[java]view plaincopyprint?Contextcontext=newStandardContext();Hosthost=newStandardHost();host.addChild(conte
阅读全文
摘要:本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996在明白Tomcat的Session机制之前,先要了解Session,Cookie,JSESSIONID这几个概念。JSESSIONID是一个唯一标识号,用来标识服务器端的Session,也用来标识客户端的Cookie,客户端和服务器端通过这个JSESSIONID来一一对应。这里需要说明的是Cookie已经包含JSESSIONID了,可以理解为JSESSIONID是Cookie里的一个属性。让我假设一次客户端连接来说明我对个这三个概念的理解: Http连接本身是无状态.
阅读全文
摘要:本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996在讲Tomcat的载入器之前,先要了解一下java的类加载机制,这里就不具体说了,仅仅写一点我认为比较重要的东西: 1:一般实现自己的类加载器是重写ClassLoader的findClass方法,然后在这个方法里面读取class文件为byte[]数组,传入defineClass方法,defineClass方法返回我们加载的类。这样便实现了我们自己的简单的类加载器。下面是一个简单的自定义类加载器的findClass方法:[java]view plaincopyprin.
阅读全文
摘要:本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996在前面的大部分文章都是讲连接器和容器的,以后的内容会偏向写一些Tomcat的其他组件以及一些细节的东西。 Tomcat有很多组件,要一个一个启动组件难免有点麻烦。由于Tomcat的包含关系是Catalina->Server->Service->容器/连接器/日志器等,于是可通过父组件负责启动/关闭它的子组件,这样只要启动Catalina,其他的都自动启动了。这种单一启动和关闭的机制是通过实现Lifecycle接口来实现的。下面是Lifecycle接口
阅读全文
摘要:本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996日志记录器挺简单的,没有很多东西,最主要的就是一个Logger接口: [java]view plaincopyprint?publicinterfaceLogger{publicstaticfinalintFATAL=Integer.MIN_VALUE;publicstaticfinalintERROR=1;publicstaticfinalintWARNING=2;publicstaticfinalintINFORMATION=3;publicstaticfin..
阅读全文
摘要:本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996目标:在这篇文章希望搞明白connector.getContainer().invoke(request,response);调用容器的invoke后是怎么传递到 servlet或者jsp的? 由上篇文章Tomcat源码分析(三)--连接器是如何与容器关联的?可知,connector.getContainer()得到的容器应该是StandardEngine(其实应该是由server.xml文件配置得到的,这里先假定是StandardEngine),StandardEn
阅读全文
摘要:本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996本文所要解决的问题:一个http请求过来,容器是怎么知道选择哪个具体servlet? 我们知道,一个Context容器表示一个web应用,一个Wrapper容器表示一个servlet,所以上面的问题可以转换为怎么由Context容器选择servlet,答案是映射器。映射器是实现了Mapper接口的类,作用就是根据请求连接(主要是协议和路径)来选择下一个容器,可以看做是一个哈希表,根据关键字段来选择具体的值,Mapper接口的定义为:[java]view plainco
阅读全文
摘要:本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996这篇文章要弄懂一个问题,我们知道,一个链接器是跟一个容器关联的,容器跟链接器是在什么时候关联上的? 在明白这个问题前要先了解一下Digester库,这个库简单的说就是解析xml文件,这里有两个概念:模式和规则,所谓模式就是一个xml的标签,规则就是遇到一个xml标签需要做什么,看一下他主要的三个方法: 1:addObjectCreate(String pattern, String className, String attributeName) 根据模式pa...
阅读全文
摘要:本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996目标:在这篇文章希望搞明白http请求到tomcat后是怎么由连接器转交到容器的? 在上一节里已经启动了一个HttpConnector线程,并且也启动了固定数量的HttpProcessor线程。HttpConnector用来等待http连接,得到http连接后交给其中的一个HttpProcessor线程来处理。接下里具体看一下HttpConnector是怎么得到连接得,以及HttpProcessor是怎么处理的。当启动了HttpConnector线程后(在上一节已..
阅读全文
摘要:转载http://www.cnblogs.com/phinecos/archive/2008/09/03/1283376.htmlSpring的scheduling.quartz包中对Quartz框架进行了封装,使得开发时不用写任何QuartSpring的代码就可以实现定时任务。Spring通过JobDetailBean,MethodInvokingJobDetailFactoryBean实现Job的定义。后者更加实用,只需指定要运行的类,和该类中要运行的方法即可,Spring将自动生成符合Quartz要求的JobDetail。在上一篇文章《Quartz框架快速入门(三)》中我们将示例迁移到W
阅读全文
摘要:转载http://www.cnblogs.com/phinecos/archive/2008/09/03/1283103.html在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建Trigger和Scheduler,其步骤如下:首先创建一个Web项目,将quartz-1.6.0.jar,以及lib目录下面core下所有jar,optional目录下的所有commons-beanutils.jar和commons-digester-1.7.jar,build目录下的jta.ja
阅读全文
摘要:转载http://www.cnblogs.com/phinecos/archive/2008/09/03/1282982.html 尽可能的用声明式处理软件配置,其次才考虑编程式的方式。在上一篇《Quartz框架快速入门(一)》中,如果我们要在Job启动之后改变它的执行时间和频度,必须去修改源代码重新编译。这种方式只适用于小的例子程序,但是对于一个大且复杂的系统,这就成了一个问题了。因此,假如能以声明式部署Quart Job时,并且也是需求允许的情况下,你应该每次都选择这种方式·配置quartz.properties文件文件quartz.properties定义了Quartz应用运行
阅读全文
摘要:转载http://www.cnblogs.com/phinecos/archive/2008/09/03/1282747.html 创建一个Java工程,引入几个JAR到工程中才能成功构建它们。首先,你需要Quartz的二进制版本,包的名字是quartz-<version>.jar。Quartz还需要几个第三方库;这依赖于你要用到框架的什么功能而定,Commons Digester库可以在<QUARTZ_HOME>/lib/core和<QUARTZ_HOME>/lib/optional目录中找到。如果出现java.lang.NoClassDefFoundEr
阅读全文
摘要:摘自:http://www.blogjava.net/Jay2009/archive/2009/03/25/259176.htmlSpring为创建Quartz的Scheduler、Trigger和JobDetail提供了便利的FactoryBean类,以便能够在Spring 容器中享受注入的好处。此外Spring还提供了一些便利工具类直接将Spring中的Bean包装成合法的任务。Spring进一步降低了使用Quartz的难度,能以更具Spring风格的方式使用Quartz。概括来说它提供了两方面的支持:1)为Quartz的重要组件类提供更具Bean风格的扩展类;2)提供创建Schedule
阅读全文
摘要:在开发时我们会常常遇到定时任务可以由客户进行管理在什么时候去执行或者甚至不再执行该定时任务。而Spring中所提供的定时任务组件却只能够通过修改trigger的配置才能够控制定时的时间以及是否启用定时任务,为此我搜索了网上的一些解决方法,发现还是不能够很好的解决这个问题。所以干脆仔仔细细的研究了一把Quartz和Spring中相关的源码,我们发现当我们在Spring通过如下声明定时任务时:Java代码<beanid="yourJobDetail"class="org.springframework.scheduling.quartz.MethodInvoki
阅读全文
摘要:Quartz 是一个强大的企业级 Schedule 工具,也是目前最好的开源 Schedule 工具。Spring中也集成了quartz的应用,下面就讲一下如何在spring中使用quartz。spring的配置:xml 代码<beanid="schedulerFactoryBean"class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><propertyname="triggers"><list><refbean
阅读全文
摘要:http://code.google.com/p/google-enterprise-connector-manager/http://code.google.com/p/googlesearchapplianceconnectors/Connector developper guidehttps:...
阅读全文
摘要:本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996对Tomcat感兴趣是由于《深入理解Tomcat》这本书,之前仅仅是使用到了Tomcat,这本书却让我对Tomcat的实现理解的更加透彻了,在这里希望记录一些自己对Tomcat的理解。由于这本书是基于tomcat4的,所以我的文章也是基于tomcat4的,但是tomcat的核心思想应该是没有变的,最主要的两个组件还是连接器和容器。主要为了学习,就不管是新版本还是旧版本了。 为了后面的理解,先大致说一下Tomcat的整体架构,Tomcat主要有两个组件,连接器和容器..
阅读全文