15 iter_zc

尚未进行身份认证

关注互联网架构方向

等级
TA的排名 4k+

从ZooKeeper源代码看如何实现分布式系统(四)session管理

这篇看看ZooKeeper如何管理Session。Session相关的接口如下:Session:表示session的实体类,维护sessionId和timeout两个主要状态SessionTracker:Session生命周期管理相关的操作SessionExpier:Session过期的操作publicinterfaceSessionTrack

2016-01-29 16:57:49

从ZooKeeper源代码看如何实现分布式系统(三)高性能的网络编程

对网络编程来说,最基本的三要素是IO,协议(编解码),服务器端线程模型。这篇来看看ZooKeeper是如何实现高性能的网络程序。IO模型ZooKeeper默认提供了两种网络IO的实现,一个是Java原生的NIO,一个是基于Netty的IO。先从ServerCnxn这个抽象类看起,它表示一个从客户端到服务器端的网络连接。ServerCnxn实现了Stat服务器端统计接口,Watch

2016-01-11 17:35:42

从ZooKeeper源代码看如何实现分布式系统(二)数据的高可用存储

这篇先从数据的高可用存储说起。ZooKeeper提供了分布式的目录服务,它存储的数据相比一个分布式存储系统来说很少,它主要是用来做分布式协同操作的。但是麻雀虽小,五脏俱全,ZooKeeper也必须要提供数据的高可用存储,对数据进行备份和恢复,以防出现服务器宕机导致数据丢失的情况。   高可用的数据存储有一个比较通用的解决方案,就是数据文件+日志文件的方式。比如传统数据库中的数据文件+

2016-01-08 11:22:23

从ZooKeeper源代码看如何实现分布式系统(一)概述

最近看了几篇介绍如何设计高可用,高新能的分布式系统的文章,从设计的角度来看很多共性的模式,比如Master-Slave,CAP的3个维度,负载均衡,存储,数据同步,失效转移,集群的选主策略,心跳监控,高性能的网络编程,日志,可伸缩性等等。这些名词解决的是分布式系统的核心问题。光从设计上来说比较容易,但是实现起来很有难度。实际上我们有一个很好的实现例子可以参考学习,那就是ZooKeeper。ZooK

2016-01-02 10:59:54

聊聊高并发(四十四)解析java.util.concurrent各个组件(二十) Executors工厂类

Executor框架为了更方便使用,提供了Executors这个工厂类,通过一系列的静态工厂方法,可以快速地创建相应的Executor实例。只有一个nThreads参数的newFixedThreadPool方法会创建一个ThreadPoolExecutor,corePoolSize和maximumPoolSize都是nThreads,并且keepAliveTime为0表示不会设置过期时

2015-07-22 16:10:04

聊聊高并发(四十三)解析java.util.concurrent各个组件(十九) 任务的定时执行和周期执行

ExecutorService最后一块是定时/周期执行任务的接口ScheduledExecutorService。这篇说说ScheduledExecutorService相关的内容。ScheduledExecutorService接口扩展了ExecutorService接口,在ExecutorService的生命周期管理,异步执行任务,批量执行任务的基础上,扩展了定时/周期执行任务的能力。

2015-07-21 16:15:49

聊聊高并发(四十二)解析java.util.concurrent各个组件(十八) 任务的批量执行和CompletionService

上一篇讲了ExecutorService关于任务的异步执行和状态控制的部分,这篇说说关于任务批量执行的部分。ExecutorSerivce中关于批量执行的

2015-07-20 15:16:48

聊聊高并发(四十一)解析java.util.concurrent各个组件(十七) 任务的异步执行和状态控制

这篇接着说ExecutorService相关内容。聊聊高并发(三十九)解析java.util.concurrent各个组件(十五)理解ExecutorService接口的设计这篇说了ExecutorService接口扩展了Executor接口,在执行任务的基础上,提供了执行框架生命周期的管理,任务的异步执行,批量任务的执行的能力。AbstractExecutorService抽象类实现了Exec

2015-07-17 15:17:23

聊聊高并发(四十)解析java.util.concurrent各个组件(十六) ThreadPoolExecutor源码分析

ThreadPoolExecutor是Executor执行框架最重要的一个实现类,提供了线程池管理和任务管理是两个最基本的能力。这篇通过分析ThreadPoolExecutor的源码来看看如何设计和实现一个基于生产者消费者模型的执行器。生产者消费者模型生产者消费者模型包含三个角色:生产者,工作队列,消费者。对于ThreadPoolExecutor来说,1.生产者是任务的提

2015-07-16 16:27:08

聊聊高并发(三十九)解析java.util.concurrent各个组件(十五) 理解ExecutorService接口的设计

上一篇讲了Executor接口的设计,目的是将任务的执行和任务的提交解耦,可以隐藏任务的执行策略。这篇说说ExecutorService接口。它扩展了Executor接口,对Executor的生命周期进行管理,并进行了进一步的扩展。Executor负责执行任务。它的生命周期有3个:运行,关闭和已终止。在运行的任何时刻,有些任务可能已经完成,有些可能正在运行,有些可能正在队列中等待执行

2015-06-26 17:22:40

聊聊高并发(三十八)解析java.util.concurrent各个组件(十四) 理解Executor接口的设计

JCU包中除了一系列的同步类之外,就是Executor执行框架相关的类。对于一个执行框架来说,可以分为两部分1.任务的提交2.任务的执行。Executor接口设计的目的是专注于任务的执行,和任务的提交解耦。Executor接口封装了任务执行的细节,比如如何使用线程,是否定时执行等等。Executor接口很简单,就一个execute方法。publicinterface

2015-06-25 17:33:15

Flume NG源码分析(七)ChannelSelector

前几篇介绍了FlumeNGSource组件的基本情况,接下来看看Channel相关的组件,Channel相关组件有:1.Channel2.ChannelSelector3.Interceptor/InterceptorChain4.ChannelProcessor5.Transaction这篇说说ChannelSelector之一的Replicat

2015-06-18 17:07:06

Flume NG源码分析(六)应用程序使用的RpcClient设计

上一篇FlumeNG源码分析(五)使用ThriftSource通过RPC方式收集日志介绍了ThriftSource利用Thrfit服务ThriftSourceProtocol来收集日志。这篇说说flume-ng-sdk中提供给应用层序使用的ThriftRPCClient类,它封装了ThriftSourceProtocol服务的客户端并提供了一些优化。先看看ThriftSourceP

2015-06-17 17:39:25

Flume NG源码分析(五)使用ThriftSource通过RPC方式收集日志

上一篇说了利用ExecSource从本地日志文件异步的收集日志,这篇说说采用RPC方式同步收集日志的方式。笔者对Thrift比较熟悉,所以用ThriftSource来介绍RPC的日志收集方式。整体的结构图如下:1.ThriftSource包含了一个ThriftServer,以及一个ThriftService服务的实现。这里的ThriftService是由ThriftSourcePr

2015-06-17 16:30:30

Flume NG源码分析(四)使用ExecSource从本地日志文件中收集日志

常见的日志收集方式有两种,一种是经由本地日志文件做媒介,异步地发送到远程日志仓库,一种是基于RPC方式的同步日志收集,直接发送到远程日志仓库。这篇讲讲FlumeNG如何从本地日志文件中收集日志。ExecSource是用来执行本地shell命令,并把本地日志文件中的数据封装成Event事件流在FlumeNG中流动。它的典型配置如下,指定source类型是exec,指定Source下游

2015-06-16 16:08:00

Flume NG源码分析(三)使用Event接口表示数据流

FlumeNG有4个主要的组件:Event表示在Flume各个Agent之间传递的数据流Source表示从外部源接收Event数据流,然后传递给ChannelChannel表示对从Source传递的Event数据流的临时存储Sink表示从Channel中接收存储的Event数据流,并传递给下游的Source或者终点仓库这篇看一下Event接口表示的数据流。Source,

2015-06-16 15:53:21

Flume NG源码分析(二)支持运行时动态修改配置的配置模块

在上一篇中讲了FlumeNG配置模块基本的接口的类,PropertiesConfigurationProvider提供了基于properties配置文件的静态配置的能力,这篇细说一下PollingPropertiesFileConfigurationProvider提供的运行时动态修改配置并生效的能力。要实现动态修改配置文件并生效,主要有两个待实现的功能1.观察配置文件是否修改

2015-06-08 17:08:34

Flume NG源码分析(一)基于静态properties文件的配置模块

日志收集是互联网公司的一个重要服务,FlumeNG是Apache的顶级项目,是分布式日志收集服务的一个开源实现,具有良好的扩展性,与其他很多开源组件可以无缝集成。搜了一圈发现介绍FlumeNG的文章有不少,但是深入分析FlumeNG源代码的却没有。最近准备写一个系列分析一下FlumeNG的源码。这篇先从基础的配置模块说起。FlumeNG支持两种配置模式,一种是基于proper

2015-06-03 21:02:12

实现一个支持运行时并发修改配置生效的Configuration类

可配置性是一个好的应用程序的重要指标。我们常常需要实现类似能够运行时修改配置的功能。最近在开发一个中间层的服务程序,最终发布的方式是把代码打成jar包交给调用方使用。这个中间层服务需要一些配置信息,考虑了一下有几个基本的需求:1.在ja包中提供一个service-defalut.properties配置文件来提供全部的默认配置。这样的好处是尽量减少对调用方的侵入。调用方可以不提供额外的配置。

2015-05-08 18:00:18

用Java搭建微信公众号(二)生成access_token

当自己的程序需要访问微信的HTTP接口时,需要传递access_token作为校验的参数。access_token需要通过APPID和APPSecret秘钥来生成,有效期是7200秒,2小时。access_token最好是做成全局变量共享,然后由一个线程定时去刷新,这样可以减少access_token生成的次数,微信服务器对access_token的生成次数有限制。代码如下,首先是使用Http

2015-04-30 22:35:54

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!