45 karma · joined November 16, 2021
That was one reason I left the ziti actions in the project, as I thought they'd be useful as real life examples for someone writing their own actions.
We've tested the model with 100k identities with the operations that clients use: auth, listing services, creating sessions, etc, to make sure that the model scales reasonable well. We had to add additional denormalization and make some other tweaks, but now the controller scales relatively well for those operations. I'm sure there are still edge cases where it may break down, but we'll have to fix them if someone hits them.
We've done thoughput testing to make sure we can handle high throughput use cases. This also resulted in lots of changes, including reworking the end-to-end flow control. This is an area where we're happy with the progress we've made, and performance is in a reasonably good place, but where we have lots of ideas of how to continue to improve and will be continuing to test and iterate.
Having tons of connected clients (even without much traffic flowing) is it's own scaling challenge. We've done some amount of testing here. As part of the testing mentioned above we had to make some changes to make sure that slow clients didn't hold up fast clients. More generally,this is where things start getting complicated and very specific. You can have very different types of traffic flow, so it's hard to model anything generic. We have not done as much in this area because we've not seen any cases where we're memory constrained, which is the usual sign of a concurrent connections scaling bottleneck.
Hope that's helpful.
For CLI goroutine analysis there's another tool: https://github.com/linuxerwang/goroutine-inspect which is pretty good.
I think if I do a rewrite it might make more sense to go the web route, like the go tool pprof UIs.
My coworker Andrew did start a similar tool, which is here: https://github.com/andrewpmartinez/grid and uses https://github.com/AllenDang/giu for the UI.
Next time I need a feature I probably take a look at that and see what the model looks like and and how straightforward it is to work with.
It can:
* Load multiple stackdumps
* Group similar goroutines automatically or manually
* Group goroutines by regular expression
It is written in Java, because I needed a tool and I've done Java UIs in the past. Since I do Go backend development I figured I'd spend my time getting the tool written.We also use a Go agent library (https://github.com/openziti/agent) which helps us gather stack dumps (and pprof dumps, etc) at runtime.