I’m trying to wrap my head around the pricing of NServicebus for our application style. I’ll try to stay abstract and short, I hope the problem is understandable.
I’m designing an application that consist of a large number of microservices implementing a very specific task. Could be as simple as combining a few message properties and then move it to the next service. Such services would be dynamically brought up and down based on need. Basically any customer can turn any “flowchart” they have by designer in a “network of related activities”
For those that know it, it’s basically an equivalent of Microsoft SQL integration services where every functional block is a microservice that would be using nservicebus for handling messages.
This network can have a lot of data flowing through it. And customer could change the flows and rules and then reprocess the data flowing through the network. This means we have a lot of messages through the system. But unlike a “productorder” these data messages have no intrinsic value. Therefore we cannot distribute the cost of message throughput to the customer this way.
For a crude example. A customer could process the results of a survey. The answers to the survey are the input message. The message flows through the system based on rules that give value to answers a result is reaches and processing is done. a survey that is answered 20 times (without nservicebus) has the same price as one that is answered 20.000 times or 2.000.000. With cheap hardware and dynamic scaling this works well. However with nservicebus there would be a LARGE price difference. And what if the customer changes the rules of processing and then reprocessed the survey. Resource wise (cpu ram etc) this is all very cheap. But nservice bus would make it expensive since the price is based on endpoints and even worse throughput.
One could put multiple handlers in a single endpoint. But that would defeat the purpose of the network, distribution of load, failsafes, redundancy, fast updates, with minimal impact etc. And most importantly the dynamic routing of messages.
We have no clue in advance what the exact throughput or endpoint count of the system is going to be. An active customer could make the entire system uneconomical just because of nservicebus. From the pricing calculator 20 endpoint with a million messages a day would cost us 13.000 a year extra. And that might just be one customer. The other cost would be a mere fraction of that.
So with this pricing model, It seems I have to build something like nservicebus myself. Or find another lib to do the work. Is that correct or am I misunderstanding the pricing model?