Bỏ qua menu, vào nội dung chính

Vì sao backend nên viết bằng Go (Golang): chi phí vận hành, tuyển người và khi nào không nên

Go biên dịch ra một tệp chạy duy nhất, tốn ít bộ nhớ, xử lý đồng thời tốt và giữ tương thích ngược, nên backend viết bằng Go rẻ để vận hành và ít vỡ khi nâng cấp. Bài giải thích từ góc chủ doanh nghiệp, kèm số đo từ backend Go hơn 100 nghìn dòng của ALODEV AIO và những trường hợp không nên chọn Go.

11 phút đọc

Backend nên viết bằng Go khi phần mềm phải chạy liên tục nhiều năm, phục vụ nhiều người cùng lúc và đội vận hành nhỏ. Go biên dịch toàn bộ chương trình thành một tệp chạy duy nhất, tốn ít bộ nhớ, tận dụng mọi lõi CPU mà không cần cấu hình thêm, và giữ lời hứa tương thích ngược từ năm 2012. Với chủ doanh nghiệp, bốn đặc điểm đó quy về ba thứ đo được: máy chủ nhỏ hơn, cập nhật ít rủi ro hơn, và ít sự cố do thư viện bên ngoài thay đổi.

Go không hợp mọi dự án. Website giới thiệu, trang bán hàng nhiều nội dung, hoặc hệ thống quản trị cần dựng nhanh hàng chục màn nhập liệu thì PHP/Laravel hay Node.js thường ra sản phẩm sớm hơn, và tuyển người dễ hơn. Phần cuối bài có danh sách các trường hợp đó.

ALODEV viết backend của ALODEV AIO, hệ thống chấm công, lương, giao việc và nhân sự mà chính công ty dùng hằng ngày, bằng Go. Đo ngày 25/09/2026: 103.785 dòng Go (không tính tệp kiểm thử), 145 tệp kiểm thử, khoảng 500 đường API theo lần rà soát kiến trúc ngày 07/09/2026. Mọi con số về ALODEV AIO trong bài lấy từ kho mã đó.

Go là gì, nói ngắn cho người không viết code

Go (hay Golang) là ngôn ngữ lập trình do Google công bố năm 2009, bản 1.0 ra năm 2012. Mã Go được biên dịch trước thành mã máy, giống C hay Rust, thay vì được thông dịch lúc chạy như PHP, Python hay JavaScript. Ngôn ngữ cố ý nhỏ: ít cú pháp, một cách định dạng mã chuẩn, thư viện chuẩn có sẵn máy chủ HTTP, mã hoá, JSON, kiểm thử. Docker, Kubernetes, Terraform và phần lớn công cụ hạ tầng đám mây hiện nay được viết bằng Go.

Người mua phần mềm cần quan tâm tới hệ quả của các lựa chọn đó. Ba mục dưới đi qua từng hệ quả kèm số đo.

Một tệp chạy: triển khai và quay lui đơn giản

Backend Node.js hay PHP cần máy chủ cài đúng phiên bản runtime, cài hàng trăm gói thư viện, và mỗi lần cập nhật là một lần chép cả thư mục mã. Backend Go được build thành một tệp. Máy chủ không cần cài Go. Cập nhật là thay tệp cũ bằng tệp mới rồi khởi động lại; quay lui là chép tệp cũ về.

Terminal build backend Go của ALODEV AIO: 103785 dòng, build 9,8 giây, tệp chạy 19 MB, 290 package
Build backend ALODEV AIO trên máy phát triển ngày 25/09/2026: 103.785 dòng Go biên dịch chéo cho Linux trong 9,8 giây ở lần đầu (19,5 giây ở một lần đo khác), 0,25 giây ở lần hai khi mã không đổi. Kết quả là một tệp khoảng 19 MB, liên kết tĩnh, chạy được trên máy chủ Linux trống.

Thời gian build ngắn có giá trị kinh doanh cụ thể: khi phát hiện lỗi trên hệ thống thật, khoảng cách từ lúc sửa xong tới lúc bản sửa chạy là vài chục giây cộng thời gian kiểm tra. Tệp chạy liên kết tĩnh cũng loại bỏ cả một nhóm sự cố kiểu "máy của dev chạy được, máy chủ thì không" do lệch phiên bản thư viện hệ thống.

Sự đơn giản này có mặt trái, và ALODEV đã gặp. Trước ngày 26/08/2026, bản production và bản staging (môi trường thử) của AIO chạy chung một đường dẫn tệp. Build một bản thử vào đường dẫn mặc định là ghi đè lên tệp production; lần khởi động lại production kế tiếp sẽ âm thầm chạy mã chưa được duyệt. Cách sửa là mỗi môi trường một tệp riêng và đối chiếu mã băm sau mỗi lần khởi động lại staging. Triển khai đơn giản thì cũng dễ triển khai nhầm, nên quy trình vẫn phải có.

Ít bộ nhớ, dùng hết lõi CPU mà không cần cấu hình

Để có số so sánh thay vì cảm nhận, ALODEV viết cùng một API nhỏ bằng Go và Node.js: trả danh sách 20 bản ghi chấm công dạng JSON. Một chương trình tạo tải gửi yêu cầu từ 64 kết nối đồng thời, mỗi lượt 10 giây, lặp ba lần.

Biểu đồ so sánh Go và Node.js: 81.800 so với 32.300 yêu cầu mỗi giây, bộ nhớ 25 MB so với 80 MB
Đo 25/09/2026 trên máy 24 luồng: Go xử lý trung bình khoảng 81.800 yêu cầu mỗi giây với bộ nhớ đỉnh 24,6 - 25,5 MB; Node.js một tiến trình khoảng 32.300 yêu cầu mỗi giây với 79,1 - 82,2 MB. Máy chủ và máy tạo tải chạy chung một máy nên số tuyệt đối thấp hơn thực tế; tỷ lệ giữa hai bên mới là thông tin đáng đọc.

Cần đọc con số này cho đúng. Node.js chạy mã JavaScript trên một luồng, nên một tiến trình chỉ dùng một lõi cho phần xử lý; muốn dùng nhiều lõi phải chạy nhiều tiến trình (PM2 cluster, như website alodev.vn đang chạy hai tiến trình). Làm vậy thu hẹp khoảng cách thông lượng, nhưng mỗi tiến trình lại mang theo phần bộ nhớ nền của nó. Go dùng mọi lõi trong một tiến trình nhờ goroutine, đơn vị xử lý đồng thời rất nhẹ do runtime của Go tự phân lịch.

Trong AIO, điều đó cho phép gom việc nền vào cùng tiến trình với API. Tệp khởi động của backend chạy bảy tác vụ định kỳ (nhắc việc chờ duyệt quá hạn, kiểm toàn vẹn dữ liệu, lặp lịch họp, dọn nhật ký lỗi...) mỗi tác vụ là một goroutine, song song với máy chủ HTTP. Không cần máy chủ riêng cho hàng đợi, không cần cron riêng. Đo ngày 15/09/2026 trên 4.456 yêu cầu thật, backend trả lời với trung vị 0,8 ms và phân vị 95 là 6,5 ms.

Ít thư viện ngoài, tương thích ngược: rẻ để giữ sống nhiều năm

Chi phí lớn nhất của một phần mềm doanh nghiệp thường đến sau khi bàn giao: vá bảo mật, nâng phiên bản, sửa chỗ vỡ khi thư viện đổi cách hoạt động. Một dự án Node.js điển hình kéo theo vài trăm tới vài nghìn gói phụ thuộc gián tiếp; mỗi gói là một nguồn cảnh báo bảo mật và một khả năng vỡ khi nâng cấp.

Tệp go.mod của ALODEV AIO với mười thư viện khai báo trực tiếp
Tệp go.mod thật của ALODEV AIO: mười thư viện khai báo trực tiếp cho toàn bộ backend khoảng 500 đường API. Phần lớn chức năng (HTTP, JSON, mã hoá, kiểm thử, nhật ký có cấu trúc) đến từ thư viện chuẩn của Go.

Thư viện chuẩn của Go đủ dày để viết máy chủ web mà không cần framework. Lệnh go list trên AIO đếm 290 package được biên dịch vào tệp chạy, phần lớn là thư viện chuẩn do chính đội Go bảo trì. Mỗi thư viện ngoài ít đi là một nhà cung cấp ít đi mà doanh nghiệp phải tin.

Lời hứa tương thích Go 1 (go.dev/doc/go1compat, tra ngày 25/09/2026) cam kết chương trình viết đúng đặc tả Go 1 tiếp tục biên dịch và chạy qua các bản 1.x, trừ vài ngoại lệ hẹp như lỗi bảo mật. Go ra bản lớn khoảng sáu tháng một lần (Go 1.27 ngày 19/08/2026), mỗi bản được vá tới khi có hai bản mới hơn, tức khoảng một năm. Với doanh nghiệp, điều đó nghĩa là nâng phiên bản Go là việc lặp lại mỗi năm, thường chỉ đổi một dòng trong go.mod rồi chạy lại bộ kiểm thử, và nên nằm trong hợp đồng bảo trì.

So sánh Go với các lựa chọn phổ biến cho backend

Đặc điểm vận hành của năm lựa chọn backend thường gặp ở dự án doanh nghiệp Việt. Tỷ lệ sử dụng lấy từ Stack Overflow Developer Survey 2025, mục ngôn ngữ, toàn bộ người trả lời (tra 25/09/2026).
Tiêu chíGoNode.js / TypeScriptPHP / LaravelJava / SpringPython / Django
Triển khaiMột tệp chạyRuntime + thư mục node_modulesPHP + máy chủ web + thư mục mãJVM + tệp jarPython + môi trường ảo
Bộ nhớ nền một tiến trìnhThấp (13 MB lúc nghỉ trong phép đo trên)Trung bình (62 MB lúc nghỉ)Theo từng yêu cầuCaoTrung bình
Dùng nhiều lõi CPUSẵn trong một tiến trìnhCần chạy nhiều tiến trìnhNhiều tiến trình PHP-FPMSẵn, nhiều luồngCần nhiều tiến trình
Dựng nhanh màn quản trị nhập liệuChậm, ít bộ công cụ sẵnTrung bìnhNhanh (hệ sinh thái Laravel)Trung bìnhNhanh (Django admin)
Tỷ lệ dev sử dụng (SO 2025)16,4%66% JS, 43,6% TS18,9%29,4%57,9%

Bảng cho thấy chỗ đánh đổi thật. Go thắng ở phần chạy lâu dài: triển khai, bộ nhớ, đồng thời. Go thua ở tốc độ dựng màn nhập liệu và ở số người biết dùng. Chưa tới một phần năm lập trình viên trong khảo sát dùng Go, so với khoảng hai phần ba dùng JavaScript.

Cái giá phải trả khi chọn Go

Tuyển người khó hơn, và đây là rủi ro lớn nhất

Doanh nghiệp thuê ngoài viết backend Go cần hỏi trước: nếu đơn vị làm biến mất, ai tiếp quản được? Nguồn lập trình viên Go tại Việt Nam mỏng hơn PHP hay JavaScript. Bù lại, Go dễ đọc: ngôn ngữ nhỏ và định dạng mã bắt buộc thống nhất, nên một lập trình viên từ ngôn ngữ khác thường đọc hiểu mã Go có sẵn sau vài tuần. Điều kiện là mã có tài liệu và có kiểm thử; đây là thứ nên ghi vào hợp đồng.

Mã dài dòng hơn

Go bắt kiểm tra lỗi tường minh sau mỗi thao tác có thể hỏng. Kho AIO có 1.488 dòng if err != nil. Lập trình viên mới thường thấy phiền; với người vận hành, đó là lý do lỗi hiếm khi bị nuốt im lặng. Mã dài hơn cũng đồng nghĩa công viết ban đầu nhiều hơn một chút so với Laravel hay Django cho cùng một màn quản trị.

Ít framework trọn gói

Go không có một Laravel hay Django với phân quyền, trang quản trị, gửi mail dựng sẵn. Phần lớn đội Go tự ghép từ thư viện chuẩn và vài thư viện nhỏ. Kết quả gọn và dễ kiểm soát, nhưng giai đoạn đầu chậm hơn. Ở AIO, lần rà soát ngày 07/09/2026 còn chỉ ra một hệ quả: chưa có tệp đặc tả API sinh tự động, nên kiểu dữ liệu phía web là bản chép tay, đổi tên một trường ở Go thì trình biên dịch phía web không phát hiện được. Đó là việc phải tự dựng, framework trọn gói thường có sẵn.

Khi nào KHÔNG nên viết backend bằng Go

  • Website nội dung, trang giới thiệu, trang tin tức: không có tải đồng thời đáng kể, WordPress hoặc Next.js đủ và rẻ hơn nhiều.
  • Dự án cần ra bản chạy thử trong vài tuần với hàng chục màn nhập liệu: Laravel hoặc Django dựng nhanh hơn rõ rệt.
  • Đội nội bộ sẽ tự bảo trì và chỉ quen PHP hoặc JavaScript: chi phí học và rủi ro người nghỉ việc lớn hơn lợi ích vận hành.
  • Phần mềm gắn chặt vào một hệ sinh thái sẵn có (Odoo viết bằng Python, WooCommerce viết bằng PHP): viết phần mở rộng bằng chính ngôn ngữ của hệ đó.
  • Việc chính là phân tích dữ liệu hoặc học máy: Python có hệ thư viện mà Go không có tương đương.

Ngược lại, Go đáng chọn khi phần mềm là hệ thống vận hành lõi (chấm công, lương, kho, đơn hàng) chạy nhiều năm, có nhiều người dùng đồng thời hoặc nhiều tác vụ nền, và doanh nghiệp muốn chi phí máy chủ, bảo trì thấp và dễ dự đoán.

Câu hỏi thường gặp

Golang có nhanh hơn Node.js không?

Trong phép đo nhỏ của ALODEV, Go xử lý khoảng 2,5 lần số yêu cầu mỗi giây và dùng khoảng một phần ba bộ nhớ so với Node.js một tiến trình. Với ứng dụng doanh nghiệp, cơ sở dữ liệu và mạng thường là nút thắt trước ngôn ngữ, nên lợi thế lớn nhất của Go là chi phí máy chủ và độ ổn định, tốc độ thuần chỉ đứng sau.

Backend Go có tốn máy chủ đắt không?

Không. Trong phép đo trên, tiến trình Go dùng khoảng 25 MB bộ nhớ khi chịu 64 kết nối đồng thời liên tục, nên backend cho doanh nghiệp vừa thường chạy chung một máy chủ nhỏ với cơ sở dữ liệu. Phần tốn tài nguyên hơn thường là chính cơ sở dữ liệu.

Thuê đơn vị viết backend Go thì cần yêu cầu gì trong hợp đồng?

Bàn giao mã nguồn kèm lệnh build, bộ kiểm thử chạy được, tài liệu API và hướng dẫn triển khai. Với Go, thêm cam kết nâng phiên bản Go ít nhất mỗi năm một lần vì mỗi bản chỉ được vá khoảng một năm.

Có nên viết lại backend PHP đang chạy ổn sang Go không?

Thường là không. Viết lại tốn công bằng làm mới và mang rủi ro mất nghiệp vụ ẩn trong mã cũ. Chỉ nên cân nhắc khi có vấn đề đo được: máy chủ quá tải, chi phí hạ tầng cao, hoặc không còn ai bảo trì mã cũ.

Go có dùng được với PostgreSQL, MySQL không?

Có. Go có driver ổn định cho cả hai; ALODEV AIO dùng pgx để làm việc với PostgreSQL. Bài tiếp theo trong series giải thích vì sao PostgreSQL là lựa chọn cơ sở dữ liệu mặc định của ALODEV.

Bài viết liên quan

Ký sự lập trình
Ký sự lập trình11 phút đọc

Môi trường staging là gì, vì sao phần mềm doanh nghiệp phải có

Staging là bản sao chạy thử của phần mềm, giống hệ thống thật nhưng có dữ liệu riêng, để mọi thay đổi được đo trước khi chạm vào người dùng. Google SRE ghi khoảng 70% sự cố đến từ thay đổi trên hệ thống đang chạy. Bài giải thích staging khác bản xem thử ở đâu, bốn sự cố ALODEV gặp khi ranh giới staging và production bị lẫn, và những câu cần hỏi đơn vị làm phần mềm.

Ký sự lập trình11 phút đọc

Viết phần mềm theo yêu cầu: vì sao vẫn cần khi SaaS tràn ngập

Doanh nghiệp lớn trung bình dùng 305 ứng dụng SaaS và bỏ phí 36% giấy phép. Viết phần mềm theo yêu cầu vẫn cần cho phần quy trình làm nên khác biệt của công ty, phần mà gói có sẵn không diễn đạt được. Bài giải thích chỗ nào nên mua, chỗ nào nên may đo, cái giá thật của phần mềm riêng, và cách chia đôi hợp lý, kèm số đo từ phần mềm nội bộ của ALODEV.

Ký sự lập trình10 phút đọc

PHP và Laravel năm 2026: vì sao vẫn sống và khi nào doanh nghiệp nên chọn

PHP vẫn chạy khoảng 70% website có ngôn ngữ máy chủ nhận diện được, Laravel ra bản lớn mỗi năm và cam kết vá bảo mật hai năm cho từng bản. Bài giải thích vì sao PHP chưa chết, Laravel hợp với loại dự án nào, khi nào nên chọn ngôn ngữ khác, và những câu cần hỏi đơn vị làm phần mềm trước khi ký.

Nhận bài mới

Để lại email để nhận bài mới của series Ký sự lập trình, hoặc theo dõi bằng RSS.

RSS Ký sự lập trình

Email chỉ dùng để gửi bài mới, xem Chính sách bảo mật.

Trao đổi về dự án

Cần tư vấn?