前言 Lamport老爷子在这篇著名的论文中探讨了分布式系统中事件和时间的关系,并且以数学家的最敏锐的嗅觉抓住了分布式系统中的本质问题,同时引入逻辑时钟,为以后的分布式系统设计点亮了指路明灯。

Continue reading 事件和时间:Time, Clocks, and the Ordering of Events in a Distributed System 读后感

说明 ZAB 协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的一致性协议。基于该协议,ZooKeeper 实现了一种主从模式的系统架构来保持集群中各个副本之间的数据一致性。 本文从“通信协议”、“核心数据结构以及API”两方面主要描述Zookeeper中ZAB协议的具体实现,重点关注ZAB协议实现中抽象的对象以及对象之间的关联。弱化请求处理流程,因为这些会在我们描述ZAB协议中重点描述。

Continue reading ZAB协议在Zookeeper中的实现

新装的CentOS系统服务器可能设置了错误的,需要调整时区并调整时间。如下是CentOS系统使用NTP来从一个时间服务器同步。CentOS系统时间同步的步骤如下: 1. yum install -y ntpdate 2. cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 3. ntpdate us.pool.ntp.org 4. crontab -e 0-59/10 * * * * /usr/sbin/ntpdate us.pool.ntp.org | logger -t NTP 说明: 第一句是把当前时区调整为上海就是+8区,想改其他时区也可以去看看/usr/share/zoneinfo目录; 然后第二句是利用ntpdate同步标准时间; 最后是加入定时计划任务,每隔10分钟同步一下时钟

Continue reading Centos下调整系统时钟

通过一个求和(0~N)程序来对比Erlang的递归和尾递归效率并加深对尾递归的理解。 递归 #! /usr/bin/env escript main([A]) -> N = list_to_integer(A), io:format(“sum 0 – ~w = ~w~n”,[N, sum(N)]). sum(1) -> 1; sum(N) -> N + sum(N-1). 尾递归 #! /usr/bin/env escript main([A]) -> N = list_to_integer(A), io:format(“sum 0 – ~w = ~w~n”,[N, sum(N)]). sum(N) -> sum(N, 0). sum(0, N) -> N; sum(M, N) -> sum(M-1, N+M). 对比 …

Continue reading Erlang的递归

生成斐波那契数列 #! /usr/bin/env escript main([A]) -> I=list_to_integer(A), F=fac_list(I), io:format(“feribo ~w = ~w~n”,[I,F]). element(1) -> 1; element(2) -> 1; element(N) -> element(N-1) + element(N-2). fac_list(N) -> fac_list([], N). fac_list(L, 0) -> L; fac_list(L, N) -> fac_list([element(N)|L], N-1). 运行结果 dingkaideMacBook-Pro:erlang dingkai$ ./feibo 25 feribo 25 = [1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025] 求平均数 #! /usr/bin/env escript %main([L]) -> main([]) -> L = …

Continue reading Erlang入门: 几个简单小程序