Các thành phần của hệ thống — Phần bạn tự xây dựng và phần giao cho dịch vụ bên ngoài

Bài viết này nằm trong khóa Kiến thức nền tảng về CNTT, xây dựng từ đầu những kiến thức CNTT thực tế tối thiểu mà bạn cần để lập trình và vibe coding.
Ứng dụng web chia thành bốn phần: frontend, backend, cơ sở dữ liệu và dịch vụ bên ngoài. Các sơ đồ cho bạn thấy bạn tự làm tới đâu và từ đâu thì đi dùng dịch vụ bên ngoài.

Bài viết này bàn về bốn thành phần tạo nên một ứng dụng web.

Ba trong số đó bạn tự xây dựng (tự phát triển và chuẩn bị ở phía mình), còn thành phần còn lại thì bạn dùng dưới dạng dịch vụ bên ngoài.

Các thành phần của my-app — ba phần tự xây dựng, và dịch vụ bên ngoài
my-app (ứng dụng đặt chỗ dành cho thành viên)
Các thành phần tự xây dựng
Frontend
  • Màn hình nhập ngày đặt chỗ và họ tên
  • Chạy trên thiết bị của người dùng
Backend
  • Xử lý nội dung đặt chỗ nhận được
  • Việc xác minh danh tính cũng làm ở đây
Cơ sở dữ liệu
  • Lưu dữ liệu đặt chỗ và hội viên
  • Về sau tìm kiếm và cập nhật được
Thành phần dùng dưới dạng dịch vụ bên ngoài
  • Gửi email xác nhận, thanh toán, hiển thị bản đồ
  • Gọi những chức năng do công ty khác vận hành
Khung ngoài là một ứng dụng. Ba thứ trong khung trên là các thành phần bạn tự xây dựng, còn khung dưới là thành phần dùng những chức năng do công ty khác vận hành.

Ranh giới giữa tự xây dựng và đi dùng nằm ở chỗ tiếp giáp của hai khung này.

Ứng dụng web chia thành bốn thành phần

Bốn thành phần là frontend (frontend), backend (backend), cơ sở dữ liệu (database) và dịch vụ bên ngoài (external service).

Bốn thành phần đảm nhận việc gì, và chạy ở đâu
Frontendphía màn hìnhBackendphía serverCơ sở dữ liệudữ liệu đã lưuDịch vụ bên ngoàicông ty khácVẽ màn hình,nhận đầu vàoXử lý dữ liệu gửilên rồi trả vềLưu dữ liệu ở dạngtìm và sửa đượcDùng chức năng củacông ty khácThiết bị người dùngServerServerServer bên ngoài
Mỗi hàng là một thành phần. Bên trái là tên, ở giữa là việc nó đảm nhận, bên phải là nơi nó chạy. Chỉ hàng dưới cùng mới có nơi chạy không thuộc phía bạn.
Bốn thành phần nối với nhau như thế nào
Thiết bị người dùngFrontendmàn hình, đầu vàoBackendphán đoán, xử lýCơ sở dữ liệuđặt chỗ, hội viênDịch vụ bên ngoàiemail, thanh toánNội dung đặt chỗĐọc và ghiNhờ qua API
Từ trái sang phải. Chỉ backend mới nối cả hai bên; frontend không nối thẳng tới cơ sở dữ liệu hay dịch vụ bên ngoài.

Bên nối tới cơ sở dữ liệu và dịch vụ bên ngoài là backend, còn từ màn hình thì không nối thẳng.

Server (server: máy tính luôn bật nguồn và lúc nào cũng tiếp nhận được yêu cầu từ những máy tính khác) mà hai thứ này chạy trên đó là một máy tính khác với thiết bị của người dùng.

Chỉ thành phần thứ tư, dịch vụ bên ngoài, là không tự xây dựng; bạn dùng thứ do công ty khác vận hành.

Khi có sự cố, bạn sửa được cái nào
Có sự cốxảy raFrontendbackend, DBDịch vụ bên ngoàiBạn tự sửa đượcChờ công ty kháckhôi phụcTìm nguyên nhânrồi sửa mãKiểm tra tình hìnhrồi báo người dùng
Một sự việc bên trái tách thành nhánh trên và nhánh dưới. Nhánh trên bạn sửa được vì phần hiện thực nằm ở phía bạn; nhánh dưới do công ty khác vận hành nên bạn phải chờ. Bên phải là việc bạn làm khi đó.

Ba thứ ở nhánh trên có phần hiện thực nằm ở phía bạn, nên người sửa cũng là bạn.

Riêng cơ sở dữ liệu thì bạn chọn một sản phẩm rồi vận hành, nhưng khi nó ngừng chạy, bên ra tay vẫn là phía bạn.

Chỉ dịch vụ bên ngoài là thứ bạn không tự sửa được khi nó hỏng, và bạn phải chờ công ty khác khôi phục.

Quyết định giao đi thứ gì cũng là quyết định phạm vi mà bạn không tự sửa được.

Bốn thành phần, một ranh giới

Ứng dụng web chia thành bốn phần: frontend, backend, cơ sở dữ liệu và dịch vụ bên ngoài.

Ba phần đầu bạn tự xây dựng, riêng dịch vụ bên ngoài thì bạn dùng chức năng do công ty khác vận hành, nên bên lo phần hiện thực và bên xử lý sự cố đều đổi tại ranh giới này.

Dịch vụ bên ngoài thì không tự xây dựng, mà dùng qua API

Những chức năng tốn nhiều công sức nếu tự lo, như gửi email xác nhận hay nhận thanh toán, thì giao cho dịch vụ bên ngoài.

Bộ quy tắc bạn tuân theo khi gọi một dịch vụ bên ngoài là API (Application Programming Interface: quy ước để các chương trình trao đổi dữ liệu với nhau).

Giao cho dịch vụ bên ngoài rồi, hai đầu vẫn thuộc về bạn
Dựng địa chỉ nhậnvà nội dungNhờ gửiqua APIDịch vụ bên ngoàigửi emailNhận kết quảvà ghi lạiViệc của bạnViệc của bạnViệc của dịch vụbên ngoàiViệc của bạnQuyết địnhgửi cái gìViết theo đúngdạng quy địnhCơ chế phát vàquản lý tỷ lệ đếnKiểm tra xem đãgửi được chưa
Hàng trên là luồng cho tới lúc email xác nhận được gửi đi. Chỉ hai ô ở giữa là việc của dịch vụ bên ngoài, còn ô ngoài cùng bên trái và ngoài cùng bên phải vẫn ở phía bạn.

Chỉ phần giữa chuyển sang dịch vụ bên ngoài, còn việc nhờ và việc kiểm tra thì vẫn ở phía bạn.

Thứ còn lại ở phía bạn chỉ là chỗ gửi yêu cầu đi và chỗ kiểm tra kết quả nhận lại.

Nếu tự xây dựng thì ngoài bản thân chức năng, việc duy trì nó cũng thành việc của bạn.

Ngay cả khi đã giao đi, việc gửi yêu cầu và việc kiểm tra kết quả vẫn ở lại với bạn.

Thứ chuyển sang dịch vụ bên ngoài chỉ là phần hiện thực.

Dịch vụ bên ngoài và API bên ngoài

Đôi khi bạn thấy hai từ được viết tách nhau: dịch vụ bên ngoài cho thứ bạn gọi, và API bên ngoài cho cửa gọi vào nó.

Cả hai chỉ cùng một thứ, khác nhau ở chỗ bạn nhìn nó như một dịch vụ hay như một cửa gọi.

Thành công hay thất bại được quyết riêng cho từng thành phần

Một thao tác có thể trải qua nhiều thành phần.

Đơn đặt chỗ có được xác nhận hay không thì do lần ghi vào cơ sở dữ liệu quyết định, còn email xác nhận có đi hay không thì do yêu cầu gửi tới dịch vụ bên ngoài quyết định.

Đơn đặt chỗ được xác nhận ngay tại thời điểm ghi được vào cơ sở dữ liệu.

Việc gửi email xác nhận diễn ra sau đó, như một xử lý riêng nhờ tới dịch vụ bên ngoài.

Dù email không tới nơi, đơn đặt chỗ đã xác nhận vẫn còn.

Cách chia này dùng được ngay khi bạn điều tra sự cố.

"Không thấy đơn đặt chỗ" và "Email xác nhận không tới" đưa bạn tới những thành phần khác nhau.

Với cái đầu, bạn kiểm tra backend và cơ sở dữ liệu; với cái sau, bạn kiểm tra yêu cầu gửi tới dịch vụ bên ngoài.

Cùng một lần đặt chỗ, nhưng triệu chứng khác thì thành phần cần kiểm tra cũng khác
Một thao tácđặt chỗ"Không thấyđơn đặt chỗ""Email xác nhậnkhông tới"Backend có nhậnđược khôngCó nhờ đượcdịch vụ bên ngoàiCó ghi được vàocơ sở dữ liệuDịch vụ bên ngoàigửi được không
Ở giữa là một thao tác đặt chỗ. Nhánh trên và nhánh dưới thành công hay thất bại riêng rẽ, nên triệu chứng khác thì chỗ cần kiểm tra cũng khác.

Nhánh trên là việc xác nhận, nhánh dưới là việc thông báo, và một bên hỏng thì bên kia vẫn giữ nguyên.

Thành bại được quyết theo từng thành phần

Khi một thao tác trải qua nhiều thành phần, thành công hay thất bại không được quyết chung một lượt.

Đơn đặt chỗ được xác nhận bởi lần ghi vào cơ sở dữ liệu, còn email xác nhận thì do yêu cầu gửi tới dịch vụ bên ngoài quyết định, nên khi nhận được báo cáo sự cố, trước hết bạn hãy tách ra xem xử lý nào trong hai cái đã hỏng.

QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1Trong bốn thành phần của ứng dụng web, cái nào bạn đi dùng chứ không tự xây dựng?

Câu 2Sau khi đơn đặt chỗ đã ghi vào cơ sở dữ liệu mà email xác nhận không tới thì sao?

Câu 3Khi bạn giao việc gửi email xác nhận cho dịch vụ bên ngoài, thứ gì ở lại phía bạn?