doc/development/workhorse/new_features.md
GitLab Workhorse is a smart reverse proxy for GitLab. It handles long HTTP requests, such as:
Workhorse itself is not a feature, but several features in GitLab would not work efficiently without Workhorse.
At a first glance, Workhorse appears to be just a pipeline for processing HTTP streams to reduce the amount of logic in your Ruby on Rails controller. However, don't treat it that way. Engineers trying to offload a feature to Workhorse often find it takes more work than originally anticipated:
We suggest adding new features only if absolutely necessary and no other options exist. Splitting a feature between the Rails codebase and Workhorse is a deliberate choice to introduce technical debt. It adds complexity to the system, and coupling between the two components:
One order of magnitude exists between Workhorse and Puma RAM usage. Having a connection open for longer than milliseconds is problematic due to the amount of RAM it monopolizes after it reaches the Ruby on Rails controller. We've identified two classes of long requests: data transfers and HTTP long polling. Some examples:
git push.git pull.With the rise of cloud-native installations, Workhorse's feature set was extended to add object storage direct-upload. This change removed the need for the shared Network File System (NFS) drives.
If you still think we should add a new feature to Workhorse, open an issue for the Workhorse maintainers and explain:
The Workhorse maintainers can help you assess the situation.
@nolith presented the talk
"Speed up the monolith. Building a smart reverse proxy in Go"
at FOSDEM. The talk includes more details on the history of Workhorse and the NFS removal.