UNPKG

yog-ral

Version:

node-ral with mcpack and nshead

199 lines (144 loc) 6.67 kB
## yog-ral提测重点 ### 测试对象 * 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 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) 请求下,当后端混杂503404302200返回时均应正确的解析数据、发起重试以及抛出异常事件,同时内存应保持稳定,应避免各种hangup error出现 #### yog-ral 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出现