Chúng tôi có một ứng dụng Ruby on Rails lớn (25 triệu người dùng hàng tháng), quản lý của chúng tôi đã quyết định viết lại trong Node.js, tôi có điên không?


24

Xin vui lòng cho tôi biết nếu:

  • Node.js sẽ làm cho trang web của chúng tôi nhanh hơn!
  • Node.js sẽ tiêu tốn ít tài nguyên máy chủ hơn, chúng tôi có thể tiết kiệm tiền!
  • Node.js sẽ giúp chúng ta làm việc hiệu quả hơn!
  • Node.js có nghĩa là chúng tôi có thể chia sẻ mã JavaScript phía máy khách và máy chủ.

Để làm rõ, chúng tôi đang viết lại một máy chủ lối vào, sẽ nói chuyện với ứng dụng Ruby on Rails hiện tại của chúng tôi dưới dạng API. Trong khi đó, chúng tôi sẽ cấu trúc lại ứng dụng Ruby on Rails của chúng tôi thành các dịch vụ.

Thêm chi tiết về kiến ​​trúc hiện có:

  • Memcached cho bộ nhớ đệm HTML
  • Redis cho phiên và một số bộ đệm dữ liệu có cấu trúc
  • MySQL đơn chủ, nhiều nô lệ
    • Có một bảng lớn chấp nhận nhiều bài viết (hãy tưởng tượng một cuộc thăm dò ý kiến)
    • Nếu không thì chủ yếu là đọc.
  • MongoDB cho một số siêu dữ liệu
  • Ruby on Rails 3.0
  • nginxKỳ lân

33
sheesh, tất cả các ngôn ngữ hipster. Một ứng dụng php được viết tốt sẽ mở rộng dễ dàng, các công cụ truyền thống hoạt động, đừng để những kẻ hợm hĩnh nói với bạn bằng cách khác.
Darknight

5
Câu hỏi nên được đặt nhiều hơn dọc theo dòng chữ "Liệu các cải tiến có tiết kiệm đủ tiền cho doanh nghiệp để làm cho nó đáng giá không?" Nó có thể tiết kiệm tiền hơn 5 năm nhưng viết lại rất tốn kém và mất thời gian - trừ khi mã của bạn là một mớ hỗn độn khủng khiếp khủng khiếp Tôi nghĩ rằng các nhà quản lý của bạn đang nổi điên
Mikey C

4
Nếu việc viết lại đang được xem xét, bạn cũng có thể xem xét chuyển giao diện người dùng của mình sang javascript phía máy khách, điều đó có nghĩa là bạn sẽ không còn máy chủ mặt trước động nữa, chỉ là các tệp tĩnh.
Joeri Sebrechts

11
@Darknight nhớ rằng tại một thời điểm, PHP là ngôn ngữ hipster và mọi người cho thấy nó có thể được triển khai trong các sản phẩm thành công đã thúc đẩy việc áp dụng của nó trong khi các nhà phát triển web Perl đang cười khúc khích với các hipster PHP.

9
Tôi rất ngạc nhiên không ai đưa ra bài viết Joel Spolsky Những điều bạn không bao giờ nên làm . Tôi không nói tất cả các bài viết lại là xấu, nhưng tôi đồng ý với @MikeyC rằng họ nên được tiếp cận hết sức thận trọng.
Dan Pichelman

Câu trả lời:


22

Hầu hết các câu hỏi bạn hỏi đều không thể trả lời được nếu không có ngữ cảnh và ít nhiều việc quản lý được đưa ra đã đưa ra lựa chọn cho bạn ... trừ khi bạn hỏi 'tôi có nên bỏ việc và tìm một công việc mới khi đối mặt với tất cả sự thay đổi này ? '

Nếu bạn gặp khó khăn, tôi khuyên bạn nên đọc bài viết này về chủ đề: Làm thế nào để sống sót khi viết lại từ đầu mà không mất đi sự tỉnh táo của bạn .

Gần đây tôi đã bắt đầu con đường viết lại một chút logic máy chủ trong node.js. Lý do chính là nó hiện được viết bằng .NET và chúng tôi muốn chuyển khỏi môi trường MS theo dõi.

Kinh nghiệm của tôi cho đến nay vẫn rất tích cực, bạn sẽ có một lộ trình học tập ban đầu với tất cả sự không bị chặn của nó nhưng một khi bạn vượt qua được thì thật sự rất vui khi viết mã .. Tôi biết, FUN!

Mặc dù vậy, nó có một mặt tối, mỗi người đàn ông và chú chó của anh ta đã thực hiện một số phát triển giao diện người dùng với JavaScript - và đó sẽ là mọi nhà phát triển giao diện người dùng tôi hy vọng - sẽ có một chút phấn khích khi bạn đề cập rằng node.js là javascript phía máy chủ 'tuy nhiên điều đó không có nghĩa là các nhà phát triển giao diện người dùng sẽ có kinh nghiệm cần thiết để viết các ứng dụng phía máy chủ tốt.

Đối với một điều bạn đã xem xét là một lỗi nghiêm trọng sẽ làm giảm toàn bộ ứng dụng do tính chất không có luồng, vì vậy các cổ phần cao hơn một chút và bạn phải kiểm tra và nắm bắt rõ ràng mọi thứ.

Đối với những người đã làm cả trước và sau - và thích cả hai - không phải chuyển ngữ cảnh tinh thần từ ngôn ngữ đầu cuối sang ngôn ngữ cuối là một phần thưởng thực sự mà tôi nghĩ cuối cùng sẽ tăng năng suất trong đội ngũ của chúng tôi.


"Đối với một điều bạn đã cân nhắc là một lỗi nghiêm trọng sẽ làm sập toàn bộ ứng dụng do tính chất không có luồng, vì vậy các cổ phần cao hơn một chút và bạn phải kiểm tra và nắm bắt mọi thứ rõ ràng" - Đó là nỗi lo của tôi.
xúc tu

Vâng, quan điểm chính của tôi với tuyên bố đó là các nhà phát triển chỉ có giao diện người dùng thường không đặc biệt cầu kỳ khi xử lý ngoại lệ. Thôi nào, sắp hết 2017 rồi!
dave.zap

8

Chà, tôi không nghĩ rằng viết lại ứng dụng là một ý tưởng hay trừ khi nó hoạt động kém. Để trả lời câu hỏi của bạn:

  1. Node.js không phải là phép thuật. Ứng dụng của bạn có lượng người dùng khổng lồ, vì vậy không có cách nào chắc chắn rằng nó sẽ làm cho nó nhanh hơn.

  2. Vâng, vâng, Node.js thực tế tiêu thụ ít tài nguyên máy chủ hơn. Vì vậy, bạn không chỉ có thể tiết kiệm tiền cho tài nguyên mà còn có thể làm nhiều hơn với những tài nguyên hiện có. Điều này chủ yếu là do tính chất đơn luồng của Node.js. Không có chi phí chung của chủ đề bổ sung.

  3. Một lần nữa Node.js không phải là phép thuật. Đã nói rằng, có thể có một số sự thật trong đó. Node.js có một cộng đồng rất tích cực đã tạo ra hàng trăm mô-đun cho mọi tác vụ có thể. Vì vậy, rất có thể là hầu hết các công việc đã được thực hiện cho bạn. Bạn chỉ cần lắp các mảnh lại với nhau.

  4. Về mặt lý thuyết, vâng. Vì Node.js là JavaScript, bạn có thể chia sẻ mã giữa máy khách và máy chủ. Nhưng tôi không biết chính xác những gì sẽ được chia sẻ. Tôi chưa viết bất kỳ đoạn mã nào có thể sử dụng lại trên máy khách. Những việc chúng tôi làm trên máy chủ thường không liên quan gì đến máy khách. Quan trọng hơn với tôi là thiếu chuyển đổi ngữ cảnh. Tôi thấy việc viết mã trên cả máy khách và máy chủ bằng một ngôn ngữ dễ dàng hơn.

Vì Node.js là một luồng đơn, trừ khi được cấu hình rõ ràng để làm như vậy, nó không thể tận dụng nhiều CPU .

Hãy xem các ý kiến ​​quá. Họ cung cấp một số hiểu biết tốt về hoạt động của Node.js.


16
Ít tài nguyên hơn vì một chủ đề duy nhất? Bạn nghĩ những chủ đề thêm đó sẽ làm gì?
Joe

@ Theo như tôi hiểu thì họ sẽ thêm vào. Trong nút js, cách tốt nhất là loại bỏ yêu cầu càng nhanh càng tốt. Bằng cách hoàn thành nó trong một lần. Hoặc bằng cách tiếp tục lại lần sau. Để thành thật nút js là công nghệ duy nhất mà tôi đã tạo ra các ứng dụng sản xuất. Vì vậy, tôi có thể không phải là người tốt nhất để so sánh nó với các công nghệ phía máy chủ khác. Tại sao tôi lại kiềm chế không so sánh và chỉ đưa những gì tôi nghĩ là tôi biết về nút js câu trả lời của tôi.
Akshat Jiwan Sharma

7
Có, một luồng duy nhất chắc chắn giới hạn việc sử dụng tài nguyên, bởi vì máy chủ chỉ có thể thực hiện một việc một lần trên vòng lặp sự kiện. Nó cũng giới hạn việc sử dụng máy chủ, bởi vì nó chỉ có thể làm một việc một lúc. Điều rất quan trọng là trích dẫn các tính năng (đơn luồng) và các mặt trái và nhược điểm thay vì chỉ tăng. Node.js phù hợp với một số mục đích sử dụng nhưng đó là một ý tưởng tồi cho những người khác. Khi máy chủ nút đơn luồng của bạn có vấn đề về dung lượng, bạn có thể phải thêm một thể hiện nút khác. Bây giờ bạn có một máy chủ đa quy trình.
Joe

Tôi hiểu ý của bạn. Tôi sẽ cập nhật câu trả lời ngay sau đây (đọc sau một số nghiên cứu)
Akshat Jiwan Sharma

10
Nó không chỉ là về CPU. Lý do tại sao việc xử lý mọi yêu cầu càng nhanh càng tốt (trong một hệ thống đơn luồng không có sự tương tranh nào khác) là vì máy chủ không thể phục vụ nhiều yêu cầu cùng một lúc, vì vậy mọi yêu cầu phải đợi cho đến khi bạn xử lý xong tất cả các yêu cầu trước nó. Đồng thời, thực hiện đúng, có nghĩa là chờ đợi ít hơn. Việc sử dụng các luồng không phải là một cống hiệu suất và luồng đơn (theo mặc định hoặc theo cách khác) không phải là một lợi thế về hiệu suất.
Peter Hosey
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.