go常见错误(译)
1.大括号不能另起一行
package main
import "fmt"
func main()
{ //error, can't have the opening brace on a separate line
fmt.Println("hello there!")
}
2.变量声明未使用(全局变量除外)
package main
var gvar int //not an error
func main() {
var one int //error, unused variable
two := 2 //error, unused variable
var three int //error, even t...
Actor和CSP模型
概念
Actor和CSP都是并发模型,akka/erlang采用actor,而go则采用csp,两者都是通过消息传递来进行线程通信,而非内存共享,内存共享必然要引入锁的概念增加了不少复杂度
Actor
主题是一个个actor,也就是一个个处理单元,每个actor有 state,behavior mailbox三部分组成
state actor变量信息,actor自己管理,无需锁
behavior actor计算单元,根据接收的消息改变状态
mailbox actor之间的通信桥梁,本质是一个队列,发送方放到接受方邮箱,接受方一次读取,邮箱理论要无穷大
每个actor占用内存很少,在处理过程只会阻塞自我,不会阻塞别人,所以能获得极高的并发
CSP
actor和actor...
Booklists
计算机系统与网络
《图灵的秘密:他的生平、思想及论文解读》
《计算机系统概论》
《深入理解Linux内核》
《深入Linux内核架构》
《TCP/IP详解 卷1:协议》
《Linux系统编程(第2版)》
《Linux内核设计与实现(第3版)》
《深入理解计算机系统(原书第2版)》
《计算机程序的构造和解释(原书第2版)》
《编码:隐匿在计算机软硬件背后的语言》
《性能之颠:洞悉系统、企业与云计算》
《UNIX网络编程 卷1:套接字联网API(第3版)》
《UNIX网络编程 卷2:进程间通信》
《Windows核心编程(第5版)》
《WireShark网络分析就这么简单》
《WireShark网络分析的艺术》
编程通用
《编程原本》
《代码大全》
《UNIX编程艺术》
《代码整洁...
Y Combination
原文链接(http://shellfly.org/blog/2015/01/07/yi-the-y-combinator-slight-return/)
How to Succeed at Recursion Without Really Recursing
Tiger got to hunt,
Bird got to fly;
Lisper got to sit and wonder, (Y (Y Y))?
Tiger got to sleep,
Bird got to land;
Lisper got to tell himself he understand.
— Kurt Vonnegut, modified by Darius Bacon
介绍
自从最近写了一篇关于Y...
Raft
目的
和paxos一样为了解决分布式一致性问题,但是为了容易实现和理解,将问题简化,核心是选主,日志同步
角色
leader 响应客户端请求,生成日志,通知follower同步日志,当日志同步到半数节点后,提交日志
follower 持久化leader的日志,在leader通知提交日志后,提交日志
candidate 选举中临时角色
leader在任期(term)内管理集群,leader周期性地发送heartbeat给follower,follwer选举超时时间内没有收到leader的heartbeat就会等待一段随机时间(防止活锁)
然后发起选举
follower 首先term +1 ,变成candidate,先给自己投一票,给其他集群发送拉票,超过半数则成为新...
docker开发环境实践
# !/bin/bash
function run_docker(){
if [[ $daemon = '-d' ]]
then
echo "run daemon"
docker rm -f $(docker ps -a | awk '/'$name'/ {print $1}')>/dev/null 2>&1
docker run --name $name -d -p ${port[$name]}:80 -v /data1/www/laravel/cloud/$name/api-service-
hms:/data1/www/codedir/api-se...
Paxos
CAP
CAP理论是分布式设计的基础,一句话就是一致性,高可用和分区容忍性(网络分区)三者取其二
为了提高容灾,系统会部署在不同地方的机房,比如上海北京,如果上海机房网络故障,那么北京机房如果能够正常提供服务,那就必须实时将上海机房和北京机房数据进行同步保证数据是一致的,如果数据量很大,那么在同步数据的过程中,系统就没法正常响应请求,也就无法保证高可用
Paxos
这里不考虑消息的篡改,存储都是可靠的,没有数据丢失和错误,否则是拜占庭将军问题
classic paxos
一个实例(确定一个值)写入需要2轮rpc
multi paxos
一个实例(确定一个值)写入需1轮rpc(做了合并rpc)
fast paxos
没有冲突需要1轮rpc , 有冲突需要2轮
主要...
2PC/3PC
2PC
其实2pc也是一种分布式一致性算法,但是存在阻塞,单点问题,同时也有简单的优点
角色
参与者和协调者
执行分两段
提交事务请求 (propose)
协调者发送事务给所有参与者,询问所有参与者是否可以执行事务,参与者执行事务操作,undo redo写入日志,向协调者反馈结果
执行事务
所有参与者都同意执行,那么协调者发送正式提交请求,参与者正式提交事务,并向协调者发送ack
只要有一个参与者发送了失败,协调者向所有参与者发送回滚请求,参与者完成回滚之后在发送ack,事务完成
问题
同步阻塞
过程是同步的,会阻塞
单点
全程靠协调者,协调者如果挂了就没了
3PC
改进2pc,分三段,询问,然后再锁资源,最后真正提交
第一阶段:CanC...
66 post articles, 9 pages.