Weakyon Blog

Weakyon

对强一致性模型的思考

最近在完善强一致性的存储系统的时候,发现对强一致性的理解不够透彻,步入了误区 强一致性存储系统的简单理解和定义 强一致性的理解: resp返回给客户端之前,保证所有节点的内容都一致。 只要保证存储系统,在同步追加过程中强一致性,那么就能保证各个节点也为强一致性 至于是P2P系统还是主从系统,是如何的回滚机制,都不是强一致性考虑的内容。 存储系统的理解: 简单的分为KV存储系统和...

golang中的协程上下文

在使用grpc的时候,对通信协议有着调用链追踪的需求 这部分要封装进框架,对使用方透明,因此协程上下文(Goroutine Local Storage)的用法顺理成章 但是搜索了些资料,发现golang并没有gls google提供的解决方法是使用golang.org/x/net/context包来传递上下文信息 一 google的设计理念:context // A Context...

主从系统的实现

这是GPRC+ETCD服务发现的一种变种实现 在服务端代码的封装上有很大的区别,一个简单的服务发现系统中,服务端之间的状态互不影响 在主从系统中,主需要知道从的IP来向从复制数据(或者反过来从需要知道主的IP来拉取数据),当主挂了,需要选举一台从来切换成主 一 服务发现的变种实现 在我的实现中,将这种服务发现设计为selecter类,该类是没有grpc代码的,是对ETCD的一个封...

grpc的使用

一 安装 先安装protobuf的C库 然后安装protoc工具 go get -u github.com/golang/protobuf/proto go get -u github.com/golang/protobuf/protoc-gen-go 最后安装gRPC-go go get google.golang.org/grpc 二 使用 首先写一个proto协议文...

做迁移的一些体会

难点: 最近公司做用户数据迁移,4TB的量,租借了20Gb的带宽,完整迁移需要25天,给的迁移期只有30天,整个迁移过程的容错性和可靠性要非常强 另外由于数据的特殊性,用户数据的错乱比起迁移失败等等无疑是更严重的问题,所以迁移过程要保证强独立性 然而迁移过程的开发时间只有5天,测试时间5天,非常仓促(实际上线后确实遇到不少问题,又花了5天才全部解决) 分析和解决: 同事给的建议是迁...

fastdfs和ceph对比

需求是图片,视频等文件的存储 属于少写多读的场合,修改操作较少。文件粒度是大小文件都有。 一 fastdfs 先谈谈fastdfs,我在公司已经应用了两年了,对他的基本特性比较熟悉,在这种场合下有这些优缺点 优点: 1 机器配置要求低。毕竟号称“穷人的解决方案不是白来的”。不管是上传下载,同步恢复,都对机器的负载要求非常低。 2 上传速度快。因为是弱一致性模型,上传不需要强写...

golang http上传文件的用法以及对官方库的零拷贝优化

golang的http上传文件的实现细节严格遵循了multipart/form-data的RFC1867规范,细节网上已经分析了很多了 本篇只是讨论golang上如何使用官方库实现的框架 客户端上传很简单,利用”mime/multipart”官方库即可完成上传 可以看到这里上传文件时全部加载在内存的bodyBuf字符数组中,所以这里只是上传小文件,大文件这么上传会写爆内存 ...

fastdfs客户端go语言实现细节

首先是轮子地址: https://github.com/tedcy/fdfs_client 最近用go做项目,要用到fastdfs 看了下github上star最多的fastdfs go客户端https://github.com/weilaihui/fdfs_client,稍微看了下感觉不太好。 首先是4个issue全是opened 看了下其中一个说连接泄漏的,看了代码,在发送...

codis迁移方案分析

codis在迁移方案上下了不少功夫,我认为codis和twemproxy最大的区别之一是: codis是面向slot的管理,而twemproxy只是面向redis后端的管理 codis迁移是由Topom结构体的SlotCreateAction方法开始的,这个方法也许叫做SlotMoveToGroupCreateAction更加容易让人理解 这个方法需要两个参数,slot id以及gro...

初识GO语言

记录下踩到的坑 一 接口 package main import ( ...