Simulation functionality
It would be awesome to add ability to simulate the system, not just draw the diagram. It not neecesary need to be precise, just automate the “back of the envelope” calculations system architects normally do.
Ideally, with properties specified, it should make possible to identify bottlenecks in the system. Would be priceless utility in all kinds of “what-if” checks (if our DB performance drops 2 times, what will be the impact on the client requests?)
Yes! This was actually my initial thought of the app, that it would look for and display these kinds of things, I just never knew how to do it (in the sense of what to show and what not to...) I'll try to make something like this, if you have any more ideas on how or what to make, let me know.
In principle, as a first step the following extensions could be implemented:
- for producer nodes, approximate output rate should be definable as parameter
- for consumer nodes, consumption rate should be specified
- button "simulate" which triggers the flow analisys (https://en.wikipedia.org/wiki/Flow_network)
After the simulation, actual flow for every node will become available and should be displayed. It could be done in a vairous ways, like ratio between actual and theoretical flow or actual message rate.
In addition, some kind of report could be generated, showing the slowest components.
Of course, this approach will be very rough, not taking into account many aspects of real systems:
- non-linear congestion of components
- fluctuations in load (you can have day/night oscillations, sudden spikes, etc)
- dependency of processing time on data size or other kind of complexity
- delays in message propagations
But even with simplest form, it still will be useful as first approximation of architecture analisys. And, of course, more complexities could be added later.
In addition, it might be cool to add "stress test" simulation, when producers' rate is increased monotonically to check which components are saturating first.