2012-04-13 27 views
12

Tôi đã suy nghĩ thay vì sử dụng:Đi máy chủ web như thế nào là sự ổn định hiệu suất, về lâu dài ổn định so với Tomcat, Apache?

  • Tomcat
  • Apache
  • Lightweight webserver
  • PHP
  • của Ruby
  • JSP

Tại sao không chuyển dự án của tôi để Chuyển ngôn ngữ. Bởi vì có tôi có:

  • webserver xây dựng trong
  • tôi thậm chí không cần phải phụ thuộc vào PHP, Ruby, JSP
  • Go giải quyết cross-platform như: chạy trên FreeBSD, Linux, Solaris (Windows , Mac, Android, Tizen)
  • cũng không phải Apache và Tomcat cũng như các bảo trì máy chủ web khác
  • tốc độ của trình duyệt sẽ nhanh hơn hết các ngôn ngữ kịch bản máy chủ web khác.

Nhưng có một điều tôi lo lắng, đó là tính ổn định của máy chủ web Go so với các máy chủ web khác.

Có ai làm điều này trước hoặc am i một mình xây dựng các dự án như vậy cho phiên bản sản xuất?

+0

Ruby có một máy chủ web trong thư viện chuẩn quá ('require 'webrick''), nhưng tôi sẽ không nhất thiết phải phơi bày trực tiếp cho người dùng. –

+0

Hầu hết các máy chủ web như Go không được thiết kế để trở thành máy chủ đầy đủ tính năng; mọi người thường chạy chúng như các máy chủ ứng dụng đằng sau một cái gì đó như Apache hoặc nginx.Bằng cách đó, giao diện người dùng có thể cấu hình nhiều hơn có thể xử lý những thứ như bộ nhớ đệm, cân bằng tải, phục vụ dữ liệu tĩnh, v.v. –

+0

Không phải 'Kiếm con thằn lằn' chỉ _love_ đóng câu hỏi thực sự hữu ích trên StackOverflow ?! Dựa trên một số kỹ thuật ngu ngốc. Trang web này có nghĩa là một diễn đàn trả lời câu hỏi thực tế cho các nhà phát triển thế giới thực và câu hỏi này thực hiện một công việc tuyệt vời khi là một (và câu trả lời cũng vậy). Tôi chắc rằng anh ấy cảm thấy anh ấy đang làm điều gì đó cực kỳ hữu ích với cuộc sống của mình. Đây không phải là lần đầu tiên tôi gặp phải tình huống này - do đó, nhận xét này đã xuất hiện từ 'wat'ing. –

Trả lời

20

Không có vấn đề về độ ổn định.

Tôi có một vài máy chủ web chạy 100% chạy hàng tháng, phục vụ khoảng một triệu truy vấn mỗi tháng mà không gặp bất kỳ sự cố nào (chủ yếu là json, thông qua GET, POST và websockets).

Họ đang ở trên 64 bit server ubuntu nhưng tôi đoán bạn sẽ gặp khó khăn sản xuất rất nhiều buôn chuyện về 32 bit lỗi, đặc biệt là với một máy chủ web.

Không sử dụng một front-end nếu bạn không có lý do cụ thể: Thật dễ dàng để tạo ra một ứng dụng web hoàn chỉnh chỉ sử dụng Go.

Bạn sẽ ở xa một mình. Theo tôi, Go đặc biệt thích hợp để xây dựng các máy chủ chạy dài. Goroutines và kênh giúp bạn dễ dàng xử lý cả yêu cầu của người dùng và nhiệm vụ dài hạn (hoặc, ví dụ, thực hiện truy vấn sau khi bạn đã trả lời truy vấn http, điều này không dễ dàng trong php và quá nhiều LOC trong java nếu bạn muốn làm điều đó đúng).

+2

+1 Để nói về trải nghiệm trên mặt đất. – Flavius

+0

Bạn có đang sử dụng một công cụ cụ thể để duy trì hoạt động và theo dõi các quy trình trên Ubuntu không? – Blacksad

+0

Không phải hôm nay. Tôi sử dụng một dịch vụ mà cảnh báo cho tôi nếu một ngừng đáp ứng nhưng như tôi chưa bao giờ trải qua một vụ tai nạn trong sản xuất tôi không cảm thấy áp lực ngay bây giờ. Tôi đoán bạn có thể sử dụng một công cụ tiêu chuẩn nếu bạn cần. Tôi thấy rằng chu trình gỡ lỗi khác với chu trình gỡ lỗi, ví dụ java hoặc php: bạn phát hiện các lỗi thực sự nhanh chóng, trong khi biên dịch hoặc ở các kiểm tra đầu tiên (chủ yếu là lỗi chỉ mục mảng hoặc bản đồ không được phân bổ ...) các lỗi ngôn ngữ khác thường bị ẩn. Tôi cũng thích sử dụng công cụ chức năng "go test". Thực tế là việc biên dịch nhanh và được đưa vào hoạt động giúp việc này trở nên dễ dàng hơn. –

1

Sử dụng Nginx là front-end và chắc chắn rằng bạn đang sử dụng phiên bản 64bit của Go. Phiên bản 32bit có các vấn đề về độ ổn định nghiêm trọng, là một nút hiển thị cho bất kỳ quy trình chạy dài nào.

+1

Bạn có thể vui lòng cung cấp một vài liên kết đến các báo cáo lỗi có liên quan và/hoặc thảo luận nhóm/thảo luận ML không? Tôi cũng quan tâm đến việc nghiên cứu câu hỏi ban đầu, và trong khi tuyên bố của bạn mạnh mẽ nó dường như là một chút vẫy tay; tuyên bố như thế này được dự kiến ​​sẽ được hỗ trợ bởi dữ liệu. – kostix

+0

Đây là một chủ đề thảo luận các vấn đề với 32 bit. http://groups.google.com/group/golang-nuts/browse_thread/thread/ab1971bb9459025d/64241d28b02fa0db?lnk=gst – kristianp

+0

Xin lưu ý rằng lỗi này cũng có thể phát sinh trên các máy chủ 64 bit nhưng rất hiếm khi bạn chắc chắn sẽ không nhìn thấy nó, ngay cả trên 32 bit. Phải mất nhiều năm và một mẫu sử dụng bộ nhớ cụ thể để phát hiện ra nó. –

2

Tại sao không sử dụng xây dựng trong Webserver và thiết lập một proxy ngược giống như Varnish, hoặc để Nginx đóng vai trò Proxy?

http://wiki.nginx.org/ReverseProxyCachingExample

+3

Tại sao? Tại sao bạn? Nó thêm một lớp trừu tượng khác mà phải được duy trì và cập nhật. Và đó là những gì người hỏi dường như cố gắng tránh. Thêm bộ nhớ đệm không giúp ổn định, chỉ hiệu suất. Chỉ cho cache-lifetime nó có thể cung cấp thêm "ổn định"; ẩn thời gian. – Kissaki

Các vấn đề liên quan