by Benjamin Smith | on 15 NOV 2023 | in AWS Step Functions, Serverless | Permalink | Share
Các nhà phát triển sử dụng AWS Step Functions, một dịch vụ quy trình công việc trực quan để xây dựng các ứng dụng phân tán, tự động hóa các quy trình CNTT và kinh doanh CNTT và quy trình kinh doanh, đồng thời điều phối các dịch vụ AWS với mã tối thiểu.
Step Functions redrive cho Standard Workflows cho phép bạn redrive việc thực thi quy trình làm việc không thành công từ điểm thất bại, thay vì phải khởi động lại toàn bộ quy trình làm việc. Bài đăng trên blog này giải thích cách sử dụng tính năng redrive mới để bỏ qua các bước quy trình làm việc không cần thiết và giảm chi phí redrive các quy trình làm việc thất bại
Xử lý lỗi quy trình làm việc
Bất kỳ trạng thái dòng công việc nào cũng có thể gặp phải lỗi khi chạy. Các lỗi xảy ra vì nhiều lý do khác nhau, bao gồm các vấn đề về định nghĩa máy trạng thái, lỗi tác vụ, quyền hạn không chính xác và ngoại lệ từ các dịch vụ xuôi dòng. Theo mặc định, khi một trạng thái báo cáo lỗi, Step Functions khiến việc thực thi dòng công việc không thành công. Step Functions cho phép bạn xử lý lỗi bằng cách thử lại, bắt và quay trở lại trạng thái xác định.
Bây giờ, bạn cũng có thể redrive quy trình công việc từ trạng thái không thành công, bỏ qua các bước quy trình làm việc thành công trước đó. Điều này dẫn đến việc hoàn thành quy trình làm việc nhanh hơn và chi phí thấp hơn. Bạn chỉ có thể redrive quá trình thực thi dòng công việc không thành công từ bước không thành công bằng cách sử dụng cùng một đầu vào như trạng thái không thành công cuối cùng. Bạn không thể redrive việc thực thi quy trình làm việc không thành công bằng cách sử dụng định nghĩa máy trạng thái khác với việc thực hiện quy trình công việc ban đầu.
Lựa chọn giữa thử lại và điều khiển lại
Sử dụng cơ chế thử lại cho các sự cố tạm thời như sự cố kết nối mạng hoặc dịch vụ không khả dụng tạm thời Bạn có thể đặt cấu hình số lần thử lại, cùng với khoảng thời gian và tốc độ lùi lại, cung cấp cho quy trình làm việc nhiều lần thử để hoàn thành nhiệm vụ thành công.
Trong các tình huống mà nguyên nhân cơ bản của lỗi đòi hỏi thời gian điều tra hoặc giải quyết lâu hơn, việc điều khiển lại trở thành một công cụ có giá trị. Hãy xem xét tình huống trong đó dịch vụ nguồn xuôi dòng gặp phải thời gian ngừng hoạt động kéo dài hoặc cần can thiệp thủ công, chẳng hạn như cập nhật cơ sở dữ liệu hoặc thực hiện thay đổi mã đối với hàm Lambda. Trong những trường hợp này, việc có thể redrive quy trình làm việc có thể cho bạn thời gian để giải quyết nguyên nhân gốc rễ trước khi tiếp tục thực hiện quy trình làm việc.
Kết hợp thử lại và điều khiển lại
Áp dụng chiến lược kết hợp kết hợp các cơ chế thử lại và điều khiển lại:
- Cơ chế thử lại: Định cấu hình một tập hợp các lần thử lại ban đầu cho các lỗi có thể giải quyết tự động. Điều này đảm bảo rằng các vấn đề tạm thời được giải quyết kịp thời và quy trình làm việc tiến hành mà không có sự chậm trễ không cần thiết.
- Bắt lỗi và điều khiển lại: Nếu cơ chế thử lại cạn kiệt mà không thành công, hãy cho phép trạng thái không thành công và sử dụng tính năng redrive để khởi động lại quy trình làm việc từ trạng thái không thành công cuối cùng. Cách tiếp cận này cho phép can thiệp khi lỗi vẫn tồn tại hoặc yêu cầu các hành động bên ngoài.
Giảm chi phí
AWS tính phí cho Quy trình công việc tiêu chuẩn (Standard Workflows) dựa trên số lần chuyển đổi trạng thái cần thiết để chạy khối lượng công việc. Step Functions đếm chuyển đổi trạng thái mỗi khi một bước trong dòng công việc của bạn chạy. Step Functions tính phí cho tổng số lần chuyển đổi trạng thái trên các máy trạng thái, bao gồm cả các lần thử lại. Chi phí là 0,025 USD cho mỗi 1.000 lần chuyển đổi trạng thái. Điều này có nghĩa là việc giảm số lần chuyển đổi trạng thái sẽ giảm chi phí chạy Standard Workflows bạn.
Nếu dòng công việc có nhiều bước, bao gồm trạng thái song song hoặc trạng thái bản đồ hoặc dễ bị lỗi yêu cầu chạy lại thường xuyên, tính năng mới này sẽ giảm chi phí phát sinh. Bạn chỉ phải trả tiền cho mỗi lần chuyển đổi trạng thái sau khi trạng thái không thành công và các chi phí đó cho mỗi dịch vụ hạ nguồn được gọi như một phần của quá trình chạy lại.
Ví dụ sau đây giải thích ý nghĩa chi phí của việc thử lại dòng công việc đã thất bại, có và không có redrive . Trong ví dụ này, quy trình làm việc Step Functions sẽ điều phối Amazon Transcribe để tạo bản chép lời văn bản từ tệp .mp4.
Vì trạng thái không thành công xảy ra vào cuối quy trình làm việc này, việc thực thi ổ đĩa lại không chạy các trạng thái thành công, làm giảm thời gian hoàn thành thành công tổng thể. Nếu quy trình làm việc này thất bại thường xuyên, việc giảm thời gian chuyển đổi và thời gian thực hiện ngày càng trở nên có giá trị.
Lần đầu tiên luồng công việc này chạy, trạng thái cuối cùng sử dụng hàm AWS Lambda để thực hiện yêu cầu HTTP không thành công với lỗi IAM. Điều này là do dòng công việc không có các quyền cần thiết để gọi hàm Lambda. Sau khi cấp các quyền cần thiết cho vai trò thực thi của dòng công việc, hãy điều khiển lại để tiếp tục dòng công việc từ trạng thái không thành công.
Sau khi nạp lại, dòng công việc Step Functions báo cáo lỗi khác. Lần này nó liên quan đến cấu hình của hàm Lambda. Đây là ví dụ về lỗi hạ nguồn xuôi dòng không yêu cầu cập nhật định nghĩa quy trình dòng công việc của tôi.
Sau khi giải quyết vấn đề cấu hình Lambda và điều khiển lại quy trình làm việc, quá trình thực thi hoàn tất thành công. Hình ảnh sau đây hiển thị chi tiết thực thi, bao gồm số lần nạp lại, tổng số lần chuyển đổi trạng thái và thời gian lái xe cuối cùng:
Bắt đầu với redrive
Redrive chỉ hoạt động cho Quy trình làm việc tiêu chuẩn. Bạn có thể điều khiển lại quy trình làm việc từ bước thất bại theo chương trình lập trình, thông qua AWS CLI hoặc AWS SDK hoặc sử dụng bảng điều khiển Step Functions, bảng điều khiển này cung cấp trải nghiệm trực quan cho người vận hành:
- Từ bảng điều khiển Step Functions, chọn quy trình làm việc không thành công mà bạn muốn điều khiển lại và chọn Redrive.
- Một phương thức xuất hiện với các chi tiết thực thi. Chọn Redrive execution Thực thi Redrive
Các trạng thái để redrive từ, định nghĩa quy trình làm việc và đầu vào trước đó là bất biến.
Để redrive quá trình thực thi quy trình làm việc theo lập trình từ điểm thất bại, hãy gọi hành động API Thực thi Redrive Execution mới. Việc thực thi dòng công việc tương tự bắt đầu từ trạng thái không thành công cuối cùng và sử dụng cùng một đầu vào với trạng thái không thành công cuối cùng từ quá trình thực thi dòng công việc không thành công ban đầu.
Tự động bắt Bắt lỗi quy trình làm việc thất bại và redrive theo cách tự động Chương trình Lập trình bắt các lần thực thi quy trình làm việc không thành công để điều khiển lại
Step Functions có thể xử lý khối lượng công việc một cách tự động mà không cần sự tương tác của con người hoặc có thể bao gồm sự can thiệp từ người dùng bằng cách triển khai .waitForTaskToken.
Redrive chỉ dành cho các lỗi chưa được xử lý và ngoài ý không mong muốn. Xử lý lỗi trong quy trình làm việc bằng cách sử dụng các cơ chế tích hợp sẵn cho catch, retry, để bắt, thử lại và định tuyến đến trạng thái Không thành công, không cho phép dòng công việc redrive điều khiển lại. Tuy nhiên, có thể phát hiện gần như trong thời gian thực khi quy trình làm việc không thành công và redrive theo cách chủ độngđiều khiển lại theo chương trình. Khi luồng công việc không thành công, luồng công việc đó sẽ phát hành sự kiện lên bus sự kiện mặc định của Amazon EventBridge. Sự kiện trông giống như đối tượng JSON sau:
Có bốn cặp khóa/giá trị mới trong sự kiện này:
“redriveCount”: 0,
“redriveDate”: null,
“redriveStatus”: “REDRIVABLE”,
“redriveStatusReason”: null,
Số lần chạy lại cho biết số lần quy trình công việc đã được điều khiển lại trước đó. Trạng thái redrive cho biết liệu quy trình công việc không thành công có đủ điều kiện để thực hiện redrive lái xe lại hay không.
Để chương trình lập trình điều khiển lại quy trình công việc từ trạng thái không thành công. Tạo quy tắc khớp với sự kiện này và định tuyến sự kiện vào dịch vụ đích để xử lý lỗi. Dịch vụ đích sử dụng API States.RedriveExecution để điều khiển lại quy trình làm việc.
Tải xuống và triển khai mẫu trước đó từ ví dụ này trên serverlessland.com.
Trong ví dụ sau, trạng thái đầu tiên gửi yêu cầu đăng đến API endpoint . Nếu yêu cầu không thành công do sự cố kết nối mạng hoặc độ trễ, trạng thái sẽ thử lại. Nếu thử lại không thành công, Step Functions sẽ phát ra sự kiện ‘ Step Functions Execution Status Change lên bus sự kiện mặc định EventBridge. Quy tắc EventBridge định tuyến sự kiện này đến một dịch vụ nơi bạn có thể khắc phục lỗi này rồi điều khiển lại tác vụ bằng API Step Functions.
Tính năng redrive mới cũng hỗ trợ trạng thái bản đồ phân tán.
RedriveNạp lại để thực thi quy trình làm việc child expresscon nhanh
Đối với việc thực thi dòng công việc con không thành công là Express WorkflowsDòng công việc Nhanh trong Bản đồ Phân tán (Distributed Map), chức năng redrive lại đảm bảo khởi động lại liền mạch từ đầu quy trình làm việc con. Điều này cho phép bạn giải quyết các vấn đề cụ thể cho các lần lặp riêng lẻ mà không cần khởi động lại toàn bộ bản đồ.
RedriveNạp lại để thực thi quy trình làm việc con tiêu chuẩn
Đối với việc thực thi dòng công việc con không thành công trong Bản đồ Phân tán (Express Workflows) là Bản đồ Phân phối (Distributed Map) Dòng công việc Chuẩn, tính năng redrive hoạt động theo cách tương tự trong Standard Workflows Quy trình làm việc Tiêu chuẩn độc lập. Bạn có thể khởi động lại lần lặp không thành công từ điểm thất bại của nó, bỏ qua các bước không nhất thiết phải cần thiết đã được thực hiện thành công.
Kết thúc
Step Functions redrive cho Standard Workflows cho phép bạn điều khiển lại quá trình thực thi quy trình làm việc không thành công từ điểm thất bại thay vì phải khởi động lại toàn bộ quy trình làm việc. Điều này dẫn đến việc hoàn thành quy trình làm việc nhanh hơn và chi phí thấp hơn để xử lý các lần thực thi không thành công. Điều này là do nó giảm thiểu số lượng chuyển đổi trạng thái và gọi dịch vụ hạ nguồn.
Truy cập Bộ sưu tập quy trình làm việc phi máy chủ để duyệt qua nhiều quy trình công việc có thể triển khai nhằm giúp xây dựng các ứng dụng serverless của bạn.