No commit activity in last 3 years
No release in over 3 years
用于整合服务集群接口,方便客户端调用; 调用方式包含一致性哈希逻辑,轮询逻辑; 支持绑定zookeeper,同步集群配置
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

~> 1.1
 Project Readme

#consistent-cluster

用于整合服务集群接口,方便客户端调用

调用方式包含一致性哈希逻辑,轮询逻辑

支持绑定zookeeper,同步集群配置

安装

$ gem install consistent-cluster

使用说明

###一、 zookeeper自动同步集群

# -*- coding: utf-8 -*-

require "zk"
require "consistent-cluster/sync-client"

all_config = {

  #必填 zookeeper的ip+端口信息
  zookeeper_service: "127.0.0.1:2181",

  #必填 zookeeper指定目录
  zookeeper_path: "/test",

  #必填 单个服务对象的创建Proc,node_content为zookeeper节点中存放的值
  create_proc: Proc.new { |node_content|

    #比如zookeeper节点中存放的是json字符串 
    app_info = JSON.parse(node_content) 

    #比如thrift客户端
    ThriftClient.new("servers" => "#{app_info["host"]}:#{app_info["port"]}",
                    "multiplexed" => app_info["serviceNames"].length > 1,
                    "protocol" => 'binary',
                    "transport" => 'socket')
  },

  #选填 可以补充一些删除服务器时的操作,比如客户端需要手动断开连接操作,client为上面create_proc的返回值
  destroy_proc: Proc.new { |client|
    client.destroy
  }, 

  #选填 同步zookeeper信息之后,会调用这个proc,info为同步到的zookeeper信息,可以打印出info方便debug。一般不需要配置。
  after_sync_proc: Proc.new { |info|
    puts info.inspect
  }, 

  #选填 一致性哈希环中,每个服务的虚拟节点数量,默认值: 3
  consistent_hashing_replicas: 100
}

#zookeeper指定目录结构说明: 目录中的每一个节点代表一个独立的服务器,节点名称作为服务器名称,节点的内容作为服务器的配置信息


#创建实例
ProfileServices = ConsistentCluster::SyncClient.new(all_config)

#使用shard方法调度集群
#当传key值时,将会使用一致性哈希调度方式,这种方式下相同的key将会访问同一台服务器
key = "string,integer,boolen,object or anything"
ProfileServices.shard(key).get_user_basic_info(1000018)

#当不传key值时,将会使用轮询调度方式
ProfileServices.shard.get_user_basic_info(1003231)

###二、直接配置(自定义配置,不依赖zookeeper服务)

# -*- coding: utf-8 -*-

require "consistent-cluster/client"

#定义服务器集群hash
cluster = {}
["127.0.0.1:9091","127.0.0.1:9092","127.0.0.1:9093"].each do |iport|
  app_name = iport
  cluster[app_name] = ThriftClient.new("servers" => iport,
                  "multiplexed" => false,
                  "protocol" => 'binary',
                  "transport" => 'socket')
end

all_config = {

  consistent_hashing_replicas: 100, #选填 一致性哈希环中,每个服务的虚拟节点数量,默认值: 3

  cluster: cluster                  #必填 服务器集群hash
}

#创建实例
ProfileServices = ConsistentCluster::Client.new(all_config)

#使用shard方法调度集群
#当传key值时,将会使用一致性哈希调度方式,这种方式下相同的key将会访问同一台服务器
key = "string,integer,boolen,object or anything"
ProfileServices.shard(key).get_user_basic_info(1000018)

#当不传key值时,将会使用轮询调度方式
ProfileServices.shard.get_user_basic_info(1003231)

yeah.happy coding:)