基于hash算法的分流思想

阅读: 评论:0

基于hash算法的分流思想

基于hash算法的分流思想

前言

在互联网的时代,负载均衡以及机房,集群的容灾是必不可少的,这些功能的背后是软件和硬件的配合达到的效果,之前在公司实习的时候涉及到相关的分流算法,写此记录下来

背景

有两个集群A,B。A为主用机房,当A挂掉或者流量过大,可以将全部流量或者部分流量切换到B机房上,来提高服务的可用性,因为这个服务比较核心,是RPC应用,所以我决定在请求底层接口上对其应用算法

代码实现

对整型id的分流处理
func queryUserByIntId(userId int) bool {//从配置中心获取配置文件,此处代码实现逻辑就不写了list := GetConf()userId = hashInt(userId)ain(userId) {return true}return false
}
//对字符串的id分流处理
func queryUserByStrId(userId string) bool {//从配置中心获取配置文件,此处代码实现逻辑就不写了list := GetConf()id := hashString(userId)ain(id) {return true}return false
}type Collection []intfunc (collection Collection) contain(a int) bool {for value := range collection {if value == a {return true}}return false
}
//对值进行hash处理,粒度为15
func hashInt(value int) (hashValue int) {return value & 15
}//此处是伪配置,应该从配置中心动态获取开关
//根据配置的切片可可以定义0-7的时候是A,B机房各一半流量,
//全部0-15是全部走B机房,不写走A机房
func GetConf() Collection {return []int{0, 1, 2, 3, 4, 5, 6, 7,}
}//对字符串进行hash
func hashString(value string) (hashValue int) {b := []byte(value)[0]return hashInt(int(b))
}

本文发布于:2024-01-31 21:13:55,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170670684131393.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:算法   思想   hash
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23