怎么实现一个分布式kv系统-2-静态分区

摘要

本节要实现的有3点

  • 解析toml文件
  • 计算key的hash值
  • 将请求路由到对应的shard

编程实现

1. 定义&解析toml规则文件

定义sharding.toml文件

[[shards]]
name = "Moscow"
id = 0

[[shards]]
name = "Minsk"
id = 1

[[shards]]
name = "Kiev"
id = 2

导入解析toml的包

添加configFile参数解析

在main中读取配置文件

import (
	"github.com/BurntSushi/toml"
)

var (
	configFile = flag.String("config-file", "sharding.toml", "The configuration file")
)

func main() {
   
	flag.Parse()

	var c config.Config
	if _, err := toml.DecodeFile(*configFile, &c); err != nil {
   
		log.Fatalf("failed to decode config file(%q):%v", *configFile, err)
	}
}

2. 添加config模块

创建config/config.go

定义Config & Shard结构

package config

type Shard struct {
   
	Name string
	Id   string
}

type Config struct {
   
	Shards []Shard
}
3. 指定shard

先不自动shard,先手动指定shard

添加shard参数解析

检查shard是否存在

确认shard的id

// main.go
var (
  shardName   = flag.String("shardName", "Moscow", "The name of the shard")
)

ok, shard := c.ExistsShard(*shardName)
if !ok {
   
  log.Fatalf("shard %v not exists", shardName)
}

// config.go
func (c *Config) ExistsShard(name string) (bool, Shard) {
   
  var rc Shard
  for _, shard := 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值