Trong mô-đun này, bạn sẽ triển khai ứng dụng node.js dưới dạng một bộ dịch vụ liên kết với nhau ở phía sau Application Load Balancer (ALB). Sau đó, bạn sẽ sử dụng ALB để chuyển lưu lượng truy cập một cách liền mạch từ đơn khối sang các vi dịch vụ. Bắt đầu xây dựng

Đây là quy trình bạn sẽ thực hiện để triển khai các vi dịch vụ và chuyển lưu lượng truy cập của ứng dụng ra khỏi đơn khối một cách an toàn.

tổng quan về kiến trúc
  1. Chuyển lưu lượng truy cập
    Đây là cấu hình bắt đầu. Ứng dụng node.js đơn khối chạy trong một bộ chứa trên Amazon ECS.
  2. Bắt đầu các vi dịch vụ
    Khi sử dụng 3 hình ảnh bộ chứa mà bạn đã dựng và đẩy sang Amazon ECR ở mô-đun trước, bạn sẽ bắt đầu 3 vi dịch vụ trên cụm Amazon ECS hiện có của mình.
  3. Định cấu hình nhóm mục tiêu
    Như ở Mô-đun 2, bạn sẽ thêm một nhóm mục tiêu cho mỗi dịch vụ và cập nhật Quy tắc ALB để kết nối các vi dịch vụ.
  4. Tắt đơn khối
    Bằng việc thay đổi một quy tắc trong ALB, bạn sẽ bắt đầu định tuyến lưu lượng truy cập đến các vi dịch vụ đang chạy. Sau khi xác minh xong quá trình định tuyến lại lưu lượng truy cập, hãy tắt đơn khối.

Thời gian hoàn thành: 30 phút

Dịch vụ đã sử dụng:


Hãy làm theo hướng dẫn từng bước sau đây để triển khai các vi dịch vụ. Chọn số tương ứng của từng bước để mở rộng mục đó.

break-the-monolith
  • Bước 1. Viết định nghĩa tác vụ cho các dịch vụ của bạn

    Bạn sẽ triển khai 3 dịch vụ mới sang cụm mà bạn đã khởi chạy trong Mô-đun 2. Như ở Mô-đun 2, bạn sẽ viết Định nghĩa tác vụ cho mỗi dịch vụ.

    ⚐ LƯU Ý: Có thể thêm nhiều bộ chứa cho một định nghĩa tác vụ. Điều này có nghĩa là bạn có thể chạy cả 3 vi dịch vụ dưới dạng các bộ chứa khác nhau từ một dịch vụ. Tuy nhiên, phương thức này vẫn là đơn khối vì mỗi bộ chứa cần thay đổi quy mô tương ứng với dịch vụ. Mục tiêu của bạn là có 3 dịch vụ độc lập. Mỗi dịch vụ cần định nghĩa tác vụ riêng chạy một bộ chứa với hình ảnh dành cho dịch vụ tương ứng đó.

    Bạn có thể tạo các định nghĩa tác vụ này từ bảng điều khiển Amazon ECS hoặc đẩy nhanh tiến độ bằng cách viết định nghĩa tác vụ dưới dạng JSON. Để viết định nghĩa tác vụ dưới dạng tệp JSON, hãy thực hiện các bước sau:

    1. Từ bảng điều khiển Amazon Container Services, trong Amazon ECS, chọn Định nghĩa tác vụ.
    2. Trong trang Định nghĩa tác vụ, chọn nút Tạo định nghĩa tác vụ mới.
    3. Trong trang Chọn tính tương thích loại khởi chạy, chọn tùy chọn EC2, sau đó chọn Bước tiếp theo.
    4. Trong trang Định cấu hình định nghĩa tác vụ và bộ chứa, cuộn đến mục Ổ đĩa và chọn nút Định cấu hình qua JSON.
    5. Sao chép và dán đoạn mã sau vào trường JSON thay cho mã hiện tại.
      Nhớ thay các mã giữ chỗ [service-name], [account-ID], [region] và [tag].

    ⚐ Lưu ý: Các thông số sau đây được sử dụng cho định nghĩa tác vụ:

    • Tên = [service-name: bài đăng, chủ đề và người dùng] 
    • Hình ảnh = [URL hình ảnh kho Amazon ECR]:latest 
    • cpu = 256 
    • bộ nhớ = 256 
    • Cổng bộ chứa = 3000 
    • Bài đăng trên máy chủ = 0
    {
        "containerDefinitions": [
            {
                "name": "[service-name]",
                "image": "[account-id].dkr.ecr.[region].amazonaws.com/[service-name]:[tag]",
                "memoryReservation": "256",
                "cpu": "256",
                "essential": true,
                "portMappings": [
                    {
                        "hostPort": "0",
                        "containerPort": "3000",
                        "protocol": "tcp"
                    }
                ]
            }
        ],
        "volumes": [],
        "networkMode": "bridge",
        "placementConstraints": [],
        "family": "[service-name]"
    }

    ♻ Lặp lại các bước để tạo định nghĩa tác vụ cho mỗi dịch vụ:

    • bài đăng
    • chủ đề
    • người dùng
  • Bước 2. Định cấu hình Application Load Balancer: Nhóm mục tiêu

    Như trong Mô-đun 2, định cấu hình một nhóm mục tiêu cho mỗi dịch vụ (bài đăng, chủ đề và người dùng). Nhóm mục tiêu cho phép lưu lượng truy cập đến đúng dịch vụ chỉ định. Bạn sẽ định cấu hình nhóm mục tiêu bằng AWS CLI. Tuy nhiên, trước khi tiến hành, hãy đảm bảo bạn có tên VPC chính xác dùng cho hướng dẫn này:

    • Chuyển đến mục Cân bằng tải của Bảng điều khiển EC2.
    • Đánh dấu vào hộp kiểm bên cạnh bản mẫu, chọn tab Mô tả và tìm thuộc tính VPC (ở định dạng: vpc-xxxxxxxxxxxxxxxxx).
      ⚐ Lưu ý: Bạn sẽ cần thuộc tính VPC khi định cấu hình nhóm mục tiêu.

    Định cấu hình nhóm mục tiêu

    Nhập lệnh sau trong thiết bị đầu cuối để tạo một nhóm mục tiêu cho mỗi dịch vụ (bài đăng, chủ đề và người dùng). Ngoài ra, bạn sẽ tạo một nhóm mục tiêu (lưu lượng truy cập bỏ qua) để ngăn không cho lưu lượng truy cập đến đơn khối sau khi các vi dịch vụ chạy toàn phần. Hãy nhớ thay các mã giữ chỗ sau: [region], [service-name] và [vpc-attribute].

    Tên dịch vụ: bài đăng, chủ đề, người dùnglưu lượng truy cập bỏ qua

    aws elbv2 create-target-group --region [region] --name [service-name] --protocol HTTP --port 80 --vpc-id [vpc-attribute] --healthy-threshold-count 2 --unhealthy-threshold-count 2 --health-check-timeout-seconds 5 --health-check-interval-seconds 6
    nhóm mục tiêu
  • Bước 3. Định cấu hình quy tắc listener

    Listener kiểm tra các yêu cầu kết nối đến ALB của bạn để định tuyến lưu lượng truy cập cho phù hợp.

    Ngay bây giờ, cả 4 dịch vụ của bạn (đơn khối và 3 vi dịch vụ) đang chạy sau cùng một cân bằng tải. Để chuyển từ đơn khối sang các vi dịch vụ, bạn sẽ bắt đầu định tuyến lưu lượng truy cập đến các vi dịch vụ và dừng định tuyến lưu lượng truy cập đến đơn khối.

    Truy cập quy tắc listener

    Cập nhật quy tắc listener

    Tab này chỉ được có duy nhất một listener. Thực hiện các bước sau để chỉnh sửa quy tắc listener:

    • Trong cột Quy tắc, chọn Xem/chỉnh sửa quy tắc.
    • Trên trang Quy tắc, chọn nút cộng (+).
      Tùy chọn Chèn quy tắc sẽ xuất hiện trên trang. 
    • Sử dụng mẫu quy tắc sau đây để chèn các quy tắc cần thiết, bao gồm một quy tắc để duy trì lưu lượng truy cập đến đơn khối và một quy tắc cho mỗi vi dịch vụ:
      • IF Path = /api/[service-name]* THEN Chuyển tiếp đến [service-name]
        Ví dụ: IF Path = /api/posts* THEN Chuyển tiếp đến bài đăng
      • Chèn các quy tắc theo thứ tự sau:
        • api: /api* chuyển tiếp đến api
        • người dùng: /api/users* chuyển tiếp đến người dùng
        • chủ đề: /api/threads* chuyển tiếp đến chủ đề
        • bài đăng: /api/posts* chuyển tiếp đến bài đăng
    • Chọn Lưu.
    • Chọn mũi tên quay lại ở góc trên cùng bên trái của trang để quay lại bảng điều khiển cân bằng tải.
    Định cấu hình quy tắc listener của Application Load Balancer
  • Bước 4. Triển khai các vi dịch vụ của bạn

    Triển khai 3 vi dịch vụ (bài đăng, chủ đề và người dùng) cho cụm của bạn. Lặp lại các bước này cho mỗi vi dịch vụ trong số 3 vi dịch vụ của bạn:

    • Chuyển đến Bảng điều khiển Amazon ECS và chọn Cụm từ thanh menu bên trái.
    • Chọn cụm BreakTheMonolith-Demo, chọn tab Dịch vụ rồi chọn Tạo.
    • Trên trang Định cấu hình dịch vụ, chỉnh sửa các tham số sau (và giữ các giá trị mặc định cho các tham số không được liệt kê bên dưới):
      • Đối với Launch type (Loại khởi chạy), chọn EC2.
      • Đối với Task Definition (Định nghĩa tác vụ), chọn nút Enter a value (Nhập giá trị) để tự động chọn giá trị sửa đổi cao nhất.
        Ví dụ: api:1 
      • Đối với Service name (Tên dịch vụ), nhập tên dịch vụ (bài đăng, chủ đề hoặc người dùng).
      • Đối với Number of tasks (Số lượng tác vụ), nhập 1
    • Chọn Next step (Bước tiếp theo).
    • Trên trang Configure network (Định cấu hình mạng), mục Load balancing (Cân bằng tải), thực hiện như sau:
      • Đối với Loại cân bằng tải, chọn Application Load Balancer.
      • Đối với Vai trò IAM dịch vụ, chọn BreakTheMonolith-Demo-ECSServiceRole.
      • Đối với Tên cân bằng tải, xác minh rằng demo đã được chọn.
      • Trong mục Bộ chứa cho cân bằng tải, chọn nút Thêm vào cân bằng tải và chỉnh sửa như sau:
        • Đối với trường Cổng listener sản xuất, đặt thành 80:HTTP.
        • Đối với Tên nhóm mục tiêu, chọn nhóm thích hợp: (bài đăng, chủ đề hoặc người dùng)
    • Chọn Bước tiếp theo.
    • Trên trang Set Auto Scaling (Thiết lập Auto Scaling), chọn Next step (Bước tiếp theo).
    • Trên trang Review (Đánh giá), chọn Create Service (Tạo dịch vụ).
    • Chọn View Service (Xem dịch vụ).

    Tất cả các dịch vụ của bạn sẽ chỉ mất vài giây để khởi động. Kiểm tra kỹ tất cả các dịch vụ và tác vụ đang chạy và hoạt động trước khi bạn tiếp tục.

    Triển khai các vi dịch vụ với Amazon ECS
  • Bước 5. Chuyển lưu lượng truy cập đến các vi dịch vụ

    Các vi dịch vụ của bạn hiện đang chạy, nhưng tất cả lưu lượng truy cập vẫn đang truyền đến dịch vụ đơn khối. Để định tuyến lại lưu lượng truy cập đến các vi dịch vụ, hãy cập nhật quy tắc listener bằng cách thực hiện các bước sau đây:

    • Chuyển đến mục Cân bằng tải của Bảng điều khiển EC2.
    • Chọn hộp kiểm cạnh bản mẫu để xem chi tiết Cân bằng tải.
    • Chọn tab Listener.
      Tab này chỉ được có duy nhất một listener.
    • Trong cột Quy tắc, chọn Xem/chỉnh sửa quy tắc.
    • Trên trang Quy tắc, chọn nút trừ (-) trong menu trên cùng.
    • Xóa quy tắc đầu tiên (/api* chuyển tiếp đến api) bằng cách đánh dấu vào hộp kiểm bên cạnh quy tắc đó.
    • Chọn Xóa.
    • Cập nhật quy tắc mặc định để chuyển tiếp lưu lượng truy cập bỏ qua:
      • Chọn nút chỉnh sửa (bút chì) trong menu trên cùng.
      • Chọn nút chỉnh sửa (bút chì) bên cạnh quy tắc mặc định (HTTP 80: hành động mặc định).
      • Chọn nút chỉnh sửa (bút chì) trong cột THEN để chỉnh sửa Forward to (Chuyển tiếp đến).
      • Trong trường Nhóm mục tiêu, chọn lưu lượng truy cập bỏ qua.
      • Chọn nút Update (Cập nhật).

    Xem ví dụ về quy tắc đã cập nhật trong ảnh chụp màn hình dưới đây.

    Chuyển lưu lượng truy cập đến vi dịch vụ bằng Amazon EC2

    Tắt đơn khối: Giờ đây, khi lưu lượng truy cập truyền sang các vi dịch vụ, bạn có thể tắt dịch vụ đơn khối.

    • Quay lại cụm Amazon ECS BreakTheMonolith-Demo-ECSCluster.
    • Trong tab Services (Dịch vụ), đánh dấu vào hộp kiểm bên cạnh api và chọn Update (Cập nhật).
    • Trên trang Configure service (Định cấu hình dịch vụ), tìm Number of tasks (Số lượng tác vụ) và nhập 0.
    • Chọn Skip to review (Chuyển đến mục xem lại).
    • Chọn Update Service (Cập nhật dịch vụ).

    Lúc này, Amazon ECS sẽ ngắt kết nối với các bộ chứa mà dịch vụ đã triển khai trên cụm, sau đó dừng bộ chứa. Nếu làm mới danh sách Tác vụ hoặc Triển khai sau khoảng 30 giây, bạn sẽ thấy rằng số lượng tác vụ sẽ giảm còn 0. Dịch vụ vẫn hoạt động nên nếu cần khôi phục vì bất kỳ lý do nào, bạn chỉ cần cập nhật dịch vụ để triển khai thêm tác vụ.

    Ngoài ra, bạn cũng có thể xóa dịch vụ api. Trong tab Dịch vụ, đánh dấu vào hộp kiểm bên cạnh api, chọn Xóa và xác nhận thao tác xóa.

    Giờ bạn đã chuyển hoàn toàn node.js từ đơn khối sang vi dịch vụ mà không mất thời gian ngừng hoạt động!

  • Bước 6. Xác thực quá trình triển khai của bạn

    Tìm URL dịch vụ: Đây là URL mà bạn đã sử dụng trong Mô-đun 2 của hướng dẫn này.

    • Chuyển đến mục Cân bằng tải của bảng điều khiển EC2.
    • Chọn hộp kiểm cạnh bản mẫu để xem chi tiết Cân bằng tải.
    • Trong tab Mô tả, tìm tên DNS và chọn biểu tượng sao chép ở cuối URL. 
    • Dán tên DNS vào một cửa sổ hoặc tab mới của trình duyệt.

    Bạn sẽ thấy thông báo ‘Sẵn sàng nhận yêu cầu’.

    Xem giá trị cho mỗi dịch vụ: ALB định tuyến lưu lượng truy cập dựa trên URL yêu cầu. Để xem mỗi dịch vụ, bạn chỉ cần thêm tên dịch vụ vào cuối tên DNS của mình:

    • http://[DNS name]/api/users
    • http://[DNS name]/api/threads
    • http://[DNS name]/api/posts
    xem giá trị cho mỗi vi dịch vụ

    ⚐ LƯU Ý: Các URL này thực hiện đúng như khi triển khai đơn khối. Điều này rất quan trọng vì mọi API hoặc người tiêu dùng muốn kết nối với ứng dụng này sẽ không bị ảnh hưởng bởi những thay đổi do bạn thực hiện. Bạn không cần phải thay đổi bất kỳ phần nào khác trong cơ sở hạ tầng để chuyển từ đơn khối sang vi dịch vụ.

    Bạn cũng có thể sử dụng các công cụ như Postman để thử nghiệm API của mình.