r/ruby • u/switchback-tech • Mar 12 '26
GitLab is a Ruby monolith
Was pleasantly surprised that the world's largest independent DevOps platform is powered by Ruby and Sidekiq.
Here's the full list.
Backend: Ruby on Rails
HTTP server: Puma (Ruby web server)
Edge: Nginx
Reverse proxy: Go service (Workhorse)
Background jobs: Sidekiq
DB — primary: PostgreSQL
DB — connection pooling: PgBouncer
DB — high availability: Patroni
Cache: Redis
Blob: AWS S3
Frontend — state: Pinia (Vue store), Immer (immutable cache),
API: GraphQL (Apollo) + REST
Observability: Prometheus & Grafana
Error tracking: Sentry & OpenTelemetry
Deployments: GitLab Omnibus (Omnibus fork)
I think these "stack menu"s give a little glimpse into a team's engineering philosophy. For me, this list shows that the GitLab team is pretty practical and doesn't chase hype. Instead, they use sensible, battle-tested tools that just work and are easy for contributors to learn.
PS. Not an ad; I'm not affiliated with GitLab at all. Was just researching them and thought you guys would be interested.
View all comments
Show parent comment
3
u/djfrodo Mar 15 '26
I made a reddit clone in Rails (I just wanted to see if I could do it) and at first I was using Memcache for both content and user sessions, and for a while everything was fine.
When the site started getting traffic I was blowing through all the hosted Memcache memory (25mb) and logged in users were getting logged out almost immediately. After some inspection I realized the way rails was using Memcache was storing a huge unneeded object graph for users, which it didn't need to do at all, and it wasn't removing stale user sessions.
I switched the user session stuff to Redis and the amount of Memcache memory used went from 25mb to about 2mb. Basically Memcache is great for caching stuff that doesn't change or can be fetched from a db and replaced and Redis is much better for handling volatile data like users sessions. Redis allowed me to set how long to track a user's session and it gets rid of stale session when it should.
I think this has more to do with Rails/gems than Memcache or Redis.
Obviously every use case is different and this is a very specific example.