etcd
Ethan3014
头发多睡眠足有妹子的程序员
展开
-
raft
共识算法concensus algorithm是指在分布式系统中,多个节点对某个值达成一致,各个节点总是返回一致对结果,并且只要大于一半对节点还存活,就能正常工作,超过一半节点挂掉会停止工作但绝不会返回不一致但值,一旦达成一致,这个消息就不会丢失状态机和日志raft集群中,每个node都是一个状态极,日志就是一系列但命令,初始时候状态机处于empty状态,每读取一条日志状态机就更改自身但状态,所以只要保证node但日志序列相同,那么他们的状态就一定是相同的。在etcd这种情况下,状态其实就是kv ma原创 2020-10-30 13:11:31 · 163 阅读 · 0 评论 -
海量读请求架构
需求在很多的场景,比如某个核心服务,如热门视频或者实时排名等等,都存在大量读的场景。架构上通用的做法是读写服务分离,写服务部署少量,有存储写入瓶颈,读服务一般可以水平扩展无热点key写: mysql + redis读:redis有热点key写: mysql + redis + etcd读:redis + etcd + 本地缓存那么本地缓存如何更新呢?简单的做法是设置本地超时时间,但是这样会带来数据的不一致,因为多个读进程的本地缓存副本数据不一致。轮询+超时的策略是很low的,可以利用etcd原创 2020-07-19 14:27:32 · 1525 阅读 · 0 评论 -
etcd源码导读20191018
embed.StartEtcd日志配置Logging: --logger 'capnslog' Specify 'zap' for structured logging or 'capnslog'. [WARN] 'capnslog' will be deprecated in v3.5. --log-outputs 'default' Specify 'stdout'...原创 2019-10-18 18:51:52 · 329 阅读 · 0 评论 -
etcd读取的serializable和linearizable选项
WithSerializableWithSerializable makes ‘Get’ request serializable. By default, it’s linearizable. Serializable requests are better for lower latency requirement.serializable可以使延迟更小,那么是什么原理呢?Lineari...原创 2019-10-14 19:03:22 · 1667 阅读 · 0 评论 -
etcd源码导读2
etcdmain/main.gofunc Main() { checkSupportArch() if len(os.Args) > 1 { cmd := os.Args[1] if covArgs := os.Getenv("ETCDCOV_ARGS"); len(covArgs) > 0 { args := strings.Split(os.Getenv("E...原创 2019-10-14 15:32:34 · 374 阅读 · 0 评论 -
etcd源码导读1
下载源码github注意etcd的导入路径和github地址是不相符的。导入路径:go.etcd.io/etcdbbolt也是:go.etcd.io/bbolt编译make build会在bin目录下生成etcd和etcdctl./bin/etcd --versionetcd Version: 3.5.0-preGit SHA: 3ef2ad8e1Go Version: g...原创 2019-10-14 13:02:10 · 302 阅读 · 0 评论 -
etcd技术内幕
etcd的b+树key:etcd 中的keyvalue:该值对应的多个版本号一个版本号由main version + subversion组成,main version对应的一个事务,是全局递增的,sub version对应事务中某一个操作。所以main version + subversion可以唯一确定:某个key的某个version的value值etcd中的boltdbboltdb...原创 2019-10-13 17:02:55 · 798 阅读 · 0 评论