Câu hỏi thực sự của tôi là, liệu ngăn xếp công nghệ trên có thể quy mô 1.000.000 tin nhắn mỗi giây (văn bản, hình ảnh, video) không?
Chắc chắn nó có thể. Với thiết kế phù hợp và đủ phần cứng. Câu hỏi mà khách hàng của bạn nên hỏi thực sự không phải là liệu có thể thực hiện được điều đó lớn như vậy hay không, mà là với chi phí và tính thực tế, nó có thể được thực hiện và đó có phải là những lựa chọn tốt nhất hay không.
Hãy xem xét từng phần bạn đã đề cập:
node.js - Đối với một ứng dụng tập trung vào I / O, đó là một lựa chọn tuyệt vời cho quy mô cao và nó có thể mở rộng quy mô bằng cách triển khai nhiều CPU trong một cụm (cả đa quy trình trên mỗi máy chủ và đa máy chủ). Mức độ thực tế của loại thang đo này phụ thuộc rất nhiều vào loại dữ liệu được chia sẻ mà tất cả các quy trình máy chủ này cần truy cập. Thông thường, việc lưu trữ dữ liệu cuối cùng trở thành nút thắt cổ chai khó mở rộng hơn vì rất dễ ném nhiều máy chủ hơn khi xử lý yêu cầu. Không dễ dàng như vậy để ném thêm phần cứng vào một cửa hàng dữ liệu tập trung. Có nhiều cách để làm điều đó, nhưng nó phụ thuộc rất nhiều vào yêu cầu của ứng dụng về cách bạn thực hiện và mức độ khó của ứng dụng.
socket.io - Nếu bạn cần máy chủ đẩy các thông báo nhỏ một cách hiệu quả, thì socket.io có lẽ là cách tốt nhất để sử dụng vì nó hiệu quả nhất trong việc đẩy tới máy khách. Nó không phải là tuyệt vời ở tất cả các loại phương tiện giao thông. Ví dụ:tôi sẽ không di chuyển hình ảnh hoặc video lớn qua socket.io vì có nhiều cách được xây dựng có mục đích hơn để làm điều đó. Vì vậy, việc sử dụng socket.io phụ thuộc rất nhiều vào chính xác ứng dụng muốn sử dụng nó cho mục đích gì. Nếu bạn muốn đẩy video cho khách hàng, bạn cũng có thể chỉ đẩy một URL và yêu cầu khách hàng quay lại và yêu cầu video qua URL http thông thường bằng công nghệ quy mô cao nổi tiếng.
Redis - Một lần nữa, tuyệt vời cho một số thứ, không tuyệt vời ở mọi thứ. Vì vậy, nó thực sự phụ thuộc vào những gì bạn đang cố gắng làm. Những gì tôi đã giải thích trước đó là thiết kế của kho lưu trữ dữ liệu của bạn và số lượng giao dịch thông qua nó có thể là nguyên nhân dẫn đến các vấn đề về quy mô thực sự của bạn. Nếu tôi bắt đầu công việc này, tôi sẽ bắt đầu với sự hiểu biết về nhu cầu lưu trữ dữ liệu cho máy chủ, các giao dịch trên giây của nhiều loại khác nhau, chiến lược bộ nhớ đệm, dự phòng, dự phòng, độ bền của dữ liệu, v.v. và thiết kế mở rộng quyền truy cập vào dữ liệu trước. Tôi sẽ không hoàn toàn chắc chắn redis là lựa chọn ưu tiên. Tôi có thể đề nghị bạn cần một người có cơ sở dữ liệu quy mô cao làm cố vấn sớm trong dự án.
Nginx - Rất nhiều trang web quy mô lớn sử dụng nginx vì vậy nó chắc chắn là một công cụ tốt. Việc nó có chính xác là công cụ phù hợp với bạn hay không phụ thuộc vào thiết kế của bạn. Tôi có thể sẽ làm việc ở phần này cuối cùng vì nó có vẻ ít trọng tâm hơn trong thiết kế và khi phần còn lại của hệ thống được sắp xếp xong, bạn có thể xem xét những gì bạn cần ở đây.
Amazon EC2 - Một trong một số lựa chọn khả thi. Những lựa chọn này khó có thể so sánh trực tiếp giữa táo và táo. Các hệ thống quy mô lớn đã được xây dựng từ EC2 nên có bằng chứng về khái niệm ở đó và kiến trúc chung có vẻ phù hợp. Nếu bạn muốn biết nơi có những quả lựu đạn thật ở đó, bạn cần một nhà tư vấn đã từng thực hiện những thứ quy mô lớn trên EC2.
Amazon S3 - Cá nhân tôi biết một số trang web lưu trữ và băng thông rất cao sử dụng S3 cho cả video và hình ảnh. Nó hoạt động cho điều đó.
Vì vậy ... đây thường là những công cụ tốt để sử dụng nếu chúng được sử dụng đúng cách. Redis sẽ là một dấu chấm hỏi tùy thuộc vào nhu cầu lưu trữ của ứng dụng thực tế (bạn đã cung cấp không yêu cầu và không thể chọn cơ sở dữ liệu với không yêu cầu). Một câu trả lời hợp lý hơn sẽ dựa trên việc đưa ra một tập hợp các yêu cầu cấp cao để phân tích những gì hệ thống cần để có thể làm để phục vụ 1.000.000 bất cứ thứ gì. Những yêu cầu đó có thể được so sánh với các khả năng đã biết của một số phần này để bắt đầu một sân chơi bóng trong việc mở rộng hệ thống. Sau đó, bạn sẽ phải kết hợp một số bài kiểm tra điểm chuẩn để chạy một số bài kiểm tra trên một số phần nhất định của hệ thống. Phần lớn thành công của sự thất bại sẽ phụ thuộc vào cách ứng dụng được xây dựng và cách các công cụ được sử dụng như nó sẽ là công cụ nào được chọn. Bạn có thể tạo ra một quy mô thành công với nhiều loại công cụ khác nhau. Rất tiếc, Facebook chạy trên PHP (tốt, một PHP được sửa đổi, tùy chỉnh cao và không thực sự là PHP điển hình trong thời gian chạy).