Link to original video by Anton Putra
Node.js vs Go (Golang): Performance (Latency - Throughput - Saturation - Availability)

Tóm tắt ngắn:
- Video so sánh hiệu năng của Node.js và Golang trong việc xây dựng ứng dụng web, tập trung vào độ trễ, thông lượng, điểm bão hòa và khả năng hoạt động.
- Sử dụng Kubernetes trên AWS với các instance EC2 thế hệ mới để triển khai và kiểm tra cả hai ứng dụng. Các chỉ số được đo bao gồm sử dụng CPU, bộ nhớ, khả năng hoạt động, giới hạn CPU bởi Kubernetes, áp lực mạng, và lượng dữ liệu truyền nhận. Cả hai ứng dụng được thử nghiệm với và không có lớp lưu trữ dữ liệu (Postgres).
- Kết quả cho thấy Golang có hiệu năng vượt trội so với Node.js, xử lý được lượng request lớn hơn nhiều trước khi gặp sự cố. Node.js cho thấy điểm yếu về khả năng xử lý request lớn và quản lý tài nguyên.
- Phương pháp thử nghiệm bao gồm tăng dần số lượng request cho đến khi ứng dụng gặp sự cố, sử dụng Kubernetes Job và nhiều replicas.
Tóm tắt chi tiết:
Video được chia thành hai phần chính: phần thử nghiệm đầu tiên (không có cơ sở dữ liệu) và phần thử nghiệm thứ hai (có cơ sở dữ liệu Postgres).
Phần 1: Thử nghiệm không có cơ sở dữ liệu:
- Hai ứng dụng web, một được viết bằng Node.js (sử dụng Express.js) và một bằng Golang (sử dụng thư viện chuẩn), được triển khai trên cụm Kubernetes trên AWS.
- Các chỉ số hiệu năng như sử dụng CPU, bộ nhớ, khả năng hoạt động, giới hạn CPU, áp lực mạng và lượng dữ liệu truyền nhận được theo dõi.
- Thử nghiệm được thực hiện bằng cách tăng dần số lượng request cho đến khi cả hai ứng dụng bắt đầu gặp sự cố. Thời gian chờ (timeout) được đặt là 1 giây.
- Kết quả cho thấy Golang có hiệu năng tốt hơn đáng kể so với Node.js. Golang xử lý được khoảng 70,000-80,000 request/giây trước khi bị OOM-killed (out of memory) bởi Kubernetes, trong khi Node.js chỉ đạt khoảng 9,000 request/giây trước khi bị tắc nghẽn ở mức sử dụng CPU 60%. Node.js cũng sử dụng nhiều CPU và bộ nhớ hơn. Độ trễ của Node.js cũng cao hơn đáng kể so với Golang.
- Người trình bày đề cập đến việc có thể cải thiện hiệu năng của Node.js bằng cách sử dụng chế độ cluster, nhưng cho rằng tăng số lượng replicas sẽ hiệu quả hơn.
Phần 2: Thử nghiệm có cơ sở dữ liệu Postgres:
- Thêm một lớp lưu trữ dữ liệu bằng Postgres vào cả hai ứng dụng. Ứng dụng nhận request POST với payload JSON, tạo UUID và lưu vào cơ sở dữ liệu.
- Kích thước pool kết nối tối đa được đặt là 20 cho cả hai ứng dụng.
- Các chỉ số được đo bao gồm độ trễ của client, độ trễ của cơ sở dữ liệu, kích thước pool kết nối, sử dụng CPU, bộ nhớ, khả năng hoạt động và giới hạn CPU.
- Kết quả cho thấy độ trễ khi chèn dữ liệu vào cơ sở dữ liệu ban đầu tương đối giống nhau giữa hai ứng dụng. Tuy nhiên, Node.js lại nhanh chóng bị tắc nghẽn ở mức 60% sử dụng CPU tại khoảng 4,000 request/giây, trong khi Golang đạt đến điểm bão hòa ở mức cao hơn nhiều (khoảng 7,000 request/giây). Cả hai ứng dụng đều đạt đến giới hạn kích thước pool kết nối.
- Người trình bày nhấn mạnh việc sử dụng driver Postgres nhanh nhất cho Node.js trong thử nghiệm này.
Tổng kết: Video chứng minh Golang có hiệu năng vượt trội so với Node.js trong các bài kiểm tra về xử lý request, đặc biệt là khi tải cao và khi có thêm lớp lưu trữ dữ liệu. Người trình bày khuyến khích người xem gửi pull request để cải thiện mã nguồn của các ứng dụng được sử dụng trong video.