2012-01-12 35 views
8

Tôi đang thiết kế một ứng dụng bỏ phiếu dài để phát những thay đổi nhỏ rất nhanh chóng, có thể, một số lượng lớn người dùng. Ứng dụng sẽ chạy song song với một trang web chạy một cm khá chuẩn. Cả hai đều sẽ chạy trên một máy chủ và bắt đầu với cơ sở dữ liệu.Tùy chọn bỏ phiếu dài: Nginx, PHP, Node.js

Tôi đến rất nhiều từ môi trường LAMP và tôi chắc chắn là nhà phát triển chứ không phải quản trị viên. Điều đó nói rằng tôi không ngại thử một số điều mới.

Tôi đã dành cả ngày nghiên cứu các tùy chọn của mình và tôi hy vọng mọi người có thể trả lời một số câu hỏi và cung cấp cho tôi một số đề xuất.

tôi đã thu hẹp nó xuống để những:

A. Apache and php for the website, Node.js for the app 
    B. Nginx and php for both the website and app 
    C. Nginx and php for website, Nginx and Node.js for the app 

Vì vậy, các câu hỏi sau:

  1. Làm thế nào để xử lý Nginx không đa threadingness PHP;). Liệu PHP có chứng minh một nút cổ chai như Apache sẽ phải bỏ phiếu lâu dài?
  2. Tôi đã nghe nói rằng tôi đã sử dụng nginx làm proxy ngược trước Apache và Node.js, đó có phải là giải pháp tốt hơn chỉ nginx không? Nếu vậy, tại sao?
  3. Bạn đã sử dụng tùy chọn nào/muốn giới thiệu?

Hãy nhớ rằng dễ thiết lập có thể là một yếu tố, tôi khá thoải mái với Apache nhưng tôi chỉ chơi với nút và tôi chưa bao giờ cài đặt Nginx.

Tôi sẽ vui lòng cung cấp các giải thích rõ ràng nếu có ai cần chúng.

+0

Đây có thể là câu hỏi cho http: //webmasters.stackexchange.com/... – DaveRandom

+0

Tôi đã xem xét ... Tôi đoán đó là cấu hình dựa nhiều hơn. – thelastshadow

Trả lời

1

Tôi, cá nhân sẽ chỉ sử dụng Node.js. Thay vì một cuộc thăm dò ý kiến ​​dài, bạn có thể đẩy thông tin mới đến tất cả các khách hàng có sẵn. Node.JS cực kỳ nhanh khi cung cấp nội dung thời gian thực và có khả năng làm mọi thứ trong một gói. Ngoài ra, phía máy khách và phía máy chủ được viết bằng javascript giúp việc phát triển, gỡ lỗi và phân phối dễ dàng hơn. Là một nhà phát triển, bạn có thể thấy những lợi ích của việc này.

Dưới đây là ví dụ về ứng dụng sử dụng Node.js và mô-đun thể hiện, ngọc bích và NowJS. Tất nhiên điều này cũng có thể được sử dụng như một sự kết hợp với CMS của bạn chạy trên apache và Node.JS phục vụ nội dung động. với Nginx hoặc một tập lệnh nút hoạt động như một proxy ngược lại trước tập lệnh này và Apache.

Một trò chuyện đơn giản ứng dụng

Server.js

var express = require('express') 
    , app = express.createServer() 
    , nowjs = require('now') 

/* configure express server */ 
//... 

app.get('/', function(req, res){ 
    res.render('chat') 
}) 

var everyone = nowjs.initialize(app) 

// Server scoped function called by single client 
everyone.now.distributeMsg = function(msg){ 
    // Client scoped function of every connected client 
    this.now.receiveMsg(msg) 
} 

app.listen(3000) 

chat.jade

!!! 
html 
    head 
    script(type='text/javascript', src='/nowjs/now.js') 
    body 
    #log 
    input#entry(type='text') 
    input#submit(type='button') 

script 
    $(function(){ 
    $('#submit').click(function(){ 
     now.distributeMsg($('#entry').val()) 
    }) 

    now.receiveMsg = function(msg){ 
     $('#log').append('<div>' + msg + '</div>') 
    } 
    }) 

Vâng, đó thực sự là đơn giản và sẽ không mất nhiều hơn dòng mã để biến điều này thành một ứng dụng trò chuyện đầy đủ tính năng. Trong thực tế, đánh dấu và CSS của bạn sẽ có nhiều dòng hơn mã ứng dụng. Kinh ngạc!

+1

Tôi thích Node và chắc chắn tôi rất vui khi xây dựng ứng dụng trong đó. – thelastshadow

3

tôi sẽ sử dụng tùy chọn C: và sẽ đề nghị một tùy chọn D:

tùy chọn D:

  • Keepalived với HAProxy cho cân bằng tải (LB)
  • Nginx cho các kịch bản tĩnh và PHP, sử dụng PHP-FPM, APC và Redis để lưu vào bộ nhớ cache
  • Node.js (và các mô-đun Nút khác) cho nội dung động, thời gian thực

Chúng tôi hiện đang sử dụng 2 phần đầu tiên của tùy chọn D, đến từ nền LAMP và hiện đang triển khai Node.js để phục vụ một số ứng dụng thời gian thực của hệ thống của chúng tôi. HAProxy thực hiện chính xác điều đó: ủy quyền lưu lượng truy cập đến tất cả các máy chủ phụ trợ của tôi, thay vì để Nginx làm việc đó. Lý do cho điều đó, chúng tôi có nhiều máy chủ HTTP/TCP/khác phụ trợ và chúng tôi yêu cầu chuyển đổi dự phòng và tự động thành các máy chủ này. LB rất đơn giản để triển khai và hoạt động tốt.

Cho đến nay, kết quả xuất sắc. Cá nhân, đường cong học tập của Nodes cho đến nay đã rất khó khăn do thiếu tài liệu, nhưng có một cộng đồng rất năng động ngoài kia.

Hy vọng điều này sẽ hữu ích.

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