Một website bán hàng đơn giản dần phình to, một máy chủ phải ôm đồm mọi việc. Cuốn Azure Functions Succinctly kể lại cách tác giả chia nhỏ hệ thống thành những hàm độc lập trên đám mây. Bài học ấy đáng giá với bất kỳ ai học lập trình.
Trong một quán ăn nhỏ, chủ quán có thể vừa nấu, vừa bưng, vừa thu tiền. Khi quán đông lên, một người làm hết sẽ không kham nổi. Chỉ cần người đó ốm là quán đóng cửa. Giải pháp là chia việc: người nấu, người chạy bàn, người thu ngân. Phần mềm cũng vậy. Bài học chia việc này được kể rất sinh động trong cuốn Azure Functions Succinctly của tác giả Ed Freitas.
Câu chuyện về Pluglock
Tác giả từng tự viết một tiện ích nhỏ tên Pluglock để bảo vệ máy tính xách tay khi đi công tác. Nếu ai đó rút dây sạc trong lúc chủ máy vắng mặt, phần mềm sẽ hú còi báo động, khóa phiên làm việc và chỉ cho đúng chủ máy đăng nhập lại.
Để bán tiện ích này, ông làm một website đơn giản có nút "Mua". Nhưng rồi việc cứ thế nhiều thêm. Khi có người mua, cổng thanh toán gửi thông báo về, hệ thống phải tạo mã bản quyền, gửi email cho khách. Phần mềm cần kiểm tra bản quyền còn hợp lệ không. Người dùng có thể gửi báo cáo vị trí máy. Mỗi đêm lúc 1 giờ, một tiến trình tổng hợp hoạt động trong ngày rồi gửi báo cáo qua email.
.png)
Hình 1. Kiến trúc "nguyên khối": một máy chủ web gánh mọi việc từ trả trang web, tạo bản quyền, gửi email đến chạy báo cáo đêm
Kết quả là một máy chủ duy nhất làm tất cả. Dân lập trình gọi đây là kiến trúc nguyên khối (monolithic). Sách nhận xét kiểu hệ thống này rất khó mở rộng khi lượng người dùng tăng.
Chia nhỏ thành những hàm độc lập
Azure Functions là dịch vụ trên đám mây Microsoft Azure cho phép viết từng hàm nhỏ, mỗi hàm chạy khi có một sự kiện xảy ra. Sự kiện có thể là đồng hồ hẹn giờ, một file mới được tải lên, một tin nhắn mới trong hàng đợi hay một lời gọi từ website khác (webhook).
Với cách tiếp cận này, tác giả tách hệ thống Pluglock ra. Một hàm nhận thông báo mua hàng rồi đặt tin nhắn vào hàng đợi. Hàm thứ hai đọc tin nhắn, tạo file bản quyền. File vừa xuất hiện lại kích hoạt hàm thứ ba gửi email cho khách. Một hàm khác chuyên kiểm tra bản quyền, một hàm chạy báo cáo mỗi đêm.
.png)
Hình 2. Kiến trúc serverless: mỗi việc trở thành một hàm Azure riêng, nối với nhau qua hàng đợi, kho lưu trữ và cơ sở dữ liệu
Mỗi hàm như một nhân viên chỉ lo một việc. Việc nào đông thì Azure tự tăng thêm người cho việc đó, việc nào vắng thì không tốn tài nguyên.
Vì sao cách làm này hấp dẫn?
Theo sách, điểm khác biệt lớn nhất là lập trình viên không phải viết phần mã "hậu cần" như lắng nghe sự kiện, quản lý máy chủ. Khung Azure Functions lo hết, người viết chỉ tập trung vào nghiệp vụ. Không cần một máy chủ chạy suốt ngày đêm. Hàm nào không có việc thì không mất tiền.
Sách cũng liệt kê các trường hợp nên dùng: làm nhanh bản thử nghiệm, tự động hóa quy trình nội bộ như gửi thông báo vào Slack khi phần mềm biên dịch lỗi, tách nhỏ hệ thống nguyên khối, kết nối các hệ thống với nhau như Twitter với Dropbox. Tác giả cũng thừa nhận Azure Functions không phải lúc nào cũng phù hợp, cần chọn đúng chỗ.
Học được gì từ câu chuyện này?
Bài học lớn nhất nằm ở tư duy thiết kế. Một chương trình tốt nên được chia thành những phần nhỏ, mỗi phần làm tốt một việc, liên kết với nhau một cách lỏng lẻo. Khi một phần cần sửa hay cần mở rộng, các phần khác không bị ảnh hưởng. Đây là nguyên lý dùng chung cho rất nhiều kiến trúc phần mềm hiện đại, từ microservices đến serverless.
Người học cũng làm quen với lập trình hướng sự kiện, với các dịch vụ lưu trữ trên đám mây như hàng đợi, kho file, bảng dữ liệu. Các ví dụ trong sách dùng C# và JavaScript, hai ngôn ngữ phổ biến mà sinh viên công nghệ thông tin đều được học.
Nghề nghiệp gắn với kiến trúc đám mây
Hiểu cách chia nhỏ hệ thống và vận hành trên đám mây là năng lực cần cho lập trình viên backend, kỹ sư điện toán đám mây, kiến trúc sư phần mềm. Với người tự kinh doanh sản phẩm số như chính tác giả, kỹ năng này giúp một người cũng vận hành được hệ thống bán hàng phục vụ khách khắp nơi mà không cần phòng máy riêng.
Bắt đầu từ một việc nhỏ
Pluglock bắt đầu từ nhu cầu rất đời thường: không muốn bị mất laptop ở sân bay. Từ đó, tác giả đi đến cả một hệ thống bán hàng chạy trên đám mây. Học lập trình cũng vậy, bạn bắt đầu từ một vấn đề nhỏ của chính mình, rồi từng bước học cách làm cho giải pháp ấy lớn lên, phục vụ được nhiều người hơn.
Trường Cao đẳng Công nghệ thông tin TP.HCM
- Website: itc.edu.vn - Email tuyển sinh: tuyensinh@itc.edu.vn
- Điện thoại: (028) 386 050 03 - Hotline: 093 886 1080 / 097 500 5356
- Địa chỉ: 12 Trịnh Đình Thảo, P. Tân Phú, TP.HCM
ThS. Trương Châu Long - Trưởng bộ môn CNTT & HTTT