2013-09-03 47 views
5

Tôi đã nhìn thấy điểm chuẩn trên trang chủ của Yesod, nhưng chúng hầu hết là cho các tệp tĩnh. Và các tiêu chuẩn trên trang web của Snap đã lỗi thời.Mà Warp và snap-server của Yesod tôi nên chọn cho một máy chủ ứng dụng hiệu năng cao?

Tôi đang cố gắng trưng ra mô-đun Haskell làm dịch vụ. Logic của máy chủ là nhận tên hàm và đối số trong json, gọi hàm haskell và phân phối lại đầu ra là json. Tính minh bạch tham chiếu đảm bảo an toàn luồng và khả năng ghi nhớ và chức năng bộ nhớ cache.

Nếu tôi hỗ trợ các kết nối đồng thời theo thứ tự 2k - 5k, tôi sẽ thực hiện nó như thế nào? Cách tiếp cận này có thể mở rộng như thế nào?

Trả lời

7

Tôi rất muốn giới thiệu lựa chọn giữa Warp/Yesod và Snap dựa trên hệ thống nào cung cấp cho bạn bộ công cụ tốt nhất để tạo ứng dụng của bạn. Cả Warp và Snap đều sử dụng cùng một trình quản lý I/O GHC cơ bản và cả hai đều được tối ưu hóa cao. Tôi sẽ ngạc nhiên nếu một ứng dụng tốt bằng văn bản cho mỗi hệ thống, làm bất cứ điều gì không tầm thường, cho thấy một khoảng cách hiệu suất ý nghĩa.

Đoạn cuối cùng của bạn hơi mơ hồ, nhưng tôi nghĩ câu trả lời cơ bản cho Warp hoặc Snap là chỉ viết mã của bạn và trình quản lý I/O sẽ mở rộng quy mô. Nếu bạn thực sự tìm thấy kết nối đồng thời là nút cổ chai, bạn có thể xem xét thử kỹ thuật prefork, sử dụng GHC 7.8 (chưa được phát hành, nhưng có trình quản lý I/O cải tiến nhiều) hoặc sử dụng nhiều máy chủ.

5

Hầu hết các điểm chuẩn được xuất bản cho Warp và Snap đều dựa trên một tiêu chuẩn cực kỳ đơn giản và rất hấp dẫn trả về một chuỗi tĩnh "pong". Điều này là rất tốt cho việc đánh giá mức độ hiệu quả của một máy chủ web khi phân tích các yêu cầu HTTP, xây dựng các phản hồi HTTP, vv, nhưng trong hầu hết các ứng dụng, thời gian dành cho công cụ đó sẽ không đáng kể. Thứ hai, tôi đoán là bất kỳ sự khác biệt hiệu suất nào có thể có giữa Warp và Snap ngay bây giờ có khả năng giảm trong tương lai khi cả hai máy chủ tiếp tục cải thiện và tiếp cận giới hạn lý thuyết. Ngoài ra, tôi hy vọng rằng cả hai máy chủ cũng sẽ được hưởng lợi đáng kể từ những cải thiện hiệu suất trong GHC 7.8.

Haskell là một lựa chọn tuyệt vời để đạt hiệu suất cao với một số lượng lớn các kết nối đồng thời. Haskell có chủ đề màu xanh lá cây rất rẻ so với các chủ đề trong hầu hết các ngôn ngữ khác. Điều này mang lại cho Haskell web framework một lợi thế rất lớn. Chúng tôi có thể kích hoạt một chuỗi mới cho mọi kết nối và tận dụng một lượng lớn nỗ lực đã đi vào tối ưu hóa GHC để có được hiệu suất tuyệt vời trong khi vẫn duy trì một mô hình lập trình tốt đẹp.

Về Yesod so với Snap, có một lý do khiến cả hai tồn tại dưới dạng các dự án riêng biệt. Họ đang tiếp cận vấn đề phát triển web trong Haskell từ hai hướng hoàn toàn khác nhau. Cả hai đều được hưởng lợi từ hiệu suất mà Haskell giúp bạn, vì vậy bạn nên chọn giữa chúng dựa trên phương pháp mà bạn thích. Dưới đây là một số tài nguyên để giúp bạn bắt đầu: