PHP's Share-Nothing Architecture (2004)
zef.me
zef.me
PHP wasn't designed around a share-nothing architecture, being able to share data across requests is simply difficult with the random pile of features in PHP.
It's odd that one of the biggest users of PHP (Facebook) decided to remove this and share compiled code across requests. Oddly enough one of the biggest selling points of Zend is that you can share compiled code across requests.
If you can scale a database infinitely (as long as you have enough memory) as the OP suggests then I assure you your webserver will not fall down by sharing a few variables, or even keeping your entire dataset in RAM and shared. Infact if you keep these variables in memory shared across requests you'll scale much further than by putting those variables in MySQL (barring sharding and replication, which generally come with codebase changes anyway).
No, you do not have to half ass it and using an extension that shares memory is not half assing it, either. You can use APC. You should have it installed already for bytecode caching, but here comes a surprise. Most people don't know that it also has an in-memory key/value store built-in. It works and it works very well. Extremely fast. You also have extensive control over how much and in what way APC uses RAM.
There has been talk of moving APC from PECL and into core for years.
So this works very well for single server systems, but not when scaling to multiple servers, unless there's some process for replication that I'm not aware of?
My team is thinking of using Redis or Memcached to provide a caching layer in front of the web app.
Yes. You have two solutions available. Use something like Redis or Memcached, as you noted. The other solution is to go virtual. At that point, you can scale a single instance to a fairly large size.
If a single machine/instance isn't enough to handle your load, you'll end up using something like Redis/Memcached regardless of what platform you're on.
[Edit - didn't notice this was a 2004 article]
[1] https://github.com/symfony/symfony/blob/8ebe624b82dc9f91231e...
Anybody have a cached version?