写点什么

第五周总结 -- 一致性 hash

发布于: 2020 年 07 月 08 日
第五周总结--一致性hash



什么是分布式?之前说过银行类的系统,小型机不行就换中型机,中型机撑不住就换大型机,极端点说就是他们一台机器就能搞定。互联网面对的是整个网络的访问,大型机也撑不住,所以就诞生了互联网的分布式架构。用一句简单的白话来说:你得把一个大型机拆开成N台服务器也能提供正常的服务。



这里不讨论怎么拆(比如为什么要从一个单体里面拆出会员服务),假设我们现在已经拆开了,比如一个会员服务我们拆成了一个微服务集群。我们需要让用户的请求能均匀的分散到这个集群的每台机器上,我们要怎么做呢?我们就用简单的一个场景:用户注册和查询用户信息,来看看思路都有哪些。



显而易见的我们需要有一个负载均衡的东西,这个东西可以集成在请求方或者服务方。

我们有一个服务方的IP列表,第一个请求放到第一台,第二个放到第二台,第N个放到第N台,第N+1个又回到第一台,你需要维护计数和服务器的关系,处理好服务上线下线的问题。在数据量相当的时候,随机调用和权重分配也能达到和轮训计数差不多的效果。这里我们看到在调用一些服务查询之类的是没有问题的,但是如果我们是处理数据库方面呢,数据库进行了水平切分,你轮训去存储是可以让每个数据库实例的存储均衡,但是查询呢,你根据用户的唯一标识你怎么去确定用户的数据在哪个实例呢?确定不了!所以我们看到常用的RPC框架用轮训、随机、权重的方式就可以在服务间调用的比较顺畅。



所以在我看来分布式一个简单但是也特别核心的东西就是一致性Hash。在服务的前端不论是nginx,LVS还是其他的我们用轮训、随机、权重可以基本搞定访问的均衡问题,也可以让把请求的地址hash之后取模映射到固定的某台机器。在数据库存储的时候,每条数据都是有唯一标识的,唯一标识hash的值就是固定的,根据这个hash值取模找到固定数据分片存储,查询的时候也同样根据这个hash值找到数据分片获取数据。



发布于: 2020 年 07 月 08 日阅读数: 54
用户头像

还未添加个人签名 2018.03.31 加入

还未添加个人简介

评论

发布
暂无评论
第五周总结--一致性hash