Patchesoft
Patchesoft

Reputation: 317

How to use ImageMagick via another server using PHP's system() function?

We do a lot of processing for images and a lot of the time this processing kills all our CPU and causes our site to crash. What we want to do is put the image processing on another server, so that we can scale that server as nessicary and not have our current server crash.

I'm wondering how to go about this though. Our current process is:

1) User's make AJAX request to our Image Processing Script.

2) We construct a string based on the user's input. This string contains the commands to perform an ImageMagick process.

3) We run the string through PHP's system() command.

4) We then send headers to the page and use PHP's imagecreatefrompng() functions on the file to output the image to the user.

So what I'd like to know, what's the best way to now transfer the ImageMagick process. I thought of remote connecting to the other server via SSH, but I'm sure there is a limit on the number of connections that can be made via SSH. We have 100s of users online at a time so we need to be able to do that many connections at a time.

Anyone with any ideas on how best to transfer our image processing to another server would be greatly welcomed.

Thanks!

Upvotes: 0

Views: 343

Answers (1)

emcconville
emcconville

Reputation: 24419

SSH would not be an appropriate protocol to distribute a work request to another server. A popular trend is to leverage a messaging queue to dispatch tasks to "worker" nodes. The implementation can very greatly depending on design, needs, and resource constraints. Here's a quick bare-bone outline...

Example messaging queue

  1. A web server receives a new image item.
    • Writes image to CDN, or network mount &etc.
    • Publishes a task to a messaging queue, like RabbitMQ
  2. A worker node listens for new tasks.
  3. Consumes and performs request.
    • Writes result output next to source on CDN
    • Notifies tasks complete by either updating a record in DB, or publish back to MQ.

Checkout RabbitMQ/PHP "Hello World", and "Work Queues" articles for detailed examples.

Upvotes: 1

Related Questions