2014-04-23 29 views
10

tôi cần phải làm một số công việc chế biến async được đưa ra một yêu cầu web mà tôi sẽ thăm dò ý kiến ​​định kỳ cho đến khi nó hoàn tất. Tôi có toàn bộ ngăn xếp và chạy cục bộ nhưng tôi không thể hiểu được cách di chuyển nó sang tầng công nhân EBS. Tôi đang sử dụng Django với Celery và RabbitMQ tại địa phương và đã thành công trong việc trao đổi RabbitMQ với SQS của Amazon. Tuy nhiên khi tôi đã cố gắng để tạo ra một tầng công nhân mà sẽ hoạt động ra khỏi cùng một cơ sở dữ liệu RDS như webapp nhưng đã không thành công. Tôi bị kẹt ở điểm mà tôi có thể xếp hàng các tin nhắn nhưng không thể đọc chúng từ hàng đợi. Tôi cần phải sử dụng những thông điệp đó để thực hiện một số hoạt động tốn kém trên cơ sở dữ liệu và chuẩn bị kết quả cho người tiêu dùng. Có một số mảnh kiến ​​trúc tôi đang thiếu? Làm thế nào và nơi tôi có thể có được một daemon cần tây để xử lý các thông điệp SQS?Amazon Elastic Beanstalk Worker Tier

Trả lời

16

Từ Elastic Beanstalk documentation:

Khi bạn khởi động một môi trường đàn hồi AWS Beanstalk, bạn chọn một tầng môi trường, nền tảng, và loại môi trường. Các tầng môi trường mà bạn chọn sẽ xác định xem quy định AWS đàn hồi Beanstalk nguồn lực để hỗ trợ một ứng dụng web để xử lý HTTP (S) yêu cầu hoặc một ứng dụng web để xử lý các nhiệm vụ background-chế biến.

AWS đàn hồi Beanstalk cài đặt một daemon trên mỗi trường hợp Amazon EC2 trong nhóm Auto tỷ lệ để xử lý các thông điệp Amazon SQS trong tầng môi trường lao động. Daemon kéo dữ liệu ra khỏi hàng đợi Amazon SQS, chèn nó vào nội dung thư của một yêu cầu HTTP POST, và gửi nó đến một đường dẫn URL do người dùng cấu hình trên máy chủ địa phương. Loại nội dung cho nội dung thư trong yêu cầu HTTP POST là ứng dụng/json theo mặc định.

Từ góc độ phát triển, ứng dụng chạy trên các tầng công nhân chỉ là một dịch vụ web đơn giản. Nó sẽ nhận các cuộc gọi từ AWS Elastic Beanstalk daemon được cung cấp cho bạn trên cá thể.

Yêu cầu được gửi đến giá trị Đường dẫn HTTP mà bạn định cấu hình. Điều này được thực hiện theo cách như vậy để xuất hiện cho ứng dụng web trong tầng môi trường nhân viên mà daemon đã khởi tạo yêu cầu. Bằng cách này, daemon phục vụ một vai trò tương tự như một bộ cân bằng tải trong một tầng môi trường máy chủ web.

Cấp môi trường công nhân, sau khi xử lý thư trong hàng đợi, chuyển tiếp thư qua vòng lặp cục bộ tới ứng dụng web tại URL mà bạn chỉ định. URL hàng đợi chỉ có thể truy cập được từ máy chủ cục bộ. Vì bạn chỉ có thể truy cập URL hàng đợi từ cùng một cá thể EC2, không cần xác thực để xác thực các thư được gửi tới URL.

Ứng dụng web trong tầng môi trường công nhân chỉ nên nghe trên máy chủ cục bộ.Khi ứng dụng web trong tầng môi trường nhân viên trả về một phản hồi 200 OK để xác nhận rằng nó đã nhận và xử lý thành công yêu cầu, daemon gửi một cuộc gọi DeleteMessage tới hàng đợi SQS để thông báo sẽ bị xóa khỏi hàng đợi. Nếu SQS trả về bất kỳ phản hồi nào khác hơn 200 OK hoặc không có đáp ứng nào trong khoảng thời gian không hoạt động được cấu hình, SQS lại một lần nữa làm cho thông báo hiển thị trong hàng đợi và sẵn sàng cho một nỗ lực khác khi xử lý.

+17

Thông tin hữu ích, nhưng lấy nguyên văn từ tài liệu của Amazon: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html – ahmacleod

+3

Đúng! Khi câu trả lời đúng nằm trong tài liệu, tại sao chúng ta nên viết lại mọi thứ? –

+13

Đồng ý, nhưng tốt nhất nên trích dẫn các tác phẩm không phải của riêng bạn. – ahmacleod

0

Tôi hiện đang sử dụng tầng web "chuẩn" (được cấu hình với số lượng quy trình và chuỗi cao hơn) với ứng dụng Django + Celery của tôi và tôi có phiên bản EC2 với AMI đang chạy tùy chỉnh. SQS không được hỗ trợ đầy đủ bởi Cần tây, từ http://docs.celeryproject.org/en/latest/getting-started/brokers/sqs.html:

Việc vận chuyển SQS là cần cải tiến trong nhiều lĩnh vực và có một số lỗi mở.

Thành thật mà nói, tôi không bao giờ hiểu tầng công nhân web là gì, nhưng cấu hình hiện tại của tôi dường như hoạt động khá tốt (tôi cũng sử dụng Celery để quản lý các tác vụ thời gian). tôi daemonized Cần tây sử dụng Supervisor (mà đã được sử dụng bởi Elastic Beanstalk để quản lý apache).

Các vấn đề liên quan