Setting a ZEO server in "proxy" mode
You may have noticed that I can't install a new Zope server and it's ZODB without using ZEO extension, which provides greater flexibility and extended potential uses without losing stability and reliability that you may expect from the ZODB.
This tutorial is based on my personal user experience in my professional environment ; a little diagram is more self explanatory than a long speech to describe my starting environment:
We have two main parts:
- a set of Zope servers, hosted by a service provider, visible on the internet and connected through a local network to the ZEO server;
- an internal server used to handle site's content administration, connected to an LDAP directory; this server was also connected to the ZEO server, but via a remote connection which doesn't offer very good performances.
Despite this bad quality connection, this configuration worked perfectly for a long time, even when ZEO database became huge, as ZEO client persistent and asynchronous cache offers quite good performances.
The situation became complicated when it was decided that all the enterprise users (more than 7000 !), and not only the website administrators, would access the internal server, to handle several back-office tasks and get access to the published website, being said that the LDAP server couldn't be hosted externaly or even accessible from the outside. So, to increase platform capacity, we had to increase the number of internal Zope front-ends; but as bandwidth for ZEO connection was limited, the only solution was to share it and setup an internal ZEO "proxy" (what Jim Fulton calls a "ZEO fan out" mode), following this scheme:
How does it works ?
Setting such a configuration is in fact really simple; the only special feature comes from the "ZEO proxy", for which data don't come from a local FileStorage as usual, but from a ClientStorage which is getting data from a remote server.
If you go back to the topic which deals with ZEO server installation (see bottom link), you just have to modify Buildout configuration by switching the filestorage directive with a zeoclient one identical to which is found in the Zope server configuration:
With such a configuration, you just HAVE TO setup the ZEO proxy with a persistent cache of substantial size; otherwise, the ZEO proxy server will have to re-synchronize it's cache after each restart, which can be VERY long...