Gitlab Architecture Overview
docs.gitlab.com
docs.gitlab.com
Does Gitlab actually need to utilize all those components and when I disable certain things like Prometheus and etc. it seems to only marginally make things better.
What is consumes so much RAM and why?
[1]: https://docs.gitlab.com/omnibus/settings/memory_constrained_...
- Gitea
- Woodpecker CI
- Self hosted private Docker registry
- Minio
They are easy to deploy and upgrade (the upgrade procedure is for me the most important because I want to do it easily or at the end you do not do it).That said, they're doing good job of documenting things required for smaller installations.
At this point, the code base is too big for them to fix the performance and they want to use their time on new features and bug fixes as that's what customers are asking more while customers may solve the performance problem by spending more money on the server.
It's just that the initial technical decisions sucked and it's no longer possible to fix it at this point.
[1]: https://develop.sentry.dev/architecture/ [2]: https://github.com/getsentry/self-hosted
Snuba is one of the services that largely really requires kafka to function though I think theoretically limited functionality is also available by directly talking HTTP to it.
That's just a complex rails application for you, at $DAYJOB we have to provision 11gb for just a single container running a single instance of the app
Except for image processing, which uses a ton of ram and readily OOMs.
"Why does the app keep crashing?"
"Because the share price went up again!"
I ended up heavily tuning the ruby GC parameters, which reduced the final resource usage of the app especially over longer continued use nearly tenfold. There is a lot to gain if you know the actual object and memory limits your app needs for it's core usage rather than letting Ruby allocate more and more memory. Caveat is that was a long time ago with Ruby ~2.3 and things have certainly changed and probably improved by now.
That service has been as stable as one could hope. It just runs in a docker container on a dedicated machine that's also used for other development purposes and consumes a couple of hundred MB of ram. The number of times it was down in the past ~6 years can be counted on one hand.
Ruby has a generational GC which already supports compaction, but not in a production ready continuous way, which means most usages have it turned off, and memory pages tend to overcoming and stay fragmented for long running processes. Python has the same issue and node AFAIK.
It's the developer who just doesn't know how things work under the hood and code as they like and memory usage explodes.
I no longer self-host or use GitLab for this precise reason.
Thanks for sharing! :) FYI, the Rails monolith architecture is currently discussed in this proposal issue [0] for a modular monolith approach. This is following the blueprint work in [1][2][3].
[0] https://gitlab.com/gitlab-org/gitlab/-/issues/365293
[1] https://docs.gitlab.com/ee/architecture/blueprints/composabl...
What was the $ cost in salary to put this out vs
How much should they expect to get back by somehow impressing upon potential customers that they have a sane-ish tech stack (and maybe how much will that help to recruit?)
Nanoc (https://nanoc.app/) is the static site generator we use for our docs.
More info: https://docs.gitlab.com/ee/development/documentation/site_ar...
(well, there was a case or two in regards to updates in a non-standard config years ago, but community discussions helped there)
In the beginning I am always looking for features from other platforms only to find them readily implemented.
It does not matter if it's Mattermost, a container registry, or direct oidc logins for kubernetes and friends, it's just there.
The magnitudes of features, make it an easy choice as a core of your startup.
All in all thank you for creating an amazing piece of software. Like a fridge, for me, it just works.
[0] provides documentation for the search based on Algolia DocSearch.
[0] https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/doc/do...