Hành trình xây dựng một dịch vụ Web Phần 1: Từ ứng dụng đến hệ thống
Hành trình xây dựng một dịch vụ Web
Phần 1: Từ ứng dụng đến hệ thống
Một ứng dụng chạy được trên máy tính cá nhân chưa có nghĩa là nó đã sẵn sàng phục vụ người dùng.
Ở môi trường phát triển, chúng ta có thể khởi động ứng dụng bằng một vài lệnh, truy cập qua localhost và sử dụng cơ sở dữ liệu cài ngay trên máy. Tuy nhiên, người dùng bên ngoài không thể truy cập vào localhost. Nếu máy tính tắt, dịch vụ cũng dừng theo. Nếu dữ liệu bị mất hoặc ứng dụng gặp lỗi, chúng ta có thể không có cách khôi phục.
Đó là lúc cần phân biệt giữa một ứng dụng và một hệ thống.
Ứng dụng là phần mềm thực hiện một chức năng cụ thể, chẳng hạn như website tin tức, ứng dụng quản lý công việc hoặc hệ thống đăng bài. Hệ thống bao gồm nhiều thành phần phối hợp với nhau để ứng dụng có thể hoạt động ổn định, an toàn và liên tục.
Trong seri này, chúng ta sẽ xây dựng một dịch vụ Web đơn giản từ nền tảng đã có trong chuỗi bài Docker. Ứng dụng sẽ được đóng gói bằng container, chạy trên một máy chủ Linux và cung cấp cho người dùng thông qua Internet.
Kiến trúc tổng quát của hệ thống gồm các thành phần:
-
Người dùng truy cập bằng trình duyệt
-
Tên miền trỏ về địa chỉ máy chủ
-
Reverse proxy tiếp nhận yêu cầu
-
Container ứng dụng xử lý nghiệp vụ
-
Container cơ sở dữ liệu lưu trữ thông tin
-
Cơ chế sao lưu bảo vệ dữ liệu
-
Công cụ giám sát theo dõi hoạt động
Mỗi thành phần giải quyết một vấn đề riêng. Tên miền giúp người dùng không phải ghi nhớ địa chỉ IP. Reverse proxy đóng vai trò cổng vào, tiếp nhận yêu cầu từ Internet và chuyển tiếp đến ứng dụng phù hợp. Container giúp các thành phần được triển khai nhất quán. Cơ sở dữ liệu lưu trữ thông tin lâu dài, trong khi sao lưu giúp hệ thống có thể phục hồi khi xảy ra sự cố.
Việc đưa ứng dụng lên Internet cũng làm phát sinh nhiều câu hỏi:
-
Máy chủ cần được chuẩn bị như thế nào?
-
Các container giao tiếp với nhau bằng cách nào?
-
Làm sao kết nối tên miền với máy chủ?
-
Vì sao cần reverse proxy?
-
HTTPS bảo vệ dữ liệu ra sao?
-
Dữ liệu có bị mất khi container bị xóa không?
-
Làm thế nào phát hiện dịch vụ đang gặp lỗi?
-
Khi cập nhật thất bại, có thể khôi phục phiên bản cũ không?
Đây chính là nội dung của các phần tiếp theo. Chúng ta sẽ không xây dựng từng thành phần một cách rời rạc, mà phát triển cùng một hệ thống qua từng bước. Sau mỗi phần, hệ thống sẽ hoàn thiện thêm một chức năng và tiến gần hơn đến trạng thái có thể vận hành thực tế.
Điểm quan trọng cần nhớ là Docker chỉ giải quyết bài toán đóng gói và chạy ứng dụng. Một dịch vụ Web hoàn chỉnh còn cần mạng, máy chủ, bảo mật, lưu trữ, sao lưu và giám sát.
Ở phần tiếp theo, chúng ta sẽ bắt đầu từ nền tảng của toàn bộ hệ thống: chuẩn bị một máy chủ Linux có thể tiếp nhận và vận hành dịch vụ Web.