摘要
本节要实现的有2点
- 解析toml文件
- 计算key的hash值
- 将请求路由到对应的shard
编程实现
1. 定义&解析toml规则文件
定义sharding.toml文件
1 | [[shards]] |
导入解析toml的包
添加configFile参数解析
在main中读取配置文件
1 | import ( |
2. 添加config模块
创建config/config.go
定义Config & Shard结构
1 | package config |
3. 指定shard
先不自动shard,先手动指定shard
添加shard参数解析
检查shard是否存在
确认shard的id
1 | // main.go |
4. 写入数据到指定shard
写入规则:hash(key) % shardCounter 就是需要写入的分片
更新Server结构,添加shardCounter&shardIndex字段
1 | // web.go |
导入计算hash的包: hash/fnv包,计算shard
更新GetHandler、SetHandler,调用getShard来获取应该写入数据的分片。
1 | // web.go |
4.获取所有节点的地址
以上虽然可以计算出分片,可以还没有办法路由给其他的分片。
首先,需要知道其他分片的地址。
其次,将信息传入到Server对象中。
接着,定义redirect函数,请求转发。
最后,改造GetHandle、GetHandle转发请求。
1 | // config.go |
5.测试
1 | get(){ |
参考资料
本节完整代码:https://github.com/YuriyNasretdinov/distribkv/tree/part2
youtube视频:https://www.youtube.com/watch?v=5VK5tAyZDxQ&list=PLWwSgbaBp9XrMkjEhmTIC37WX2JfwZp7I&index=3