Chủ Nhật, 24 tháng 2, 2019

Ngôn ngữ lập trình nào là tốt nhất để phát triển một trang web có thể mở rộng tới hơn 100 triệu người dùng?

Nếu bạn muốn mở rộng quy mô, câu hỏi nên là về những ngôn ngữ không nên sử dụng.

Đừng sử dụng Ruby, đặc biệt là Rails. Ruby on Rails nói riêng rất chậm nên việc xử lý toàn bộ tải có thể tốn 100 lần. Chẳng hạn, điều đó có thể có nghĩa là chênh lệch giữa $50.000/ tháng chi phí máy chủ so với $500/tháng.

Không sử dụng bất kỳ ngôn ngữ nào không hỗ trợ các kiểu dữ liệu tĩnh (static type). Các kiểu dữ liệu tĩnh rất quan trọng để giúp bạn quản lý sự phức tạp trong bất kỳ hệ thống nào. [1]

Ngoài ra, bạn có thể chọn TypeScript + NodeJS, Go, Java hoặc thậm chí C++. Có những lựa chọn khác nhưng đó là những lựa chọn phổ biến nhất và sự phổ biến rất quan trọng nếu bạn muốn dễ dàng tìm kiếm những người có thể cùng làm việc để xây dựng dịch vụ của bạn. Go và NodeJS (với TypeScript) có lẽ là môi trường cho phép tạo ra năng suất cao nhất trong danh sách đó.

Câu hỏi thực sự cho 100 triệu người dùng là:
  • số người dùng đồng thời/cùng lúc?
  • hay người dùng không thường xuyên (đã đăng ký) chỉ với một nghìn người cùng lúc?

Một nhà phát triển có kỹ năng sử dụng bất kỳ ngôn ngữ nào ở trên có thể viết một ứng dụng máy chủ có thể xử lý vài nghìn người dùng đồng thời mà không có cơ sở hạ tầng đặc biệt (ngoài việc sử dụng cơ sở dữ liệu được quản lý, ví dụ như Amazon DynamoDB hoặc RDS).

Nếu bạn đang xem xét 100 triệu người dùng đồng thời, thì điều đó phụ thuộc rất nhiều vào nhu cầu chính xác của ứng dụng của bạn. Trái ngược với những gì người khác có thể yêu cầu, bạn không thể mong đợi bất kỳ ngôn ngữ hoặc thiết kế nào có thể mở rộng được ngay tức thì bằng cách "chỉ cần ném thêm phần cứng vào là có thể giải quyết vấn đề" nếu bạn không có được một thiết kế đúng đắn. Và đó là chìa khóa. Bạn cần một người có kinh nghiệm về tối ưu hóa và thiết kế kiến trúc máy chủ để không gặp phải thảm họa mở rộng.

Hiện tại, tôi đang làm việc trên một hệ thống với mục tiêu mở rộng là 10 triệu người dùng đồng thời. Khách hàng của tôi trước đây đã bán một doanh nghiệp với giá 50 triệu đô la và họ đã mua một tên miền rất đắt tiền cho dự án này, vì vậy họ có tài nguyên để có được nhiều người dùng. Khi tôi bắt đầu, đã có vấn đề về hiệu suất đối với chỉ một nhúm người dùng (nửa tá người dùng). Bây giờ hệ thống nó đã nhanh hơn và có thể xử lý vài nghìn, nhưng tôi đã có sẵn kế hoạch để mở rộng tới 10 triệu.

Và hơn cả một "ngôn ngữ lập trình đúng đắn", bạn cần có kế hoạch đúng đắn. Bạn không thể chọn nhóm phát triển của mình chỉ dựa trên ngôn ngữ lập trình. Những gì bạn cần là một kiến trúc sư hệ thống đẳng cấp thế giới để có thể hướng dẫn nhóm dự án. Nếu bạn không tin tôi, chỉ cần nhìn vào bảng đo đạc hiệu suất khung của các framework phổ biến[2]. Trong một số trường hợp, có một phạm vi biến đổi hiệu suất hơn 10.000 lần giữa hai framework, ngay cả khi cả hai framework đó đang sử dụng C++. Đó là sự khác biệt giữa $100/tháng và $1M/tháng về chi phí máy chủ, mặc dù cả hai máy chủ đều sử dụng ngôn ngữ nhanh nhất/xịn nhất.

Chọn đúng ngôn ngữ không đảm bảo điều gì cả, chọn đúng kiến trúc hệ thống (và cả kiến trúc sư) là quan trọng nhất.

Ghi chú:


--------------

Chia sẻ: