自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

深入一点

你会更加快乐

  • 博客(57)
  • 收藏
  • 关注

原创 Zookeeper-Server端请求处理链

Zookeeper Server端对接收到的Client端请求,以及Leader接收到的Follower/Observer请求,都会以"处理链"的方式"分工/逐步"处理,这是一种良好的设计模式..不过事实上Zookeeper源码中,这部分代码写的确实比较"纠结".. 一. Folower端:Follower与Client的通讯入口为ServerCnxn.doIO()方法,Follo...

2013-04-18 18:10:25 310

原创 Zookeeper选举过程与消息类型描述(补充部分)

[引导,选举过程]1.    选举开始,当前server整理出自己的serverId,zxid(事务id,来自ZKDatabase),peerEpoch(此值来自文件,每一轮选举成功后都会导致epoch值改动,此值会被存储在文件中,此值用来标记leader,zxid由"epoch + 自增id"组成,zxid的前32位即为epoch),然后向所有的PARTICIPANT类型(非observ...

2013-04-16 16:26:56 260

原创 Zookeeper-Watcher机制与异步调用原理

Watcher机制:目的是为ZK客户端操作提供一种类似于异步获得数据的操作. 1)在创建Zookeeper实例时,允许接收一个watcher参数,此参数将会赋值给watchMnanger.defaultWatcher,成为当前客户端的默认Watcher.需要注意此watcher和其他watcher不同,此wather主要是响应"与链接状态转换"有关的事件(比如,"建立链接","链接关闭...

2013-04-15 18:15:31 406

原创 Zookeeper-Server数据同步与L-F交互

Zookeeper服务端初始化过程(三):数据恢复与同步 server类型(ServerType)client端服务类server端服务类Leader(new)LeaderZookeeperServerLeaderFollowerFollowerZookeeperServer...

2013-04-15 12:39:25 728

原创 Zookeeper选举过程描述与状态迁移

Zookeeper服务端初始化过程(二):Leader选举过程 Server具有如下几种状态:LOOKING:失去leader信号,选举中FOLLOWING:环境正常,对于follower而言,正在“跟随”leaderLEADING:环境正常,对于leader而言,正在“带领”OBSERVING:环境正常,对于observer而言,正在“观察” 选举的时机:Leader失效,或...

2013-04-15 12:39:07 331

原创 Zookeeper-Server端启动过程与处理类

Zookeeper服务端初始化过程,引导类:QuorumPeerMain.java. F1.Server端引导类执行过程 snapshot文件是ZKDatabase内存数据的”快照”,当server接收到一定量的write操作或者达到时间间隔阀值,将会对内存数据进行一次本地文件序列化存储,每次存储将会生成一个snapshot文件,同时也会伴随一个log文件的生成.log文件为se...

2013-04-15 12:38:49 121

原创 Zookeeper-Client端初始化过程.

Zookeeper全参数构造函数:public Zookeeper(String connectString,int sessionTimeout,Watcher watcher,long sessionId,byte[] sessionPWD,boolean canBeReadOnly) F1 Zookeeper实例整体过程 F2 内部原理   如果serv...

2013-04-15 12:38:25 894

原创 Zookeeper-Wathes简介

10.Zookeeper watches:Zk中所有的read操作都可以指定watch—getData(),getChildren(),exists()。watch是一次性事件触发器,当其”watch”的数据发生变更是,把事件发送给client。定义一个watch有2个关键点。1)一次触发:如果一个client在getData(“/znode1”,true)设置了watch,并且不久后...

2013-04-14 15:09:22 172

原创 Zookeeper中snapshot过程与session简介

8. snapshot原理:    ZK Snapshot主要意义就是将当前Database + Memory中数据的状态,直接序列化到文件,以方便在故障时可以迅速恢复.snapshot是fuzzy的(非严格意义的snapshot),snapshot所涉及到的类有SyncRequestProcessor(同步请求处理器,处理请求的log同步到disk)/ZKDatabase(ZK内存数据库...

2013-04-14 15:08:46 555

原创 Zookeeper简介(二)

二.ZK设计原理简述1. Zk数据模型和层级namespace:    ZK的名称空间非常类似文件系统,名称为一系列的path,例如”/root/app/task”,ZK中每个node都是通过path来标识的。和文件系统不同的是,每个node可以有关联的data,字节点也是如此,这一点可以类比为文件系统允许path为file或者目录。ZK的设计是为了存储“协调”数据:状态信息,配置,位置信息等...

2013-04-14 15:08:24 390

原创 Zookeeper配置参数与简介(1)

[前言:这是一次艰苦的旅行...]一.初始ZK 1. 什么是ZK:ZK是一个高效的分布式协调服务,它暴露了一些公用服务,比如命名/配置管理/同步控制/群组服务等。我们可以使用ZK来实现比如达成共识/集团管理/leader选举等。关键词:分布式协调  高性能2. 设计目标:简单:ZK中的namespace组织结构类似与标准的文件系统,通过这些共享的有层次的namespace来互相协...

2013-04-14 15:07:35 1393

原创 Zookeeper-Session控制原理与异常详解

Zookeeper构造器:Zookeeper(connectString,sessionTimeout,watcher,canBeReadOnly)Zookeeper(connectString,sessionTimeout,watcher,sessionId,byte[] sessionPwd,canBeReadOnly),    上述是创建ZK实例的2个构造方法,需要指定c...

2013-04-14 15:07:12 1402

原创 JAVA内存模型和线程安全

一.JAVA内存模型(JMM,JAVA Memory Model):    运行时涉及到两种内存,主内存和工作区内存,其中工作区内存通常为CPU的高速缓存区用来加快内存数据读取操作的(各线程独立).所有的变量内容都存在主内存中,当需要对内存数据进行操作时,数据将会从主存中load到工作区缓存并由CPU计算和赋值操作,然后再由工作区内存write到主存中,读取时如果工作区内存中已经有(loa...

2013-04-10 18:15:53 106

原创 JVM类加载机制小结

一.类加载       虚拟机把class文件加载至内存之后,对字节码数据进行校验/解析/初始化等操作,最终形成可被VM直接使用的java类型,这就是虚拟机类加载机制.类的加载完全可以在运行时进行,这给VM提供了动态加载类提供了可行性.    类生命周期过程大概分为:加载-->校验-->解析-->初始化-->使用-->卸载;类在被"使用"之前必须进行前4个...

2013-04-10 15:38:47 251

原创 JVM内存分配与调优参数列表

一.运行时数据区:  程序计数器:它是一块较小的内存空间,主要作用是当前线程所执行的字节码的行号指示器.由于java虚拟机的多线程是通过轮流切换并分配处理器执行时间的方式来实现的(协作式/抢占式?!),即任何时刻,任一CPU只会正在处理一个线程的指令;为了确保线程切换后能够正确恢复执行的位置,每个线程都有一个独立的程序计数器,每个计数器为线程私有.如果线程正在执行java方法,那么...

2013-04-09 09:01:11 126

原创 JVM垃圾回收

一.对象查找    在对对象回收之前,需要首先查找出亟待回收的对象,在JVM中,采取"根检索"算法来查找"死亡"的对象;这个算法的基本思想是通过一系列名为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所经过的路径为对象引用链;如果一个对象到GC Roots上没有任何引用链可达,那么此对象就是"不可达".可以作为GC Roots的对象大概可以分为如下2种:    1)...

2013-04-09 09:00:59 69

原创 GFS论文整理(四)

Data Integrity(数据完整性):    每个chunkserver使用checksumming(校验和)来检测存储数据的损坏.GFS分布式环境往往有数百台机器数千个硬盘,磁盘故障是一个很普通的事情,这往往会导致在读取或者写入时数据的存坏或者丢失.我们能够从其他chunk replicas中恢复这些损坏的数据.但是如果通过跨chunkserver的方式去检测这些损坏的数据,是不现实...

2013-04-09 09:00:47 247

原创 GFS论文整理(三)

Snapshot:    snapshot(快照)操作瞬间为文件或者目录树(即source)做一个copy,最小化对正在进行的变更操作的打断。我们的用户使用快照功能来快速创建数据集庞大的分支副本(经常是副本的复制,递归地),或者在尝试应用数据修改之前对当前状态设置checkpoint,这样简单地提交或者回滚。    像AFS,我们使用标准的copy-on-write技术来实现sn...

2013-04-08 09:18:32 216

原创 GFS论文整理(二)

Operation Log:    operation log记录了比较重要的metadata数据修改,它是GFS的核心。它不仅记录metadata的修改记录,也充当了定义并发操作逻辑时间线的角色。Files和chunks,以及它们的versions,都是唯一的,并且是通过它们创建时的logic times来确定的。    因为operation log很重要,我们必须可靠的存储它,在m...

2013-04-08 09:18:08 429

原创 GFS论文整理(一)

摘要:    我们设计并实现了GFS:一个高扩展性,适用于数据密集型应用的分布式文件系统。运行在廉价的商用服务器上,它提供了容错能力,它能够在大量客户端请求时提供较好的整体性能。    当享用众多具有同样上述目的的分布式文件系统时,我们的设计驱动力来对应用的工作量和技术环境,无论是当前还是预期,也折射出与早期的文件系统的背离。这些引导我们重新检测传统选择或者探索一个不同的设计方式。 ...

2013-04-08 09:17:44 620

原创 GFS学习(三)

四、容错和诊断  4.1 高可靠性  4.1.1 快速恢复  不管如何终止服务,MASTER和数据块服务器都会在几秒钟内恢复状态和运行。实际上,我们不对正常终止和不正常终止进行区分, 服务器进程都会被切断而终止。客户机和其他的服务器会经历一个小小的中断,然后它们的特定请求超时,重新连接重启的服务器,重新请求。  4.1.2 数据块备份  如上文所讨论的,每个数据块都会被备份到...

2013-04-08 07:14:56 532

原创 GFS学习(二)

二、系统交互  (1)租约(lease)和修改顺序:  (2)数据流  我们的目标是充分利用每个机器的网络带宽,避免网络瓶颈和延迟.  为了有效的利用网络,我们将数据流和控制流分离。数据是以流水线的方式在选定的chunkerserver链上线性的传递的。每 个机器的整个对外带宽都被用作传递数据。为避免瓶颈,每个机器在收到数据后,将它收到数据尽快传递给离它最近的机器。  (3)...

2013-04-08 07:14:22 245

原创 GFS学习(一)

Google文件系统GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,但可以提供容错功能。它可以给大量的用户提供总体性能较高的服务。一、设计概览  (1)设计想定:  GFS与过去的分布式文件系统有很多相同的目标,但GFS的设计受到了当前及预期的应用方面的工作量及技术环境的驱动,这反映了 它与早期的文件系统明显不同的设想。这...

2013-04-07 09:20:32 507

原创 BigTable论文学习总结

一.bigtable是一个分布式存储系统,可以用来管理PB级别的结构化数据,且可以分布在大量的商业服务器上。二.bigtable的目标是:广泛适用性,扩展性,高性能,高可用性。bigtable其类似一个数据库系统,和普通RDBMS数据库具有很多相同的策略,但是bigtable并不支持关联数据模型(bigtable是数据关系松散的),相反,它向客户端提供简单的/动态控制/模式自由的数据模型。...

2013-04-07 09:20:13 2080

原创 JAVA序列化/反序列化与单例

单例设计类: package com.test.singleton;import java.io.IOException;import java.io.ObjectStreamException;import java.io.Serializable;public class SingleTon implements Serializable{ /*...

2013-04-07 09:17:49 120

原创 高效MYSQL性能优化--小结

 总结自<高效mysql性能优化>:第一章:5分钟DBA一.鉴定性能问题:1) 查找慢SQL语句: >show full processlist 可以得到当前mysql所有连接中正在运行的操作,此指令将会输出当前运行的所有sql列表以及其耗时信息: id:42 User:*** Host:**** Command:QUERY Tim...

2013-04-07 09:17:20 555

原创 Mysql中varchar和text小记

Varchar 对每个英文(ASCII)字符都占用2个字节,对一个汉字也只占用两个字节char 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节Varchar 的类型不以空格填满,比如varchar(100),但它的值只是"n",则它的值就是"n"而char 不一样,比如char(100),它的值是"n",而实际上它在数据库中是"n "(n后共有99个空格,就是把它填满为100个字...

2013-04-07 09:17:08 534

原创 Semaphore释疑

java api中Semaphore(信号量),用于控制有限资源的并发访问。API也非常好理解,不过有几个需要注意的地方:Semaphore是纯粹的应用级控制“锁”,使用简单的volitale变量作为信号量信息,通过acquire、release、reduce等显式的可以修改此信号量数字。它并没有维护任何锁,也不是控制reentrant的,它不会维护信号和thread的关系。Se...

2013-04-06 09:18:59 197

原创 ExecutorService(任务调度器)详解

前言:这是一次艰苦的旅行...一.ExecutorService:它也是一个接口,它扩展自Executor接口,Executor接口更像一个抽象的命令模式,仅有一个方法:execute(runnable);Executor接口简单,但是很重要,重要在这种设计的模式上。。 ExecutorService在Executor的基础上增加了“service”特性的方法:shutd...

2013-04-06 09:18:45 831

原创 Executors工具类介绍

Executors是一个工具类,提供了大量的静态方法,方便我们在线程池中使用。 static Callable<Object> callable(Runnable task):将runnable接口实例转换成Callable接口实例.static ExecutorService newCacheThreadPool():创建一个“按需创建”的线程池,此前创建的线程可用时将...

2013-04-06 09:18:33 377

原创 CompletionService简介(异步)

一.CompletionService接口提供了可以操作异步任务的功能,其唯一实现的API为ExecutorCompletionService。此API只是可以获取异步任务执行的结果,它不是ExecutorService。其有5个核心方法:Future<V> poll():同步操作,获取并移除第一已经完成的任务,否则返回null。Future<V> pol...

2013-04-06 09:18:22 313

原创 JAVA并发数据结构详解

前言:这是一场艰苦的旅行....请首先参考:http://shift-alt-ctrl.iteye.com/blog/1839142一.BlockingDeque阻塞双端队列(线程安全):注意ArrayDeque和LinkedList仅仅扩展了Deque,是非阻塞类型的双端队列。BlockingQueue单向队列,其内部基于ReentrantLock + Condition来控...

2013-04-06 09:18:07 199

原创 NIO-DatagramChannel详解

DatagramChannel是NIO中面向Datagram(数据报)的套接字通道.底层为DatagramSocket + selector的高层封装.此接口仍然实现了SeletableChannel,ScatteringByteChannel, GatheringByteChannel . 可以通过DatagramChannel.open()方法打开获得通道,但此时尚未链接.Data...

2013-04-05 08:36:11 1310

原创 NIO-Pile通道详解

Pipe实现单向管道传送的通道对等端.管道是由两端组成:一个可写入的sink通道和一个可读取的source通道(根据数据来源).一旦将某些字节写入接受器通道,就可以按照与写入时完全相同的顺序从源通道中读取这些字节.在另一个线程从管道中读取这些字节或先前已写入的字节之前,是否阻塞将该字节写入管道的线程是与系统相关的,因此是未指定的.Pipe名为管道,其实底层实现为一个本地的TCP链接:即一个侦听...

2013-04-05 08:35:44 143

原创 NIO-FileChannel详解

一.FileLock(通道文件锁,记录区域锁):表示文件区域锁定标记.FileLock并没有实现lock接口,它仅仅是一个辅助锁操作类.每次通过FileChannel.lock()或者tryLock()获取文件锁.一旦获取锁,那么lock将持续有效,直到被release(),以及JVM退出.可以通过对fileLock.isValid()检测锁的有效性.文件锁要么是独占的,有么是共享的.共享锁可...

2013-04-05 08:35:20 421

原创 NIO中Channel.spi学习

一.channel.spi底层实现我们首先看看SelectorProvider:SelectorProvider提供了通过底层输出各种NIO实现的接口:public abstract DatagramChannel openDatagramChannel():创建并打开一个DatagramChannel...DatagramChannel.open()方法调用.public abst...

2013-04-05 08:34:54 270

原创 NIO-ServerSocketChannel详解

ServerSocketChannel类似于SocketChannel[参考:http://shift-alt-ctrl.iteye.com/blog/1840409],只不过ServerSocketChannel使用server端.ServerSocketChannel是ServerSocket + Selector的高层封装.可以通过socket()方法获得与其关联的ServerSocke...

2013-04-05 08:34:24 512

原创 Java并发锁控制API详解

一.Lock接口(java.util.concurrent.locks):void lock():获取锁,阻塞方式;如果资源已被其他线程锁定,那么lock将会阻塞直到获取锁,锁阻塞期间不受线程的Interrupt的影响,在获取锁成功后,才会检测线程的interrupt状态,如果interrupt=true,则抛出异常。unlock():释放锁tryLock():尝试获取锁,并发环...

2013-04-04 10:34:47 293

原创 Atomic并发API简述

一.Atomic包,原子性。事实上,此包中的类可将volatile值、字段和数组元素的概念扩展到那些提供原子性操作的类上,主要方式为 compareAndSet(expectedValue,updateValue),即CAS思想来确保内存一致性操作。expectedValue即当前值,updateValue为需要被更新的值,如果内存中的值为expectedVaue则更新,否则返回false...

2013-04-04 10:34:36 497

原创 SocketChannel实例

package com.test.socket;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.net.SocketAddress;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.n...

2013-04-04 10:34:24 291

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除