Fade Temple
@小差小差- Posts
- Categories
- Galleries
- Dixit
-
Feb 10, 2019
游神
春节四天游神,还记得上一次是在11年前
Read More -
Sep 26, 2018
Raft论文翻译
Raft是用来管理日志复制的一种一致性算法。他和(multi-)Paxos算法在结果和效率上一致,但整体结构不同,这使得Raft更容易理解,也更容易构建实际的系统。为了增强理解性,Raft将一致性算法分成了几个关键的部分,例如领导者选举,日志复制,安全性,并且他强制实行了一些更严格的一致性策略来减少需要考虑的状态。从学生学习调研的结果上显示Raft比Paxos更容易学习。Raft同时还提供了修改集群成员配置的机制,他使用了一种重叠多数成员的算法来保证安全性。
Read More -
Sep 11, 2018
libcurl对域名含有多个ip时的超时重试策略
缘起 一夜报警。 某一个服务的组件panic了,赶紧起来重启了对应的组件,并让负责这个组件的同事统计一下业务上调用这个服务失败的统计,看看是否需要补数据。 同事给的反馈是没有发现有请求异常,业务这边不受影响! 这一点都不科学,我翻看了业务上的代码,并没有重试的逻辑,对应的DNS也没有做过调整。 难道DNS自动调整了?难道PHP自动进行了重试吗? 我用脚趾头想了一下,DNS不可能会自动调整,他连我开的端口都无法感知,怎么能够自动调整呢? 所以那就是PHP的curl库有重连的逻辑,或者是libcurl有重连的逻辑了! 为了验证这点,我搞了个域名重现对应的场景。 再现现场 找了个域名 example.huajiao.com,解析到的10.143.153.63,10.139.230.68这两个ip上,dig结果如下: ➜ ~ dig example.huajiao.com ; <<>> DiG 9.10.6 <<>> example.huajiao.com ;; global options: +cmd ;; Got answer: ;;...
Read More -
May 23, 2018
Docker的实际使用
原理 docker使用Union FS作为分层镜像技术的基础。具体的, 在ubuntu上使用aufs,在centos下使用的是devicemapper。而已经打入Linux内核的Overlay FS也已经得到docker支持。 Linux Namesapce为容器间提供了环境隔离,而Linux CGroups为容器间的CPU、内存等资源使用进行隔离和分配。 docker镜像 Docker Registry 注意Docker Registry与Repository的区别,Repository是具体的镜像,称之为仓库名。具体的版本号称之为标签(tag),格式为Respository:Tag,标识一个镜像。 如ubuntu:16.04,仓库名为ubuntu,标签为16.04。如果没有标签,则默认为latest标签。 Docker常用的Registry为docker hub,也可以自己使用Docker Registry搭建私有的仓库。 Docker Registry只提供了api实现,可以使用第三方的VMWare Harbor或者Sonatype Nexus来搭建图形界面。 获取镜像 加速镜像 官方中国、 Dao加速器 从docker hub上获取镜像 docker pull ubuntu...
Read More -
Apr 29, 2018
使用gRPC创建简单聊天程序
作为一篇gRPC调研的总结,本篇主要介绍了gRPC在go语言上的使用方式,并着重记录了如何使用gRPC创建一个简单的聊天程序。 gRPC介绍 gRPC是Google开源的一款远程进程调用(RPC)框架。它使用http/2传输协议,使用Protocol Buffer作为编码协议。 这使得框架本身就带有全双工,消息压缩,节省带宽,跨语言等特性。 环境准备 在安装好go语言环境的情况下,还要额外安装以下工具和库。 获取gRPC库 go get -u google.golang.org/grpc 安装Protocol Buffer v3相关工具 下载protoc编译工具 可以在github上下载现成的二进制包。 解压,并将protoc命令工具移入PATH环境变量中。 下载go语言的protoc插件 protoc需要对应语言的插件才能把pb文件转换成对应的语言,所以下载完protoc之后,需要下载pb的go语言插件: go get -u github.com/golang/protobuf/protoc-gen-go 同样,将protoc-gen-go加入到PATH环境变量。 pb文件定义 简单例子 pb中可以使用service关键字定义对应的RPC服务集合,并使用rpc关键字定义对应的方法名、接收参数和返回参数; 例如,我们要定义聊天服务,并定义一个交换姓名的RPC接口,可以定义如下pb文件: service...
Read More