本文简要介绍Adf.NumberServer在windows平台下的使用。
本服务常用于生成用户标识,订单标识,会话标识等场景。
1. 协议描述
服务完全兼容 memcached 文本协议, 使用支持1.2.0 或以上版本的任意一款客户端均可访问,不区分语言,本服务仅支持 set,incr,decr,get,stats 五个命令,其它命令均不受支持。
Protocol:
https://github.com/memcached/memcached/blob/1.6.0-beta1/doc/protocol.txt
根据协议:
incr 可至int64最大值,超过最大值后将会归零后循环,
decr 可至最小值0,低于0值时会保持0值,不会出现负数。
2. 键约束
本服务支持最长KEY为 250字符, 超过该长度服务将会出现异常。
本服务不支持多字节KEY, 仅支持ASCII字符。
3. 单机模式
在数据不要求安全的情况下,本服务支持单机模式。
单机模式时需要将配置文件中所有以HA:方式开始的配置禁用或删除掉。
4. 高可用模式(High-Availability)
本服务基于 adf.service 组件, 支持master/slave/witness 的高可用方式,为提高可用性,master与slave通信为实时同步而保持数据的绝对一致性。
启用HA需配置:
HA:Path 高可用配置数据存储路径
HA:Node1 默认的master服务
HA:Node2 默认的slave服务
HA:Node3 默认的witness 服务
注意:本服务在高可用环境时, 只有master会对外提供服务,其它两个节点不会对外提供服务,因此,你的客户端需要能自动的判断节点的可用性。
5. 主备切换
本服务允许你直接停掉master主机来进行手动的主备切换,主机停止后slave将自动成为master以提供服务。
当有需要再次启动原master时,原master节点将会以slave成员启动。
注意:你不能手动的频繁来回切换,因为数据复制原因,你必需确定现slave成员的日志文件中出现 replication client: request replicate sync 日志后再进行回切, 否则有可能出现数据丢失。
6. 下载与安装
通过以下连接下载:
http://www.aooshi.org/adf/download/Adf.NumberServer-2.0.0.zip
http://www.aooshi.org/adf/doc/adf.numberserver-2.0.0-manual.pdf
工具描述:
ToolInstallService 用于将应用以服务方式安装至系统
ToolRunConsole 手动运行应用
ToolUninstallService 用于卸载已安装在系统中的应用
7. 配置说明
区分大小写
名 | 值 |
Port | 服务端口,默认为: 6224 |
Ip | 允许配置本机IP或 * , * 表示当前设备的所有网络接口。 |
DataPath | 数据存储路径 |
Log:FlushInterval | 日志刷新间隔, 建议值: 5s |
Log:Path | 日志存储路径。 |
HA:Node1 | 高可用模式的Master节点 |
HA:Node2 | 高可用模式的Slave节点 |
HA:Node3 | 高可用模式的Witness节点 |
HA:Keepalive | 高可用模式节点检测间隔,默认: 5s |
HA:ElectTimeout | 高可用模式Master节点选举超时时间,默认:5s |
HA:Mails | 高可用模式时 节点变化通知邮件收件人 |
8. 模糊查询协议扩展
在原服务协议基础上,增加模糊查询命令扩展。
get * {prefix} {size}
* 获取模糊匹配,第一个* 表示模糊匹配模式
prefix 表示需要匹配的键前缀
size 表示需要返回的条数
get * * 10
上述命令将获取所有键中的任意 10 条数据
get * * 100
上述命令将获取所有键中的任意 100 条数据
get * ab 10
上述命令将获取所有键以ab开始的的任意10 条数据
get * am 10
上述命令将获取所有键以am开始的的任意10 条数据
匹配: amaooshi, amtom
不匹配: name, toam
9. 使用Adf.MemcachePool 示例
配置添加:
将下列配置中的IP地址更换为自已的
<configSections>
<section name="NumberServer" type="Adf.Config.IpGroupSection,Adf"/>
</configSections>
<NumberServer>
<!-- HA:Node1 -->
<add ip="192.168.199.14" port="6224"/>
<!-- HA:Node1 -->
<add ip="192.168.199.13" port="6224"/>
</NumberServer>
添加类:
public class NumberServerClient : Adf.MemcachePool { public static readonly Adf.MemcachePool Instance = new Adf.MemcachePool("NumberServer"); } |
使用与示例:
long userId = NumberServerClient.Instance.Increment("userid"); long userId = NumberServerClient.Instance.Increment("id.user.net.cn"); long productId = NumberServerClient.Instance.Increment("/product1/id"); long p2Id = NumberServerClient.Instance.Increment("/product2/id"); long p3Id = NumberServerClient.Instance.Increment("/product3/id"); long orderId = NumberServerClient.Instance.Increment("/order/id"); long bookId = NumberServerClient.Instance.Increment("/book/id"); long bookId = NumberServerClient.Instance.Increment("id.book.net.cn"); |