Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

User Image Uploading Works Again

by ar0n (Priest)
on Mar 27, 2002 at 01:35 UTC ( [id://154555] : monkdiscuss . print w/replies, xml ) Need Help??

For the past few weeks or months, it wasn't possible to upload new user images due to the separation of the webserver into two. Luckily, that issue now has been resolved. Images are now stored in the database, and even have their very own node id (like mine, or zdog's). All images are titled <user>'s user image.

Because the images are stored in the DB, we might experience some (more) performance issues, but we hope to implement some sort of caching mechanism in the near future. For now, we'll just see how it goes.

Just FYI, this work was the source of We blame tye..

Have fun.

ar0n // Jona

Replies are listed 'Best First'.
Re: User Image Uploading Works Again
by gav^ (Curate) on Mar 27, 2002 at 03:05 UTC
    Is there a particular reason that they are stored in the DB? I've always considered images best left to a lightweight webserver, it is what they do best.


      We never serve more than one such image per page (the vast majority of the time, we serve zero). These images are usually smaller than the HTML they accompany (my image is 5kB vs. 35kB of HTML). They are not allowed to be large (strict 80kB limit). We aren't even planning on implementing a caching scheme other than the "node caching" that the Everything engine aleady does.

      And! If the DB server chokes under the new load, we are fully authorized to blame jc.

              - tye (but my friends call me "Tye")

      I don't exactly know the current setup, but here's my guess based on what I've gleaned. There are 2 distinct machines serving as web servers for PM. They do not share any filesystems. There is another machine serving as a database server. Both web servers use a this server as a data backend.

      Since no filesystems are shared between the two webservers, files (i.e. user node images) uploaded to one server are not automatically shared with the other server. This means that if you add a user image, it matters which of the two web servers you hit: you (and others) will only see the updated image from one of the two servers.

      By using the database server to store the images, the images are automatically available to both web servers, since they already make routine connections to the database server for data. This means that either web server can retrieve *or* update the single image stored in the shared data store. Even if you have another web server serving just images, you still have to coordinate getting the uploaded images to the image serving server from whichever web server they are uploaded to.

      The adopted solution is an elegant use of available resources. If implemented, a caching system could allay most concerns of waste (which will likely not be borne out in practice).