yog-ral
Version:
node-ral with mcpack and nshead
199 lines (144 loc) • 6.67 kB
Markdown
* node-ral: https://github.com/fex-team/node-ral
* yog-ral: http://git.baidu.com/fex/yog-ral/tree/master
yog-ral是用于node后端管理上游rpc服务的模块,使用上分为三个步骤
**添加配置**
```javascript
module.exports = {
'PASSPORT': {
unpack: 'mcpack',
pack: 'mcpack',
encoding: 'gbk',
balance: 'random',
protocol: 'nshead',
server: [
{ host: '127.0.0.1', port: 9081}
]
}
};
```
配置可以由多个文件组成,存放在统一的文件夹中,支持json与javascript两种格式
**Node中进行初始化**
初始化操作一个进程只需要进行一次
```javascript
var RAL = require('yog-ral').RAL;
RAL.init({
confDir : __dirname + path.sep + './config', //上述配置的文件夹路径
logger : {
"log_path" : __dirname + path.sep + './logs', //log日志地址
"app" : "yog-ral" //log标识符
},
currentIDC : 'tc' //IDC指定,会优先使用IDC相同的后端服务
});
```
**请求中调用**
```javascript
var RAL = require('yog-ral').RAL;
//发起ral请求
var request = RAL('PASSPORT', {
data: {
'cmd': 0x01004,
'apid': 1055,
'clientip': ip2int('127.0.0.1'),
'bduss': bduss
},
retry: 2,
timeout: 500
});
//监听请求结果
request.on('data', function(data){
data.uname.should.be.eql('张三李四home');
});
//错误处理
request.on('error', function(err){
(err === undefined).should.be.true
});
```
* yog-ral:公司r4u3环境,node v0.10.x
* node-ral:windows与linux环境,node v.0.10.x
由于目前yog-ral以及其依赖库node-ral均有单测覆盖
* node-ral: https://coveralls.io/r/fex-team/node-ral
* yog-ral: npm run-script test-cov
因此绝大部分功能都是可以保证的,但是由于单测环境下很难进行cluster模式的测试,并且单测的后端RPC均由测试用例本身提供,不够独立,因此需要QA协助搭建覆盖情况较全面的后端服务,测试node-ral与yog-ral在cluster模式下的稳定性。
node-ral是yog-ral的基础,目前已有一个benchmark测试脚本 https://github.com/fex-team/node-ral/blob/master/benchmark/simple_get.js ,可以参考使用,主要测试点包括(以下测试点如无特别说明,均表示需要使用cluster模式进行测试)
**模块正交性测试**
http协议与form, formData, json, querystring, string, raw数据转换以及random, roundrobin负载均衡模块均可以自由组合
**负载均衡测试**
random模式应随机选择后端服务器,roundrobin模式应按请求轮次选择服务(worker内)
**超时测试**
http协议应正确的处理超时,超时后应触发重试,retry次数为0时在error事件中抛出异常
**异常处理**
包括数据打包阶段、请求阶段、数据解包三个阶段的异常
数据打包阶段:最常见的是不支持的encoding编码导致的异常
请求阶段:DNS异常、IP访问异常、端口异常、服务端中断请求、HTTP编码返回异常 (statusCode > 200)
数据解包:最常见的是服务端返回内容异常,如json数据无法正确的反序列化
其中请求阶段与数据解包阶段的异常应触发重试,retry次数为0时在error事件中抛出异常
数据打包阶段的异常直接在error事件中抛出异常
**内存稳定性**
长期运行内存应稳定,目前自测的结果是每个worker在运行了30分种后内存占用为56MB,持续性请求后端服务4天后依然保持56MB内存占用。
**压力测试**
在高并发 (QPS > 1000) 请求下,当后端混杂503,404,302,200返回时均应正确的解析数据、发起重试以及抛出异常事件,同时内存应保持稳定,应避免各种hangup error出现
yog-ral在node-ral的基础上添加了nshead协议、mcpack2数据转换格式、Webfoot与BNS配置更新服务。可以参考自测脚本 http://git.baidu.com/fex/yog-ral/tree/master/test/webfoot ,其中webfoot.js配置含义如下
```javascript
module.exports = {
//声明一个webfoot服务,应自动抓取webfoot服务配置信息供yog-ral调用
"idalloc" : {
webfoot: "idalloc.ksarch.bj"
},
//自己搭建的虚假passport服务,使用nshead+mcpack2进行数据交互
"passport" : {
balance: 'random',
protocol: 'nshead',
pack: 'mcpack2',
unpack: 'mcpack2',
encoding: 'gbk',
server: [
{
host: "10.23.247.131",
port: 9081
}
]
},
"comment" : {
balance: 'random',
protocol: 'http',
pack: 'mcpack2',
unpack: 'mcpack2',
server: [
{
//使用bns替换host+port的资源定位模式
bns: "idalloc.ksarch.bj",
tc: "jx"
},
{
bns: "commentui.ksarch.bj",
tc: "jx"
}
]
}
}
```
**模块正交性测试**
nshead协议与form, formData, json, querystring, string, raw, mcpack2数据转换以及random, roundrobin负载均衡模块均可以自由组合
http协议与mcpack2数据转换以及random, roundrobin负载均衡模块均可以自由组合
**负载均衡测试**
random模式应随机选择后端服务器,roundrobin模式应按请求轮次选择服务(worker内)
**超时测试**
nshead协议应正确的处理超时,超时后应触发重试,retry次数为0时在error事件中抛出异常
**异常处理**
包括数据打包阶段、请求阶段、数据解包三个阶段的异常
数据打包阶段:最常见的是不支持的encoding编码导致的异常
请求阶段:DNS异常、IP访问异常、端口异常、服务端中断请求、nshead的head信息与body信息不一致
数据解包:最常见的是服务端返回内容异常,如json数据无法正确的反序列化
其中请求阶段与数据解包阶段的异常应触发重试,retry次数为0时在error事件中抛出异常
数据打包阶段的异常直接在error事件中抛出异常
**内存稳定性**
长期运行内存应稳定,目前自测的结果是每个worker在运行了30分种后内存占用为56MB,持续性请求后端服务4天后依然保持56MB内存占用。
**压力测试**
在高并发 (QPS > 1000) 请求下,当后端混杂异常与正确返回时均应正确的解析数据、发起重试以及抛出异常事件,同时内存应保持稳定,应避免各种hangup error出现