Hi, I am in a process of developing a new version of my application. The new version must be able to have high availability and scale so I am evaluating both hardware and software techniques so I can cope with the increasing traffic and a SLA.
I already use Zend_Cache to reduce unnecessary calls to the database, use Headers to cache elements (like images, css) in the browser side, separate web server from the database server. The idea so far is to have a "management" node which is a server with my application/media files/admin scripts that will be used to add new content and replicate this to several client nodes. Each client node is a web server + database used just for the reads. The writes (a few) will be done in the management node database. The management node will replicate the database to the clients and also the media files. The management node itself is actually a replicated cluster (for redundancy/ha) but the client nodes are regular ones. So where does ZF enters here? Well, the app will be itself developed using ZF but I have some questions about: a) database Should I use regular databases? In my case MySQL with the master - slave situation. Or should I try Mongo/Cassandra because of the auto-sharding features? This is something that I don't need right now but some sort future planning. Are there any plans to have those Nosql adapters for ZF 1.x? b) content management in my app I have to upload files (images) besides text. The text is stored in the database so If I stick with the database replication I'll be fine. But how about the other files? I think I need to control which files have been uploaded to the management node and if they were correctly replicated to all the client nodes. Since the database changes are small (in size) when compared with the media files I think that ideally I should wait until the files are replicated before the database is replicated (or at least that record). Is this reasonable? Should I try to do this (or any other approach) from ZF or use another tool? For the replication of the files I am considering some sort of queue to generate a list of files and call rsync to do the actual transfer. c) cache management in a similar situation when I add/modify/delete a content I'd like to signal each client node that they should "invalidate" that cache object (if they have) d) Which version use? The development will begin in up to three months and probably last for six more months after that. So should I start using the ZF 2.0-dev or is it in too early stages? This will be the first time that I'll have the opportunity to start from scratch so I'll probably have to maintain this code base for at least 5 years... e) CDN This is probably OT (so feel free to reply me directly) but I am looking for companies that I could host the servers (client nodes) and/or that could provide a 'director' service, redirecting the requests to the closest active client node (so I can add new nodes or remove for maintenance). Regards.