System Architecture Consulting
Classical system architecture of Nextcloud is based on a standard LAMP-like stack. "Classical" because for some use cases we can make reference to Global Scale as target architecture, and there things are a little bit different.
Core components are storage, database, cache and web server. For scalability and high-availability purposes each component is independent and should be treated as such.
When we design a new system that should be able to withstand a given number of active users, we are faced with a number of tough decisions and each decision leads to a different path in the decision trees.
A few examples:
- Should I design the system as stand-alone (all the services run there) or a distributed one? If deciding for the latter option, should it be since the beginning fully distributed (1 service per system)?
- What capacity and hardware resources utilization should we expect from the database, based on a given usage scenario?
- Which will be the main purpose of the service in the coming 12 months? Just files sync and share, or users, say will need groupware as well?
- Should I opt for object storage or filesystem to host Nextcloud data directory that is its primary storage?
- What are the implications of choosing an external SaaS storage provider in terms of security?
- What is best web server all-in-all, Apache2, Nginx or others?
- Do we need a clustered database?
- Is my disaster recovery strategy robust?
All these questions and many more came up in past assignments we have been involved in.
We make our skills and experience available to clarify your questions and to make system design decisions available in the long run.