coconut應用緩存服務器
coconut是一款應用緩存服務器,主要用于場景化的緩存服務。
coconut目前提供了兩種場景模式:全局序列號發(fā)生器、全局額度管理器,可成為分布式、集群化系統(tǒng)架構(gòu)中高性能獨立功能部件。
-
全局序列號發(fā)生器 為分布式、集群化系統(tǒng)提供有序增長、全局唯一、可反解的高性能序列號生成分發(fā)服務
-
全局額度管理器 為分布式、集群化系統(tǒng)提供對理財額度、庫存數(shù)量等高頻熱點對象的高性能無鎖接口服務
1.1.全局序列號發(fā)生器
1.1.1.序列號格式
coconut生成的序列號為16個64進制可見字符組成,具體格式如下:
| 區(qū)號 | 區(qū)名 | 說明 |
|---|---|---|
| 第一區(qū) | 分區(qū)目錄 | 2個六十四進制字符 共12個二進制位<br>第一段3個二進制位表示保留區(qū)六十四進制字符個數(shù)<br>第二段3個二進制位表示服務器編號區(qū)六十四進制字符個數(shù)<br>第三段3個二進制位表示秒戳區(qū)六十四進制字符個數(shù)<br>第四段3個二進制位表示序號區(qū)六十四進制字符個數(shù) |
| 第二區(qū) | 保留區(qū) | 1個六十四進制字符 有6個二進制位可用 |
| 第三區(qū) | 服務器編號區(qū) | 2個六十四進制字符 可表示4096臺發(fā)起器服務器 |
| 第四區(qū) | 秒戳區(qū) | 6個六十四進制字符 可表示2179年的秒戳 |
| 第五區(qū) | 序號區(qū) | 5個六十四進制字符 序號區(qū)間[1,10億] |
| 共16個六十四進制字符 |
(64進制字符集合:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_)
如序列號:aR2011o_cWG00002
反解出來包含如下信息:reserve: 2 server_no: 1 secondstamp: 1492962986(2017-04-23 23:56:26) serial_no: 2
1.1.2.服務接口
coconut的全局序列號發(fā)生器提供了2個HTTP接口:
-
獲取序列號<br> 方法 : GET<br> URL : http://(domain|ip):[port]/fetch<br> 返回值 : 如果調(diào)用成功,返回HTTP狀態(tài)碼200,HTTP體中回送一個有序增長的全局唯一的序列號,如aR2011o_cWG00002;如果發(fā)生系統(tǒng)級錯誤,返回HTTP狀態(tài)碼非200<br> 備注 : 可利用備注區(qū)區(qū)分業(yè)務類型;可利用服務器編號部署序列號發(fā)生器集群
-
反解序列號<br> 方法 : GET<br> URL : http://(domain|ip):[port]/explain?sequence=(序列號)<br> 返回值 : 如果調(diào)用成功,返回HTTP狀態(tài)碼200,HTTP體中回送反解文本;如果發(fā)生系統(tǒng)級錯誤,返回HTTP狀態(tài)碼非200<br> 備注 : 反解文本格式"reserve: (保留值) server_no: (服務器編號) secondstamp: (1970年至今秒戳)((人可閱讀的日期時間格式)) serial_no: (序號)"
1.2.全局額度管理器
全局額度管理器提供高性能無鎖接口對額度、庫存等高頻熱點對象做查詢額度、申請額度、撤銷流水、補充額度、扣減額度、清空額度等處理。
1.2.1.使用過程
命令行指定額度、導出結(jié)果流水文件名啟動coconut,coconut對外提供HTTP接口,客戶端可長/短連接發(fā)送指令給coconut以操作額度。期間還可以補充、扣減甚至清空額度。當額度為0時自動導出結(jié)果流水文件,可能會重復導出覆蓋導出文件。
導出結(jié)果流水文件格式為每行一條流水,白字符分割為兩列:申請流水號、申請額度,如果某流水被撤銷則再加一列:撤銷流水號。
1.2.2.服務接口
coconut的全局額度管理器提供了6個HTTP接口:
-
查詢額度<br> 方法 : GET<br> URL : http://(domain|ip):[port]/query<br> 返回值 : 如果調(diào)用成功,返回HTTP狀態(tài)碼200,HTTP體中回送"(剩余額度值)",如果發(fā)生參數(shù)錯誤則返回"-1";如果發(fā)生系統(tǒng)級錯誤,返回HTTP狀態(tài)碼非200<br>
-
申請額度<br> 方法 : GET<br> URL : http://(domain|ip):[port]/apply?amt=(額度值)<br> 返回值 : 如果調(diào)用成功,返回HTTP狀態(tài)碼200,HTTP體中回送"(申請流水號) (剩余額度值)",如果額度已空或額度不夠則返回"0",如果發(fā)生參數(shù)錯誤則返回"-1";如果發(fā)生系統(tǒng)級錯誤,返回HTTP狀態(tài)碼非200<br>
-
撤銷流水<br> 方法 : GET<br> URL : http://(domain|ip):[port]/cancel?jnlsno=(申請流水號)<br> 返回值 : 如果調(diào)用成功,返回HTTP狀態(tài)碼200,HTTP體中回送"(撤銷流水號) (剩余額度值)",如果找不到原申請流水或已被撤銷則返回"0",如果發(fā)生參數(shù)錯誤則返回"-1";如果發(fā)生系統(tǒng)級錯誤,返回HTTP狀態(tài)碼非200<br>
-
補充額度<br> 方法 : GET<br> URL : http://(domain|ip):[port]/increase?amt=(額度值)<br> 返回值 : 如果調(diào)用成功,返回HTTP狀態(tài)碼200,HTTP體中回送"(剩余額度值)",如果發(fā)生參數(shù)錯誤則返回"-1";如果發(fā)生系統(tǒng)級錯誤,返回HTTP狀態(tài)碼非200<br>
-
扣減額度<br> 方法 : GET<br> URL : http://(domain|ip):[port]/decrease?amt=(額度值)<br> 返回值 : 如果調(diào)用成功,返回HTTP狀態(tài)碼200,HTTP體中回送"(剩余額度值)",如果發(fā)生參數(shù)錯誤則返回"-1";如果發(fā)生系統(tǒng)級錯誤,返回HTTP狀態(tài)碼非200<br>
-
清空額度<br> 方法 : GET<br> URL : http://(domain|ip):[port]/empty<br> 返回值 : 如果調(diào)用成功,返回HTTP狀態(tài)碼200,HTTP體中回送"(剩余額度值)",如果發(fā)生參數(shù)錯誤則返回"-1";如果發(fā)生系統(tǒng)級錯誤,返回HTTP狀態(tài)碼非200<br>
