月份:2016年12月

ZAB协议和Paxos算法

前言 在上一篇文章Paxos算法浅析中主要介绍了Paxos一致性算法应用的场景,以及对协议本身的介绍;Google Chubby是一个分布式锁服务,其底层一致性实现就是以Paxos算法为基础的;但这篇文件并不是介绍Chubby,而是介绍了一个和Chubby拥有类似功能的开放源码的分布式协调服务Zookeeper,以及Zookeeper数据一致性的核心算法ZAB。 Zookeeper简介 Zookeeper是一个分布式数据一致性的解决方案,分布式应用可以基于它实现诸如数据发布/订阅,负载均衡,命名服务,分布式协调/通知,集群管理,Master选举,分布式锁和分布式队列等功能。Zookeeper致…

阅读全文 »

异步编程RxJava-介绍

前言 前段时间写了一篇对协程的一些理解,里面提到了不管是协程还是callback,本质上其实提供的是一种异步无阻塞的编程模式;并且介绍了java中对异步无阻赛这种编程模式的支持,主要提到了Future和CompletableFuture;之后有同学在下面留言提到了RxJava,刚好最近在看微服务设计这本书,里面提到了响应式扩展(Reactive extensions,Rx),而RxJava是Rx在JVM上的实现,所有打算对RxJava进一步了解。 RxJava简介 RxJava的官网地址:https://github.com/ReactiveX/RxJava, 其中对RxJava进行了一句话描…

阅读全文 »

Paxos算法浅析

前言 在文章2PC/3PC到底是啥中介绍了2PC这种一致性协议,从文中了解到2PC更多的被用在了状态一致性上(分布式事务),在数据一致性中很少被使用;而Paxos正是在数据一致性中被广泛使用,在过去十年里,Paxos基本成为了分布式领域内一致性协议的代名词。Google的粗粒度锁服务Chubby的设计开发者Burrows曾经说过:“所有一致性协议本质上要么是Paxos要么是其变体”。Paxos的提出者LeslieLamport也因其对分布式系统的杰出理论贡献获得了2013年图灵奖。 在介绍Paxos之前,先介绍一下数据一致性到底被用在什么场景中,下面以副本状态机来表述 副本状态机 在分布式环境…

阅读全文 »

Java压缩算法性能比较

前言 游戏开发中,经常在玩家进入游戏的时候进行必要的信息初始化,往往这个初始化信息数据包是相对来说还是比较大的,一般在30-40kb左右,还是有必要进行压缩一下再发送消息,刚好前段时间看过,里面列举了一些常用的压缩算法,如下图所示: 是否可切分表示是否可以搜索数据流的任意位置并进一步往下读取数据,这项功能在Hadoop的MapReduce中尤其适合。 下面对这几种压缩格式进行简单的介绍,并进行压力测试,进行性能比较 DEFLATE DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法,DEFLATE压缩与解压的源代码可以在自由、通用的压缩库z…

阅读全文 »

对协程的一些理解

协程 协程(coroutine)最早由Melvin Conway在1963年提出并实现,一句话定义:协程是用户态的轻量级的线程 线程和协程 线程和协程经常被放在一起比较;线程一旦被创建出来,编写者是无法决定什么时候获得或者放出时间片的,是由操作系统进行统一调度的;而协程对编写者来说是可以控制切换的时机,并且切换代价比线程小,因为不需要进行内核态的切换。 协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力, 但是可用通过多个(进程+多协程)模式来充分利用多CPU。 协程另外一个重要的特点就是:协程是作用在用户态,操作系统…

阅读全文 »

Java调用Lua

前言 最近一款游戏开发中,客户端基于lua语言开发,为了方便客户端调用原型数据,所有的原型数据都以lua表格的形式存放;对于服务器端的java语言就需要解析出lua中的数据, 转换为java对象。 桥接的选择 网上大致搜索了一下,用的比较广泛的是下面这两款: 1.luajava 官网:http://luaforge.net/projects/luajava/ 2.luaj 官网:http://www.luaj.org/luaj/3.0/README.html 看luajava的官网上支持的lua写的是lua5,lua现在的最新版本已经到5.3了,应该是好久没有更新了,同时也可以看github上…

阅读全文 »

Protostuff序列化分析

前言 最近项目中需要将业务对象直接序列化,然后存数据库;考虑到序列化、反序列化的时间以及生产文件的大小觉得Protobuf是一个很好的选择,但是Protobuf有的问题就是需要有一个.proto的描述文件,而且由Protobuf生成的对象用来作为业务对象并不是特别友好,往往业务对象和Protobuf对象存在一个互相转换的过程;考虑到我们仅仅是将业务对象直接序列化到数据库,发现Protobuf在这种情况下并不是特别的好; 这时候发现了Protostuff,protostuff不需要依赖.proto文件,可以直接对普通的javabean进行序列化、反序列化的操作,而效率上甚至比protobuf还快…

阅读全文 »

2PC/3PC一致性协议

前言 在上一篇文章从ACID到CAP/BASE中我们介绍了CAP理论,其中最重要的一点就是一个分布式系统不可能同时满足一致性、可用性和分区容错性这三个基本需求,最多只能同时满足其中的两项;而一般都会在一致性和可用性之间进行权衡,于是产生了一系列的一致性协议。 在介绍有哪些一致性协议之前,我们先来看看一致性模型 一致性模型 一致性模型大体上可以划分为2个大类:强一致性和弱一致性 弱一致性可以划分为:最终一致性,因果一致性,读你所写一致性,会话一致性,单调读一致性,单调写一致性 其中最常见的两项就是:强一致性和最终一致性 强一致性:新的数据一旦写入,在任意副本任意时刻都能读到新值 最终一致性:当你…

阅读全文 »