Storage Deployment Topology

Storage Deployment Topology An architecture diagram generated by Archify. Visitors & editors · HTTPS · Architecture component Visitors & editors HTTPS Reverse proxy · TLS · rate limiting · Application tier — one host or ZEO clients · platform / ops Reverse proxy TLS · rate limiting platform / ops Plone instance(s) · views · subscribers · Application tier — one host or ZEO clients · app team Plone instance(s) views · subscribers app team Validator binary · local subprocess · 30 s · Application tier — one host or ZEO clients · app team Validator binary local subprocess · 30 s app team ZEO server · shared object DB · Application tier — one host or ZEO clients · platform / ops ZEO server shared object DB platform / ops Results RDBMS · PostgreSQL · MySQL · SQLite · State tier — size and back up separately › private state access · data team Results RDBMS PostgreSQL · MySQL · SQLite data team KV cache · diskcache or KV tables · State tier — size and back up separately › private state access · platform / ops KV cache diskcache or KV tables platform / ops ZODB Data.fs · annotations · BTree buckets · State tier — size and back up separately › private state access · data team ZODB Data.fs annotations · BTree buckets data team HTTPS subprocess · 30 s ZODB clients serves Data.fs rdbms backend tokens · replay state Application tier — one host or ZEO clients State tier — size and back up separately private state access

Choose the backend by concurrency

  • • ZODB needs no extra service, but conflicts start at ~5 concurrent writers
  • • SQLite is single-writer: WAL and a busy timeout serialize writes
  • • PostgreSQL or MySQL for many workers, hosts or sustained rates

Shared state must be reachable by every process

  • • Token and replay caches belong on a local filesystem, never NFS or SMB
  • • Multiple hosts need a dedicated KV database URI, not the results URI
  • • SQLite under ZEO is acceptable only for low-volume forms

Run the state tier deliberately

  • • Back up ZODB/Data.fs and the RDBMS separately, one is not the other
  • • Every stored row carries the site_id for multi-site setups
  • • Watch logs for conflict and lock errors; load-test the real worker count