- 博客(54)
- 收藏
- 关注
原创 Netty IO线程模型学习总结
Netty框架的 主要线程是IO线程,线程模型的好坏直接决定了系统的吞吐量、并发性和安全性。Netty的线程模型遵循了Reactor的基础线程模型。下面我们先一起看下该模型Reactor线程模型Reactor 单线程模型单线程模型中所有的IO操作都在一个NIO线程上操作:包含接受客户端的请求,读取客户端的消息和应答。由于使用的是异步非阻塞的IO,所有的IO操作不会阻塞,...
2016-05-20 17:07:21
221
原创 大数据即时计算产品的一般原理----列式存储
一、什么是列式存储讲列存储之前必须得先讲下行存储,因为行存储是大数据技术流行之前最为常见的一种数据存储方式,传统的关系数据库如Oracle、DB2、Mysql等都是将数据以行记录为单位进行组织,所以数据读写操作需要遍历行记录中所有的列,在存储机制上,行存储将行记录中各列的数据值串在一起进行存储,并且先存完第一行再存第二行,例如:1,Smith,Joe,40000;2,Jones,Mary,...
2016-05-20 17:04:48
503
原创 大数据即时计算产品的一般原理----技术纲要介绍
前言: 在数据部门工作已经是第三个年头,做过很多的数据产品,也接触了很多的业务数据和业务数据的生产。我的工作经历也大致分为这样几个阶段:第一阶段就是做数据产品,主要的工作就是把生产好的数据根据具体的业务把数据搬到网页上;第二个阶段开始尝试做了数据产品的产品,以配置化和平台化的方式玩出数据产品的页面;第三个阶段开始尝试做了数据仓库的产品,直接基于数据仓库模型组织的明细粒度数据进行即席...
2016-05-20 17:03:12
265
原创 大数据即时计算产品的一般原理介绍----MPP架构
什么是MPP架构? 众所周知,基于Map-Reduce模式的Hadoop擅长数据批处理,不是特别符合即时查询的场景。而业界当前做大数据实时查询一般都采用MPP架构,MPP全称Massively Parallel Processing,即大规模并行处理系统。大家都知道在数据库架构设计中,目前主要有Shared Everthing、和Shared Storage、Shared Not...
2016-05-20 17:02:44
1867
原创 大数据即时计算产品的一般原理----索引
一、基本概念 索引相信大家多多少少都接触过,索引的目的说白了就是加快数据的检索、排序和计算等,尤其是对于海量数据的快速检索,索引起到了至关重要的作用。大家都知道,我们基于传统数据库开发经常会遇到一个问题,就是这个SQL查询变慢,是不是索引没加?数据库的索引好比一本书前面的目录,如果明确知道按哪个字段来进行索引查找,查询效率还是挺高的,数据库的索引实际上是一个单独的、物理的数据库结...
2016-05-20 17:02:26
300
原创 job运行流程(4)---NodeManager运行CONTAINER
16、接着上篇文章LocalizationEventType.INIT_CONTAINER_RESOURCES事件被触发,对应ResourceLocalizationService.handle()被执行,分别会创建public、private、application三种资源对应的LocalResourcesTrackerImpl服务,接着LocalResourcesTrackerImpl.h...
2016-03-29 21:00:46
353
原创 job运行流程(3)---NodeManager运行APPLICATION
11、接着上篇文章ApplicationMasterLaunch.handle(AMLaunchEventType.LAUNCH)被触发,接着开始调用RPC服务向NodeManager请求启动container,并触发RMAppAttemptEventType.LAUNCHED事件; 12、调用ContainerManagementProtocolPBClientImpl.startC...
2016-03-29 20:36:36
182
原创 job运行流程(2)---ResourceManager调度job
6、接着上篇文章中的最后一步:ResourceManager服务端执行ClientRMService.submitApplication(),接着开始调用RMAppManager.submitApplication()进而来触发RMAppEvent事件,成为job调度运行事件触发的源头;(本系列文章主要分析job调度运行流程的主要事件流程,像其它的日志读写事件流程、container监控流...
2016-03-29 20:20:52
217
原创 job运行流程(1)---客户端提交job
1、通过hadoop -jar命令提交一个job,并且解析提交的各个参数,保存对应的属性或内容到configuration; 优化点:这里可以通过修改GenerticOptionPaser类,来解析自定义的属性,比如public jar包更新等。2、调用waitForCompletion提交job并轮询job运行状态;优化点:这里的job状态轮询在ResourceManager返回...
2016-03-29 20:04:15
425
原创 hadoop------applog读写流程
1、NodeManager初始化时会先初始化ContainerManagerImpl服务,从而触发LogAggregationService也被初始化,而该服务是用于处理applog的读写流程的。 2、LogAggregationService会根据各种事件触发,从而读取本地的container log,然后写到hdfs上的app-log-dir,并删除本地的container log...
2016-03-29 19:36:15
218
原创 hadoop-----joblog读写流程
1、job提交后,调用JobSubmitter的submitJobInternal方法提交job相关文件到hdfs 2、nodemanager启动时会初始化本地目录,并清除本地yarn.nodemanager.local-dirs下的filecache/usercache/nmprivate目录下的资源文件 3、nodemanager的container资源初始化:Resour...
2016-03-25 21:03:23
208
原创 谈谈数据库索引(转载)
今天来聊聊数据库里的索引,你知道的,网上这样的文章一抓一大把的, 基本都是从索引的原理说起,讲到索引的分类, 物理组织和存储形式,如何找到对应的记录,如何构建复杂的索引等等 ,如果我再写一篇这样的就没意思了,而且这些未必真的是大家(尤其是开发同学)关心的。所以我今天打算以一个不同的角度来讲下索引,而且针对B+tree索引,希望大家看了会有所帮助。对于一个SQL,开发同学最关心的啥? 我觉得...
2016-03-12 17:45:11
111
原创 数据一致性-分区可用性-性能——多副本强同步数据库系统实现(转载)
这篇博客文章接下来的部分,将跳出任何一种数据库,从原理的角度上来分析下面的几个问题:问题一:数据一致性。在不使用共享存储的情况下,传统RDBMS(例如:Oracle/MySQL/PostgreSQL等),能否做到在主库出问题时的数据零丢失。问题二:分区可用性。有多个副本的数据库,怎么在出现各种问题时保证系统的持续可用?问题三:性能。不使用共享存储的RDBMS,为了保证多个副...
2016-03-12 17:45:02
256
原创 Storm线程进程分配方法
运行中的Topology主要由以下三个组件组成的:Worker processes(进程)Executors (threads)(线程)Tasks其中进程数除以机器数可以得到每台机器的进程数,我们以一台机器为例:Spout或者Bolt的Task个数一旦指定之后就不能改变了,而Executor的数量可以根据情况来进行动态的调整。默认情况下# executor = #t...
2016-03-12 17:44:54
219
原创 storm的ack机制
我们知道,Storm保证发出的每条消息都能够得到完全处理,也就是说,对于从Spout发出的每个tuple,该tuple和其产生的所有tuple(整棵tuple树)都被成功处理。如果在应用设定的超时时间之内,这个tuple没有处理成功,则认为这个tuple处理失败了。tuple处理成功还是失败,Storm又是怎么知道的呢? 原来Storm中有一类叫Acker的task,它会对tuple树...
2016-03-12 17:44:38
330
原创 diamond源码学习总结
介绍:[http://gitlab.alibaba-inc.com/middleware/diamond/wikis/Diamond-Intro]客户端:一、 client获取server地址 diamond-client在使用时没有指定server地址的代码,地址获取对用户是透明的。 server地址存储在一台具有域名的机器上的HTTP server中,我们称它为地址服务器,...
2016-03-12 17:43:41
978
原创 ConfigServer(一)
是什么?俗称:配置中心,是一个基于“发布-订阅”模型的分布式通信框架常用应用场景场景1. HSF服务 。服务发布者发布服务,服务调用者订阅服务,ConfigServer向订阅服务的调用者推送可访问的服务IP地址列表,服务调用者从中选一个发起远程调用。场景2. notify 。消息发送和接收,都要通过notifyserver来完成。notifyclient端也是通过co...
2016-03-08 10:06:18
518
原创 数据库连接池(转载)
这次我们来聊聊数据库的连接, 因为我觉得这是蛮有内容且蛮重要的一部分内容。首先会从单个的连接池讲起,重点考察下单连接池和数据库的交互情况, 然后探讨下大规模集群下数据库连接会遇到的问题,以及对应的解法。首先什么是连接池,出现的原因是啥?我们可以从一个标准SQL的生命周期说起, 如果一个SQL要到DB上去执行, 那么首先要建立应用服务器和数据库的一个连接状态,连接建立后数据库会分配一个线程或...
2016-03-08 10:05:58
113
原创 zookeeper学习
简介ZooKeeper是由Yahoo! Research研发的一个分布式的协调系统,最初是Hadoop下的一个子项目,后来独立出来成为Apache的顶级项目。不了解Zookeeper的人会认为它只是一个分布式锁服务,分布式锁仅仅只是ZooKeeper的其中一个应用场景而已。ZooKeeper的定位是一个coordination kernel,仅仅提供一些简单的API,分布式应用的开发者再根...
2016-03-08 10:05:46
153
原创 redis
1 背景 Redis作为内存级别的存储或缓存,为一淘玩客(http://wanke.etao.com) 提供了Feed流,计数器,精细粒度缓存功能。2013年10月份上线,逐渐成为系统中重要的组成部分,我们已经将Redis集群抽象成为了一淘Redis平台级别的服务。 一淘Redis平台上线2年多的时间,我们遇到了很多问题。例如网络抖动,主从同步,机器宕机,节点迁移,内...
2016-03-08 10:05:18
190
原创 NIO的理解
基础概念• 缓冲区操作缓冲区及操作是所有I/O的基础,进程执行I/O操作,归结起来就是向操作系统发出请求,让它要么把缓冲区里的数据排干(写),要么把缓冲区填满(读)。如下图• 内核空间、用户空间 上图简单描述了数据从磁盘到用户进程的内存区域移动的过程,其间涉及到了内核空间与用户空间。这两个空间有什么区别呢? 用户空间就是常规进程(如JVM)所在区域,用户空间是非特权区域,如不能直接访问硬件设备...
2016-03-08 10:04:52
160
原创 数据库设计规范
MySQL库表设计规范表设计1) 表必须定义主键,默认为ID,整型自增,如果不采用默认设计必须咨询DBA进行设计评估2) ID字段作为自增主键,禁止在非事务内作为上下文作为条件进行数据传递3) 禁止使用外键,触发器,存储过程4) 多表中的相同列,必须保证列定义一致5) 表默认使用InnoDB,国内表字符集默认使用gbk,国际默认使用u...
2016-03-07 19:22:33
236
原创 网络分析 -tcp
引言在上文的TCP优化背景和架构方案当中,我们提到过aeproxy这个应用以及他的职责,他是一个域名代理的应用,负责将对应域名的url经过分析、代理转发给相应的业务系统去处理;在这篇文章里,与大家分享一些在构建和实测aeproxy这种反向代理应用时,遇到的问题和对应的解决方案;反向代理系统分析关键消耗定位在实测开始之前,先针对这个应用的消耗做一下简单的分析;分析的思路与上文...
2016-03-07 18:20:51
211
原创 diamond源码学习总结
客户端:一、 client获取server地址 diamond-client在使用时没有指定server地址的代码,地址获取对用户是透明的。 server地址存储在一台具有域名的机器上的HTTP server中,我们称它为地址服务器,diamond-client使用前需要在本地进行正确的域名绑定,启动时它会根据域名绑定,去对应环境的地址服务器上获取diamond-server地址列...
2016-03-07 18:20:32
990
原创 eagle-eye介绍
简介淘宝现在是一个由很多个应用集群组成的非常复杂的分布式系统。这些应用里面主要有处理用户请求的前端系统和有提供服务的后端系统等。这些应用之间一般有RPC调用和异步消息通讯两种手段,RPC 调用会产生一层调一层的嵌套,一个消息发布出来更会被多个应用消费,另外,应用还会访问分库分表的数据库、缓存、存储等后端,以及调用其他外部系统如支付、物流、机彩票等。请试想一下,现在淘宝一个买家点击下单按...
2016-03-07 18:19:03
7004
原创 精卫原理
精卫提供如下功能:内置多种复制任务:解析MySQL的binlog到数据库(MySQL、Oracle),解析MySQL的binlog到Meta消息中间件。保证数据不丢如果有多个消费者,能够保证一个消费者挂掉或很慢,其他消费者不会受到影响。支持用户自定义复制任务:用户可以根据具体业务需求自由定制Extractor和Applier,就可以很方便地创建的新的复制任务。自定义任务...
2016-03-07 18:11:32
2074
原创 JVM对外内存完全解读
前言本系列文章都是基于Hotspot/JDK源码,从源码角度来分析我们常见的JVM参数,Java概念以及对应的实现原理及玩法等,希望从根本上来理清Java知识点,我们会不定期地分享这个系列的文章,这些文章可能源于最近碰到的问题,也可能是同学们的提问,甚至有可能是我们突然想到的话题等,如果大家有想了解的方面,也可以和我们团队同学联系,有些东西我们现在可能也不一定清楚,但是我们非常愿意花时间去...
2015-11-30 17:32:07
358
原创 JVM源码分析之FinalReference完全解读
概述JAVA对象引用体系除了强引用之外,出于对性能,可扩展性等方面考虑还特地实现了四种其他引用:SoftReference、WeakReference、PhantomReference、FinalReference,本文主要想讲的是FinalReference,因为zprofiler在分析一些oom的heap的时候,经常能看到 java.lang.ref.Finalizer占用的内存大小远...
2015-11-30 17:31:45
158
原创 Java性能分析工具介绍
一、总体介绍 二、命令行工具 1、jps 类似于ps,列出正在运行的虚拟机进程。显示如下内容:虚拟机执行主类、LVMID(非常重要,其他命令都 需要输入该id) 命令格式: jps[ options] VMID = [p...
2015-11-30 17:31:30
218
原创 Hadoop学习分享----SequenceFile 和MapFile
前言: 上文介绍了Hadoop的IO序列化,大家应该可以知道其实Hadoop很多的设计也是专门为了MapReduce编程框架服务的,除了序列化还有专门的文件类:SequenceFile和MapFile,其中,MapFile是经过排序并带有索引的SequenceFile,而SequenceFile也是我们数据仓库原来在云梯1上最通用的数据文件,下面我将详细介绍下这两个文件类:一、Se...
2015-11-30 17:30:36
226
原创 Hadoop学习分享-----Shuffle过程
前言:MapReduce为了确保每个reducer的输入都按键排序。系统执行排序的过程-----将map的输出作为输入传给reducer 称为shuffle。学习shuffle是如何工作的有助于我们理解mapreduce工作机制。shuffle属于hadoop不断被优化和改进的代码库的一部分。从许多方面看,shuffle是mapreduce的“心脏”,是奇迹出现的地方。Shuffle过...
2015-11-30 17:30:22
95
原创 Hadoop学习分享----Hadoop I/O序列化
一、关于序列化: 序列化,可以存储“活的”( 只生存在内存里,关机断电就没有了,一般只能由本地的进程使用,而不能被发送到网络上的另外一台计算机)对象,可以将“活的”对象发送到远程计算机。 而把“活的”对象序列化,就是把“活的”对象转化成一串字节,而“反序列化”,就是从一串字节里解析出“活的”对象。于是,如果想把“活的”对象存储到文件,存储这串字节即可,如果想把“活的”对...
2015-11-24 10:39:06
216
原创 Hadoop学习分享----入门概要介绍
一、什么是Hadoop?基于2003年google发表Map/Reduce 和 Google File System(GFS)论文研发。用java实现的HDFS(Hadoop分布式文件系统)+Map/Reduce(并行编程计算处理框架)。对大量数据进行分布式处理的软件框架。 二、Hadoop的优势 1、高可靠性:HDFS假设计算元素和存储会失败,因此它维护多...
2015-11-24 10:38:14
126
原创 JVM源码分析之SystemGC完全解读(转)
前言本系列文章都是基于Hotspot/JDK源码,从源码角度来分析我们常见的JVM参数,Java概念以及对应的实现原理及玩法等,希望从根本上来理清Java知识点,我们会不定期地分享这个系列的文章,这些文章可能源于最近碰到的问题,也可能是同学们的提问,甚至有可能是我们突然想到的话题等,如果大家有想了解的方面,也可以和我们团队同学联系,有些东西我们现在可能也不一定清楚,但是我们非常愿意花时间去了...
2015-05-09 14:17:40
202
原创 深入浅出ClassLoader(转)
你真的了解ClassLoader吗?这篇文章翻译自zeroturnaround.com的 Do You Really Get Classloaders?(http://zeroturnaround.com/rebellabs/rebel-labs-tutorial-do-you-really-get-classloaders/4/) ,融入和补充了笔者的一些实践、经验和样例。本文的例子比...
2015-05-09 14:04:52
173
原创 java并发设计模式
一、多线程程序设计模式的评量标准 1、安全性-不损坏对象 n 对象的字段、状态出现并非预期的情况就是不安全对象n 1个以上的线程使用而不危及安全性就是线程安全的类n ArraList与Vector JDK中就有很多类似这样的非线程安全及线程安全的类,必须针对不同的场景加以利用。在多线 程环境 下,使用线程安全的类可以保证...
2015-03-09 19:42:48
112
原创 JDK8之lambda表达式
官方介绍:Lambda expressions are a new and important feature included in Java SE 8. They provide a clear and concise way to represent one method interface using an expression. Lambda expressions a...
2015-02-28 16:07:51
128
原创 spring架构分析(二)
1、从FileSystemAppllicationContext分析Spring对IOC容器的初始化过程其类继承体系如下: 通常会调用refresh() 方法,它是IOC容器才初始化的入口。首先会去获取一个beanFactory,实际上为DefaultListableBeanFactory。它持有beanDefinitionMap,里面存储上一节提到的BeanDefinition,同时还有...
2014-09-21 10:28:28
130
原创 tomcat源码分析
1、运行环境tomcat 版本:8.0.x编译工具:ant运行IDE:idea13.1 2、tomcat架构组成如下图所示: Server: 其实就是BackGround程序, 在Tomcat里面的Server的用处是启动和监听服务端事件(诸如重启、关闭等命令。 Service: 在tomcat里面,service是指一类问题...
2014-09-21 10:23:27
160
原创 java编程那些年常见的问题
1、Array 与 ArrayList的转化 通常情况下,数组转list,我们会用这样的方式去转换。List<String> list = Arrays.asList(arr); 最终会得到一个ArrayList,但是这不是一个java.util.ArrayList的类对象,而是java.util.Arrays.ArrayList内部类对象,而它只有...
2014-08-20 20:03:21
117
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人