GitLab 为什么需要 Unicorn
上一回我们主要讲解了 GitLab-workhorse 组件的智能代理功能,从这一回起将开始介绍最核心也最复杂的组件:Unicorn(GitLab Rails),上次也说了这个组件主要处理动态网页和 api 接口
此篇文章先介绍 Unicorn 的作用,光是这个就能讲很多内容了
Unicorn 是使用多进程模型的 Ruby web 服务器,遵循 Rack 协议。如果要类比 java web 开发技术栈的话,Rails 应用相当于 Spring MVC 框架应用,Unicorn web 服务器相当于 tomcat
GitLab 的 Rails 应用程序(即 gitlab-ce)是在 Unicorn 服务器内运行的,使用 Unicorn 的原因是: Unicorn 能为 Rails 应用提供并发处理客户端请求的能力,并且提供了更强的容错处理
Unicorn 的多进程模型能很好地利用服务器多核 CPU 的资源,以提供更好的并发能力。当 Unicorn 启动时,Unicorn 的主进程,即 master 进程,会以 fork 的方式创建一系列 worker 进程。Unicorn 通过一个 master 进程来管理多个 worker 进程,其中 master 进程不负责处理客户端的 HTTP 请求,