Chính xác thì mô hình máy chủ web pre-fork là gì?


94

Tôi muốn biết chính xác nó có nghĩa là gì khi một máy chủ web tự mô tả nó là một máy chủ web trước phân nhánh. Tôi có một vài ví dụ như kỳ lân cho ruby ​​và gunicorn cho trăn.

Cụ thể hơn, đây là những câu hỏi:

  • Mô hình này giải quyết vấn đề gì?
  • Điều gì xảy ra khi máy chủ web pre-fork được khởi động lần đầu?
  • Nó xử lý yêu cầu như thế nào?

Ngoài ra, một câu hỏi cụ thể hơn cho unicorn / gunicorn:

Giả sử rằng tôi có một ứng dụng web mà tôi muốn chạy với (g) unicorn. Khi khởi tạo, ứng dụng web sẽ thực hiện một số công việc khởi tạo (ví dụ: điền vào các mục cơ sở dữ liệu bổ sung). Nếu tôi định cấu hình (g) unicorn với nhiều worker, thì nội dung khởi tạo có được chạy nhiều lần không?

Câu trả lời:


102

Pre-fork về cơ bản có nghĩa là một master tạo các fork xử lý từng yêu cầu. Một fork là một quá trình * nix hoàn toàn riêng biệt.

Cập nhật theo các bình luận bên dưới. Các pretrong pre-forkphương tiện mà các quá trình này được chia hai trước khi yêu cầu đến. Họ có thể tuy nhiên thường được tăng hoặc giảm như tải đi lên và xuống.

Pre-fork có thể được sử dụng khi bạn có các thư viện KHÔNG an toàn cho luồng. Điều đó cũng có nghĩa là các vấn đề trong một yêu cầu gây ra sự cố sẽ chỉ ảnh hưởng đến quá trình mà chúng được xử lý chứ không phải toàn bộ máy chủ.

Việc khởi tạo chạy nhiều lần tất cả phụ thuộc vào những gì bạn đang triển khai. Tuy nhiên, thường thì các nhóm kết nối và những thứ có tính chất đó sẽ tồn tại cho mỗi quá trình.

Trong một mô hình phân luồng, chủ cũng sẽ tạo các luồng có trọng lượng nhẹ hơn để gửi các yêu cầu. Nhưng nếu một luồng gây ra các vấn đề lớn, nó có thể gây ra hậu quả cho quy trình chính.

Với các công cụ như Nginx, Event MPM của Apache 2.4 hoặc gevent (có thể được sử dụng với Gunicorn), chúng không đồng bộ, nghĩa là một quy trình có thể xử lý hàng trăm yêu cầu trong khi không bị chặn.


29
Tôi đã có cùng một nghi ngờ về ý nghĩa của "prefork". Tôi cho rằng nó có nghĩa là một loại nào đó, một cách tự nhiên, nhưng phần "pre" đã khiến tôi bối rối. Tôi đã tìm thấy ở đây shortcutations.com/prefork rằng phần "pre" thực sự có nghĩa là các quy trình worker được tạo trước, do đó, thời gian không bị lãng phí chỉ khi cần một worker. Làm cho rất nhiều ý nghĩa với tôi :)
El Ninja Trepador

1
//, @ElNinjaTrepador, tại sao không thêm một câu trả lời riêng? Điều đó ít ra cũng dễ hiểu hơn đối với tôi và nó có thể giúp ích cho người khác nhiều hơn nếu nhận xét đó có vị trí nổi bật hơn.
Nathan Basanese

2
Tôi đã cập nhật câu trả lời để bổ sung thêm một chút thông tin về pre-fork. @ElNinjaTrepador cảm ơn vì đã chỉ ra điều này, tôi không nhận ra rằng nó không được nhiều người biết đến.
Joe Doherty

1
@NathanBasanese sẽ làm được thưa ngài;)
El Ninja Trepador

4
@JoeDoherty có lẽ nó đã được biết đến nhiều, nó chỉ là do tôi không biết cho đến thời điểm đó: DI sẽ thêm một câu trả lời khác (theo yêu cầu của Nathan), nhưng vì bạn đã thêm những gì tôi đã nói với bạn nên nó không cần thiết nữa: )
El Ninja Trepador
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.