Skip to content

Commit

Permalink
update benchmark tests
Browse files Browse the repository at this point in the history
  • Loading branch information
icebob committed Apr 8, 2017
1 parent 899218a commit 0a1da8d
Show file tree
Hide file tree
Showing 10 changed files with 114 additions and 214 deletions.
26 changes: 12 additions & 14 deletions benchmark/suites/cachers.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,25 @@ let Promise = require("bluebird");
let { getDataFile } = require("../utils");

let Benchmarkify = require("benchmarkify");
Benchmarkify.printHeader("Cachers benchmark");
let benchmark = new Benchmarkify("Cachers benchmark").printHeader();

let ServiceBroker = require("../../src/service-broker");
let MemoryCacher = require("../../src/cachers/memory");
let Moleculer = require("../../");
let MemoryMapCacher = require("../../src/cachers/memory-map");
let RedisCacher = require("../../src/cachers/redis");

let key = "TESTKEY-12345";

let bench = new Benchmarkify({ async: true, name: "Set & get 1k data with cacher"});
let bench = benchmark.createSuite("Set & get 1k data with cacher");
let data = JSON.parse(getDataFile("1k.json"));

let broker = new ServiceBroker();
let broker = new Moleculer.ServiceBroker();

let memCacher = new MemoryCacher();
let memCacher = new Moleculer.Cachers.Memory();
memCacher.init(broker);

let memMapCacher = new MemoryMapCacher();
memMapCacher.init(broker);

let redisCacher = new RedisCacher({
let redisCacher = new Moleculer.Cachers.Redis({
redis: {
uri: "localhost:6379"
},
Expand All @@ -35,18 +33,18 @@ let redisCacher = new RedisCacher({
redisCacher.init(broker);

// ----
bench.add("Memory", () => {
bench.add("Memory", done => {
memCacher.set(key, data);
return memCacher.get(key);
}, false);
memCacher.get(key).then(done);
});

bench.add("MemoryMap", () => {
memMapCacher.set(key, data);
return memMapCacher.get(key);
}, false);
});

bench.add("Redis", () => {
return redisCacher.set(key, data).then(() => redisCacher.get(key));
bench.add("Redis", done => {
redisCacher.set(key, data).then(() => redisCacher.get(key)).then(done);
});

bench.run().then(() => {
Expand Down
110 changes: 38 additions & 72 deletions benchmark/suites/call.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,70 +4,41 @@
let Promise = require("bluebird");

let Benchmarkify = require("benchmarkify");
Benchmarkify.printHeader("Broker call benchmarks");
let benchmark = new Benchmarkify("Broker call benchmarks").printHeader();

let ServiceBroker = require("../../src/service-broker");
let Context = require("../../src/context");
let userService;

function createBroker(opts) {
// Create broker
let broker = new ServiceBroker(opts);

let service = broker.loadService(__dirname + "/../user.service");

// Load user service
if (userService == null)
userService = service;
broker.loadService(__dirname + "/../user.service");

broker.start();
return broker;
}

let bench1 = new Benchmarkify({ async: true, name: "Call methods"});
let bench1 = benchmark.createSuite("Call methods");
(function() {
let broker = createBroker();
/*bench1.add("Direct service call", () => {
return userService.actions.empty();
});
let action = null;
let ctx = null;
bench1.add("action.handler", () => {
//if (action == null) {
let actions = broker.actions.get("users.empty");
action = actions.getData();
//}
if (ctx == null)
ctx = new Context({ broker, action});
return Promise.resolve(action.handler(ctx));
});
bench1.add("ctx.invoke", () => {
let actions = broker.actions.get("users.empty");
let action = actions.get().data;
let ctx = new Context({ broker, action});
return ctx.invoke(action.handler);
});*/

bench1.add("broker.call (normal)", () => {
return broker.call("users.empty");
bench1.ref("broker.call (normal)", done => {
broker.call("users.empty").then(done);
});

bench1.add("broker.call (with params)", () => {
return broker.call("users.empty", { id: 5, sort: "name created", limit: 10 });
bench1.add("broker.call (with params)", done => {
broker.call("users.empty", { id: 5, sort: "name created", limit: 10 }).then(done);
});

})();

// ----------------------------------------------------------------
let bench2 = new Benchmarkify({ async: true, name: "Call with middlewares"});
let bench2 = benchmark.createSuite("Call with middlewares");

(function() {
let broker = createBroker();
bench2.add("Call without middlewares", () => {
return broker.call("users.empty");
bench2.ref("Call without middlewares", done => {
return broker.call("users.empty").then(done);
});
})();

Expand All @@ -79,8 +50,8 @@ let bench2 = new Benchmarkify({ async: true, name: "Call with middlewares"});
};
broker.use(mw1);

bench2.add("Call with 1 middleware", () => {
return broker.call("users.empty");
bench2.add("Call with 1 middleware", done => {
return broker.call("users.empty").then(done);
});
})();

Expand All @@ -92,99 +63,94 @@ let bench2 = new Benchmarkify({ async: true, name: "Call with middlewares"});
};
broker.use(mw1, mw1, mw1, mw1, mw1);

bench2.add("Call with 5 middlewares", () => {
return broker.call("users.empty");
bench2.add("Call with 5 middlewares", done => {
return broker.call("users.empty").then(done);
});
})();

// ----------------------------------------------------------------
let bench3 = new Benchmarkify({ async: true, name: "Call with cachers"});
let bench3 = benchmark.createSuite("Call with cachers");

let MemoryCacher = require("../../src/cachers").Memory;

(function() {
let broker = createBroker();
bench3.add("No cacher", () => {
return broker.call("users.get", { id: 5 });
bench3.ref("No cacher", done => {
return broker.call("users.get", { id: 5 }).then(done);
});
})();

(function() {
let broker = createBroker({ cacher: new MemoryCacher() });
bench3.add("Built-in cacher", () => {
return broker.call("users.get", { id: 5 });
bench3.add("Built-in cacher", done => {
return broker.call("users.get", { id: 5 }).then(done);
});
})();

(function() {
let broker = createBroker({ cacher: new MemoryCacher() });
bench3.add("Built-in cacher (keys filter)", () => {
return broker.call("users.get2", { id: 5 });
bench3.add("Built-in cacher (keys filter)", done => {
return broker.call("users.get2", { id: 5 }).then(done);
});
})();

// ----------------------------------------------------------------
let bench4 = new Benchmarkify({ async: true, name: "Call with param validator"});
let bench4 = benchmark.createSuite("Call with param validator");

(function() {
let broker = createBroker();
bench4.add("No validator", () => {
return broker.call("users.get", { id: 5 });
bench4.ref("No validator", done => {
return broker.call("users.get", { id: 5 }).then(done);
});
})();

(function() {
let broker = createBroker();
bench4.add("With validator passes", () => {
return broker.call("users.validate", { id: 5 });
bench4.add("With validator passes", done => {
return broker.call("users.validate", { id: 5 }).then(done);
});
})();

(function() {
let broker = createBroker();
bench4.add("With validator fail", () => {
bench4.add("With validator fail", done => {
return broker.call("users.validate", { id: "a5" })
.catch(err => null);
.catch(done);
});
})();

// ----------------------------------------------------------------
let bench5 = new Benchmarkify({ async: true, name: "Call with statistics & metrics"});
let bench5 = benchmark.createSuite("Call with statistics & metrics");

(function() {
let broker = createBroker();
bench5.add("No statistics", () => {
return broker.call("users.empty");
bench5.ref("No statistics", done => {
return broker.call("users.empty").then(done);
});
})();

(function() {
let broker = createBroker({ metrics: true });
bench5.add("With metrics", () => {
return broker.call("users.empty");
bench5.add("With metrics", done => {
return broker.call("users.empty").then(done);
});
})();

(function() {
let broker = createBroker({ statistics: true });
bench5.add("With statistics", () => {
return broker.call("users.empty");
bench5.add("With statistics", done => {
return broker.call("users.empty").then(done);
});
})();

(function() {
let broker = createBroker({ metrics: true, statistics: true });
bench5.add("With metrics & statistics", () => {
return broker.call("users.empty");
bench5.add("With metrics & statistics", done => {
return broker.call("users.empty").then(done);
});
})();

bench1.run()
.then(() => bench2.run())
.then(() => bench3.run())
.then(() => bench4.run())
.then(() => bench5.run());

benchmark.run([bench1, bench2, bench3, bench4, bench5]);

/*
Expand Down
51 changes: 24 additions & 27 deletions benchmark/suites/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
let Promise = require("bluebird");

let Benchmarkify = require("benchmarkify");
Benchmarkify.printHeader("Moleculer common benchmarks");
let benchmark = new Benchmarkify("Moleculer common benchmarks").printHeader();

let ServiceBroker = require("../../src/service-broker");
let Context = require("../../src/context");
Expand All @@ -19,26 +19,26 @@ function createBroker(opts) {
return broker;
}

let bench1 = new Benchmarkify({ async: true, name: "Local call"});
let bench1 = benchmark.createSuite("Local call");
(function() {
let broker = createBroker();
bench1.add("broker.call (normal)", () => {
return broker.call("users.empty");
bench1.ref("broker.call (normal)", done => {
return broker.call("users.empty").then(done);
});

bench1.add("broker.call (with params)", () => {
return broker.call("users.empty", { id: 5, sort: "name created", limit: 10 });
bench1.add("broker.call (with params)", done => {
return broker.call("users.empty", { id: 5, sort: "name created", limit: 10 }).then(done);
});

})();

// ----------------------------------------------------------------
let bench2 = new Benchmarkify({ async: true, name: "Call with middlewares"});
let bench2 = benchmark.createSuite("Call with middlewares");

(function() {
let broker = createBroker();
bench2.add("No middlewares", () => {
return broker.call("users.empty");
bench2.ref("No middlewares", done => {
return broker.call("users.empty").then(done);
});
})();

Expand All @@ -50,44 +50,44 @@ let bench2 = new Benchmarkify({ async: true, name: "Call with middlewares"});
};
broker.use(mw1, mw1, mw1, mw1, mw1);

bench2.add("5 middlewares", () => {
return broker.call("users.empty");
bench2.add("5 middlewares", done => {
return broker.call("users.empty").then(done);
});
})();

// ----------------------------------------------------------------
let bench3 = new Benchmarkify({ async: true, name: "Call with statistics & metrics"});
let bench3 = benchmark.createSuite("Call with statistics & metrics");

(function() {
let broker = createBroker();
bench3.add("No statistics", () => {
return broker.call("users.empty");
bench3.ref("No statistics", done => {
return broker.call("users.empty").then(done);
});
})();

(function() {
let broker = createBroker({ metrics: true });
bench3.add("With metrics", () => {
return broker.call("users.empty");
bench3.add("With metrics", done => {
return broker.call("users.empty").then(done);
});
})();

(function() {
let broker = createBroker({ statistics: true });
bench3.add("With statistics", () => {
return broker.call("users.empty");
bench3.add("With statistics", done => {
return broker.call("users.empty").then(done);
});
})();

(function() {
let broker = createBroker({ metrics: true, statistics: true });
bench3.add("With metrics & statistics", () => {
return broker.call("users.empty");
bench3.add("With metrics & statistics", done => {
return broker.call("users.empty").then(done);
});
})();

// ----------------------------------------------------------------
let bench4 = new Benchmarkify({ async: true, name: "Remote call with FakeTransporter"});
let bench4 = benchmark.createSuite("Remote call with FakeTransporter");

(function() {

Expand Down Expand Up @@ -121,15 +121,12 @@ let bench4 = new Benchmarkify({ async: true, name: "Remote call with FakeTranspo
b1.start().then(() => b2.start());

let c = 0;
bench4.add("Remote call echo.reply", () => {
return b1.call("echo.reply", { a: c++ });
bench4.add("Remote call echo.reply", done => {
return b1.call("echo.reply", { a: c++ }).then(done);
});
})();

bench1.run()
.then(() => bench2.run())
.then(() => bench3.run())
.then(() => bench4.run());
module.exports = benchmark.run([bench1, bench2, bench3, bench4]);


/*
Expand Down
Loading

0 comments on commit 0a1da8d

Please sign in to comment.