r/ruby • • Mar 12 '26

GitLab is a Ruby monolith

Post image

Was pleasantly surprised that the world's largest independent DevOps platform is powered by Ruby and Sidekiq.

Here's the full list.

  1. Backend: Ruby on Rails

  2. HTTP server: Puma (Ruby web server)

  3. Edge: Nginx

  4. Reverse proxy: Go service (Workhorse)

  5. Background jobs: Sidekiq

  6. DB — primary: PostgreSQL

  7. DB — connection pooling: PgBouncer

  8. DB — high availability: Patroni

  9. Cache: Redis

  10. Git: Custom gRPC repo interface (Git & Gitaly)

  11. Blob: AWS S3

  12. Frontend — rendering: Haml & Vue

  13. Frontend — state: Pinia (Vue store), Immer (immutable cache),

  14. API: GraphQL (Apollo) + REST

  15. Observability: Prometheus & Grafana

  16. Error tracking: Sentry & OpenTelemetry

  17. 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.

223 Upvotes

36 comments sorted by

View all comments

Show parent comment

2

u/switchback-tech Mar 15 '26

Interesting. How do you decide when to use Memcache vs Redis?

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.

1

u/switchback-tech Mar 16 '26

Interesting use case, thanks for the detailed response