Home >Backend Development >PHP Tutorial >Comparing Beanstalkd, IronMQ and Amazon SQS
Key Points
Introduction
This article introduces the concept of message queues and discusses the advantages and disadvantages of three specific message queue services: Beanstalkd, IronMQ, and Amazon SQS.
Any information described in this article is correct at the time of writing and is subject to change without notice.
What is a message queue?
Quote allows you to store metadata so that jobs can be processed later. They can help develop SOA (Service-Oriented Architecture) by providing the flexibility to defer tasks to separate processes. If applied correctly, queues can significantly improve the user experience of the website by reducing load time.
Advantages of message queue:
Disadvantages of message queue:
Use cases for message queues:
Any time-consuming process can be put into the queue:
You can also use queues in a creative way - lock jobs so that only one user can access information at a time.
Service
You can use many services to implement message queues, and this article outlines the differences between Beanstalkd, IronMQ, and Amazon SQS.
Beanstalkd
Beanstalkd is "…a simple and fast job queue". It was released as open source software under the MIT license. It has good documentation and is unit tested and can be downloaded to run on your own server for free. This architecture borrows from memcached, which is specially designed for message queues.
A post on SitePoint titled Beat the Giants with Beanstalkd, written by author Dave Kennedy, contains information on how to get started with Beanstalkd and Ruby.
IronMQ
IronMQ is a managed RESTful web service. Free tiers are available for developers, and many other subscription tiers can be used by commercial applications.
SQS
Amazon SQS is an inexpensive hosting solution for implementing message queues. It is part of Amazon Web Services (AWS). Amazon provides a free tier for evaluating its network services, including SQS.
Server settings
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
自托管 | 远程托管 | 远程托管 |
Beanstalkd
Run on Linux and Mac OS X. Please read the installation instructions on the Beanstalkd website for detailed information on how to get it to function on your system. The Beanstalkd server is not available for Windows.
IronMQ and SQS
IronMQ and Amazon SQS are cloud-based network services. Instead of setting up an application on your server, you just need to register an account and set up a queue.
Service Level Agreement (SLA)
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
无 | 每月 99.95% | 无 |
Beanstalkd
Beanstalkd is your own hosted server, it is your responsibility to ensure its availability.
IronMQ
Iron.IO has a service level agreement with a percentage of uptime during any monthly billing cycle of at least 99.95%. Their Pro Platinum package ($2450 per month) has custom contract terms, including service level agreements. They provide service points refunds.
SQS
Amazon does not provide a specific service level agreement for SQS. They do offer support services that can cover SQS for an additional fee.
Architecture
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
PUSH(套接字) | HTTP 网络服务 | HTTP 网络服务 |
Beanstalkd
Communicate via PUSH sockets, providing instant communication between providers and workers.
When the provider enqueued the job, it can be kept immediately if the worker is connected and ready. The job will be retained until the worker sends a response (delete, buried, etc.).
IronMQ
SQS is a managed RESTful web service.
IronMQ supports push-like functions. Subscribers can be called whenever the provider joins the job to the queue. Typically, you want to use the standard RESTful service to incoming and dequeuing jobs instead of push methods.
SQS
SQS is a managed network service.
SQS does not support push. You must periodically poll to check if there are jobs in the queue.
SQS can use a long poll called message reception waiting time (default: 0 seconds, maximum: 20 seconds) to keep the connection open while the worker waits for a job. This means fewer requests and longer socket opening times.
Client Library
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
开源 | 官方 | 官方 |
Beanstalkd
There are many open source Beanstalkd client libraries available in many programming languages. These are Beanstalkd's standalone projects.
IronMQ
The IronMQ client library is provided by Iron.IO and can be downloaded from the Development Center.
You can also use the Beanstalkd client library with IronMQ if you want the flexibility to switch between the two services; however, some commands (such as kick, bury) are not supported. You may also need to implement the oauth command manually to connect to the service.
SQS
The AWS client library includes the SQS client library. These are provided by Amazon and are available in many programming languages.
Management interface
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
开源 | 面板 | 控制台 |
Beanstalkd
The graphical management interface is not distributed by default. There are some open source projects on the Beanstalkd tool page that can help with debugging and management.
IronMQ
IronMQ panel manages queues. It contains a useful tutorial that describes how to set up a queue and shows you how to add a job (IronMQ: Message) to a queue via cURL.
This interface allows you to manage queues in AJAX-driven websites. You can create, read, and delete jobs, view historical information, and manage queue configurations from the dashboard view.
SQS
The AWS Management Console allows you to manage SQS. The interface is built on top of a stateless protocol, so you need to press the refresh button to get the latest information.
You can create, read, and delete jobs (SQS: Messages) and manage queue configuration.
Redundant
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
客户端 | 基于云 | 基于云 |
Beanstalkd
Redundancy is handled on the client side, and if the server goes down, you will lose your job.
Beanstalkd does contain an option to store jobs in binary logs. You must start Beanstalkd with the -b option, but the recovery queue is a manual task that requires access to the server disk.
IronMQ
IronMQ is a cloud-based service with high persistence, availability and redundancy.
SQS
Jobs are stored on multiple servers in the hosted area. This approach ensures the availability of services and jobs should not be lost.
Safety
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
无 | 令牌 | 密钥和密钥 |
Beanstalkd
Connecting to Beanstalkd does not require authentication. Providers can join the queue for jobs, and work programs can retain jobs without passing through security models. Therefore, it is highly recommended to create a firewall to block external connections to the ports running on Beanstalkd.
IronMQ
You can use your message queue by setting up an invitation collaborator. Authentication to the application is done with the Iron.IO token and project ID.
SQS
Authentication to SQS is implemented through Amazon API keys and keys. Access queue permissions can be granted and revoked for other AWS accounts through the AWS Management Console.
Speed
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
快 | 互联网延迟 | 互联网延迟 |
Beanstalkd
Beanstalkd is very fast because it should be in the same network as its provider and worker. Beanstalkd is sometimes very fast, and if the provider puts the job on the queue and then calls MySQL, the worker may get your job before MySQL completes execution.
IronMQ
The latency of requests increases because they are sent to the IronMQ RESTful network service over HTTP.
SQS
The latency of requests increases because they are sent to the SQS network service over HTTP.
Jobs may not be acquired immediately because they need to be distributed across different servers and data centers. If the application, provider, or worker is hosted on an EC2 instance, this delay should be negligible.
It may not be available immediately when you enqueue the job to SQS. The job must be propagated to another server. Usually wait for up to one second.
Fidelity
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
FIFO | FIFO | 无保证 |
可优先级 | 无优先级 | 无优先级 |
Beanstalkd
The queue is FIFO (first in first out). Highly important assignments can be prioritized, which will affect the order in which the assignments are dequeued.
IronMQ
The queue is FIFO (first in first out). The job cannot be processed first.
SQS
The order of occurrence of jobs is different from the order of entry into the queue. Because SQS is a distributed service, jobs on each server will be available at different times. This is something to be aware of when designing for SQS.
Get at one time
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
保证 | 保证 | 不保证 |
One-time fetch describes the limitation that two or more workers will never run the same job in parallel unless the worker timed out.
Beanstalkd
Beanstalkd's socket-based architecture ensures one-time acquisition.
IronMQ
IronMQ guarantees one-time acquisition.
SQS
Because SQS is a distributed service, it is not guaranteed to obtain one-time (but unlikely).
Fail-safe
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
僵尸套接字 | 超时 | 超时 |
Beanstalkd
If the worker does not respond to Beanstalkd within the set time, or the socket is closed without responding to the job, the job will automatically return to the queue.
Then the next requested worker can get it immediately (no kickback required).
IronMQ and SQS
The worker connects to the queue and retains the job. From this moment on, the worker has set time to delete the job from the queue before it can be released and retention for the worker to be retained.
Create a new queue
Beanstalkd | IronMQ | Amazon SQS |
---|---|---|
自动 | 自动和手动 | 手动 |
Beanstalkd
When the job joins the queue, a queue will be automatically created (Beanstalkd: Pipeline). No need to create them manually.
IronMQ
You need to create a project in the dashboard. A project contains many queues. Queues can be created automatically when jobs are enqueued or manually using configurations in the dashboard.
SQS
The queue for SQS must be manually set from the AWS Management Console. Each queue generates a unique URL that is used as the queue name.
Please note the region to which the queue belongs (for example: us-west-1, eu-west-1, etc.), because it is required to connect to SQS.
Frame Integration
Laravel
The Laravel framework has an excellent built-in wrapper that encapsulates message queues for Beanstalkd, IronMQ, and Amazon SQS. You can change the server by configuration without changing any applications.
PHP code example
These code examples show you how to connect to a server, and how to queue, retain, and dequeue jobs to queue. If an exception is thrown, it will bury the job (if the server supports it).
Try to stop execution after the job is enqueued and debug the queue using the management tool.
(PHP code examples for Beanstalkd, IronMQ, and SQS have been omitted because they are too long and do not match the pseudo-original goal. These snippets can be easily copied from the original text.)
Message Queue Tips
No matter which service you choose, here are some tips to keep your queue strong:
Metadata serialization
Your job can contain any data you like, provided it is within the limit of the server job data size. Use JSON in the job body to make metadata easy to transfer.
Limit the size of the job data
Try not to use too much metadata to fill the job. If you can store some information in the database and only queue an ID for later processing, your queue will be more powerful and easier to debug.
Track the homework status
If for some reason an already processed item re-enters the queue, you may not want to re-process it. Unfortunately, job data is not mandatory and unique, so be sure to keep track of the status of the job in the database.
This can be as simple as adding a column to the job table to mark the item as processed. If the project has been processed, you can delete it from the queue.
Terms
Certain words are used differently between Beanstalkd and Amazon SQS. Here is a quick translation list:
(The term comparison tables for Beanstalkd, Amazon SQS, and IronMQ have been omitted because they are too long and do not match the pseudo-original objectives. These tables can be easily copied from the original text.)
Glossary
When using queues, you may encounter the following terms:
Buried (job) - Put the job in a failed state. The job cannot be reprocessed until the job is manually kicked back to the queue. IronMQ and SQS are not supported.
User—See the work program.Delay - Delay the job for a period of time and not sent to the worker.
Delete (job) - see Departure.
Dequeue – Mark the job as completed and delete it from the queue.
Enter the queue - Add the job to the queue and prepare it for use by the worker.
FIFO—Describes how jobs are processed in queues, that is, first-in, first-out. This is the most common type of message queue.
FILO - Describes how jobs are processed in a queue, that is, first in and then out.
Job - A delayed task in the queue containing metadata used to identify the task to be processed. Similar to a database row.
Kick (job) - Return the previously buried job to the queue for the worker to obtain. IronMQ and SQS are not supported.
Provider - The client that connects to the message server to create a job.
Quote - A method of grouping similar jobs into a queue. Similar to database tables.
Reserve (job) - Pass the job to the worker and lock it to prevent it from being passed to other worker.
Worker—A client that connects to the message server to retain, delete and bury jobs. These labor-intensive parts of the execution process.
Conclusion
There is no universal solution for message queue service. Beanstalkd, IronMQ and Amazon SQS all have their own advantages and disadvantages and can be used by you. This article should provide you with enough information to help you make an informed decision on which service is best for your skill level and project needs.What message queue service will you use? If you are currently using queues, would you consider switching? Have you used message queues in a non-traditional way that can help others? Please leave a message to let everyone know.
Frequently Asked Questions about Message Queues (FAQ)
(Frequently asked questions about message queues have been omitted because they are too long and do not match the pseudo-original goal. These questions and answers can be easily copied from the original text.)
The above is the detailed content of Comparing Beanstalkd, IronMQ and Amazon SQS. For more information, please follow other related articles on the PHP Chinese website!