Amazon Payment Services là nhà cung cấp dịch vụ thanh toán hoạt động trên khắp các khu vực địa lý Trung Đông và Bắc Phi (MENA). Sứ mệnh của chúng tôi là cung cấp cho các doanh nghiệp trực tuyến trải nghiệm thanh toán hợp lý và đáng tin cậy. Chúng tôi cung cấp một cổng thanh toán trực tuyến an toàn, dễ sử dụng và an toàn
Amazon Payment Services có các chuyên gia khu vực về công nghệ xử lý thanh toán ở 8 quốc gia trong Hội đồng hợp tác vùng Vịnh (GCC) và các khu vực thuộc Levant. Chúng tôi cung cấp các giải pháp phù hợp với các doanh nghiệp bằng đồng nội tệ và quốc tế của họ. Chúng tôi liên tục cải tiến và mở rộng hệ thống của mình để cung cấp khả năng xử lý gần như thời gian thực. Mọi thứ chúng tôi làm đều nhằm mục đích tạo ra mạng lưới thanh toán an toàn, đáng tin cậy và bổ ích kết nối Trung Đông với phần còn lại của thế giới.
Các trường hợp sử dụng queue cho message
Doanh nghiệp của chúng tôi đã xây dựng một hệ thống queueing có thông lượng cao và linh hoạt để gửi thông điệp đến khách hàng của chúng tôi. Việc triển khai của chúng tôi dựa vào cluster tự quản lý của RabbitMQ và consumers. Consumer là một phần mềm đăng ký một topic trong hàng đợi. Khi được đăng ký, bất kỳ tin nhắn nào được xuất bản trong hàng đợi được gắn thẻ có cùng topic sẽ được người tiêu dùng tiếp nhận để xử lý. Các cluster và consumer đều được triển khai trên các phiên bản Amazon Elastic Compute Cloud (Amazon EC2). Khi doanh nghiệp của chúng tôi mở rộng quy mô, chúng tôi phải đối mặt với những thách thức với kiến trúc hiện có của mình.
Những thách thức với kiến trúc message queue của chúng tôi
Quản lý một cụm RabbitMQ với các node của nó được triển khai bên trong các phiên bản Amazon EC2 đi kèm với một số gánh nặng về mặt vận hành. Đối phó với các khoản thanh toán trên quy mô lớn, quản lý hàng đợi, hiệu suất và tính khả dụng của cụm RabbitMQ của chúng tôi đã gặp những thách thức đáng kể.
- Quản lý độ bền với RabbitMQ. Khi các message được đặt trong queue, chúng vẫn tồn tại và tồn tại khi máy chủ khởi động lại. Nhưng trong thời gian bảo trì, chúng có thể bị mất vì chúng tôi đang sử dụng thiết lập tự quản lý.
- Cơ chế điều tiết tải lượng. Thiết kế của chúng tôi thiếu cơ chế điều tiết, việc này dẫn đến các message được gửi liền tới khách hàng gây ra trạng thái quá tải message ở phía khách hàng.
- Yêu cầu về mặt kinh doanh của khách hàng. Nhiều khách hàng có các tác vụ cần hoãn việc gửi message trong một thời gian nhất định. Kiến trúc của chúng tôi không có hỗ trợ việc hoãn gửi message.
- Cơ chế thử lại. Chúng tôi cần triển khai chiến lược back-off để loại bỏ nhiều lần thử lại cho các message gửi tạm thời không thành công

Hình 1. Amazon Payment Services’ kiến trúc trước đây.
Kiến trúc trước đây được thể hiện trong Hình 1 có thể xử lý một lượng lớn thông điệp và gửi chúng trong một thời gian hợp lý. Tuy nhiên, khi số lượng tin nhắn chưa xử lý tăng dần trong queue gay ra do lỗi mạng từ phía khách hàng, thì độ trễ của luồng tổng thể bị ảnh hưởng. Điều này đòi hỏi phải mở rộng quy mô queue theo cách thủ công, điều này làm tăng thêm nỗ lực, thời gian và chi phí đáng kể của con người. Khi doanh nghiệp của chúng tôi tiếp tục phát triển, chúng tôi phải duy trì một thỏa thuận mức độ dịch vụ về thời gian giao hàng nghiêm ngặt (SLA.)
Sử dụng Amazon SQS làm hệ thống chuyển message chính
Đội ngũ chính của Amazon Payment Service đã thiết kế một giải pháp để sử dụng Amazon Simple Queue Service (SQS) với AWS Fargate (xem Hình 2). Amazon SQS là một dịch vụ queue tin nhắn được quản lý hoàn toàn cho phép khách hàng phân tách và mở rộng các dịch vụ nhỏ, hệ thống phân tán và các ứng dụng serverless. Đây là một dịch vụ message queue có khả năng mở rộng cao, đáng tin cậy và bền, giúp giảm độ phức tạp và chi phí liên quan đến việc quản lý và vận hành phần mềm trung gian hướng tin nhắn.
Amazon SQS cung cấp hai loại queue. Queue tiêu chuẩn SQS cung cấp thông lượng tối đa, cố gắng đảm bảo thứ tự tin nhắn trong queue và phân phối ít nhất một lần. SQS FIFO queue đảm bảo rằng các message được xử lý chính xác một lần, theo thứ tự chính xác mà chúng được gửi. Đối với ứng dụng của chúng tôi, chúng tôi đã sử dụng SQS FIFO queue.

Hình 2. Kiến trúc mới của Amazon Payment Service sử dụng Amazon SQS, Amazon ECS, và Amazon SNS
Với kiến trúc serverless này đã cung cấp các tùy chọn mở rộng quy mô tốt hơn cho các dịch vụ xử lý thanh toán của chúng tôi. Điều này giúp quản lý các sự kiện cao điểm của khu vực địa lý MENA cho khách hàng mà không cần cung cấp dung lượng. Kiến trúc serverless giúp chúng tôi giảm chi phí hoạt động của mình, vì chúng tôi chỉ phải trả tiền khi sử dụng dịch vụ. Mục tiêu của chúng tôi khi phát triển kiến trúc ban đầu này là đạt được tính nhất quán, khả năng mở rộng, khả năng chi trả, bảo mật và hiệu suất cao.
Cách Amazon SQS giải quyết nhu cầu của chúng tôi
Việc chuyển sang Amazon SQS đã giúp chúng tôi giải quyết nhiều yêu cầu của mình và giúp dịch vụ trở nên tốt, và mạnh hơn. Một số vấn đề chính của chúng tôi bao gồm:
Mất tin nhắn trong thời gian bảo trì
Trong khi thực hiện nâng cấp thủ công trên RabbitMQ và hệ điều hành, đôi khi chúng tôi gặp phải tình trạng ngừng hoạt động. Bằng cách sử dụng Amazon SQS, cơ sở hạ tầng nhắn tin đã trở nên tự động hóa, giảm nhu cầu về các hoạt động bảo trì.
Xử lý đồng thời
Các khách hàng khác nhau xử lý các tin nhắn một cách khác nhau. Chúng tôi cần một cách để tùy chỉnh đồng thời theo khách hàng. Với ID nhóm tin nhắn SQS trong hàng đợi FIFO, chúng tôi có thể sử dụng thẻ nhóm các tin nhắn lại với nhau. Các tin nhắn thuộc cùng một nhóm tin nhắn luôn được xử lý từng tin một, theo một thứ tự nghiêm ngặt. Sử dụng tính năng này và thuật toán băm nhất quán, chúng tôi có thể giới hạn số lượng tin nhắn đồng thời được gửi đến khách hàng.
Độ trễ tinh nhắn và xử lý các lần thử lại
Khi tin nhắn được gửi đến hàng đợi, chúng ngay lập tức được kéo về và nhận bởi khách hàng. Tuy nhiên, nhiều khách hàng yêu cầu trì hoãn tin nhắn để họ thực hiện các tiền xử lý công việc, vì vậy chúng tôi đã giới thiệu bộ hẹn giờ trễ tin nhắn. Một số thư gặp lỗi có thể gửi lại. Nhưng khoảng thời gian giữa nhiều lần thử lại phải bị trì hoãn cho đến khi chúng tôi nhận được xác nhận giao hàng từ khách hàng của mình hoặc cho đến khi vượt quá giới hạn số lần thử lại. Sử dụng SQS, chúng tôi có thể sử dụng cơ chế ChangeMessageVisibility để điều chỉnh thời gian trễ.
Khả năng mở rộng và khả năng chi trả
Để tiết kiệm chi phí, hàng đợi Amazon SQS FIFO và các tác vụ Amazon ECS Fargate chỉ chạy khi cần thiết. Các dịch vụ này xử lý dữ liệu trong các process nhỏ hơn và chạy chúng song song. Chúng có thể mở rộng quy mô một cách hiệu quả để xử lý tải lưu lượng truy cập tại thời điểm cao điểm. Điều này sẽ đáp ứng hầu hết các kiến trúc xử lý lưu lượng không thống nhất mà không cần thêm logic ứng dụng.
An toàn trong kết nối
Dịch vụ của chúng tôi gửi thông điệp đến khách hàng thông qua các kênh bảo mật từ máy chủ đến máy chủ. Để bảo mật dữ liệu này khi được truyền ra bên ngoài mạng riêng của chúng tôi, chúng tôi sử dụng Simple Notification Service của Amazon (SNS) làm cơ chế phân phối của chúng tôi. Amazon SNS cho phép tin gửi tới topic, được truyền tải tới các bên đăng ký thông qua HTTPS. AWS cho phép mã hóa lúc nghỉ và / hoặc khi chuyển tiếp cho tất cả các thành phần trong kiến trúc. Amazon SQS cũng cung cấp mã hóa dựa trên Dịch vụ quản lý khóa AWS (KMS) hoặc sử dụng dịch vụ mã hoá tự quản lý để mã hoá dữ liệu bên trong Amazon SQS.
Hiệu suất
Để định lượng hiệu suất sản phẩm của mình, chúng tôi theo dõi độ trễ gửi tin nhắn. Chỉ số này đánh giá thời gian từ khi gửi tin nhắn đến khi khách hàng nhận được tin nhắn từ các dịch vụ thanh toán của Amazon. Mục tiêu của chúng tôi là gửi tin nhắn đến khách hàng trong thời gian gần thực khi giao dịch được xử lý. Kiến trúc Amazon SQS / ECS mới cho phép chúng tôi đạt được 99 phần trăm request có độ trễ 200ms.
Tóm tắt
Trong bài đăng trên blog này, chúng tôi đã chỉ ra cách sử dụng Amazon SQS đã giúp chuyển đổi và mở rộng dịch vụ của chúng tôi như thế nào. Chúng tôi có thể cung cấp một giải pháp an toàn, đáng tin cậy và có tính sẵn sàng cao cho các doanh nghiệp. Chúng tôi sử dụng các dịch vụ và công nghệ AWS để chạy cổng thanh toán Amazon Payment Services và tự động hóa cơ sở hạ tầng để cung cấp dịch vụ tốt nhất cho khách hàng. Bằng cách sử dụng Amazon SQS và Amazon ECS Fargate, Amazon Payment Services có thể cung cấp dịch vụ gửi tin nhắn an toàn trên quy mô lớn cho khách hàng của chúng tôi.
Bài được dịch từ bài viết trên AWS Blogs, bạn có thể xem bài viết gốc tại đây.