Mattermost is designed to scale from small teams hosted on a single server to large enterprises running in cluster-based, highly available deployment configurations.
- Mattermost supports any 64-bit x86 processor architecture
- Databases supported: PostgreSQL, Amazon RDS for PostgreSQL
- Storage supported: Amazon S3 or a local filestore
Server requirements vary based on usage and we highly recommend that you run a pilot before an enterprise-wide deployment in order to estimate full scale usage based on your specific organizational needs.
The following reference architectures are available as recommended starting points for your self-hosted Mattermost deployment, where user counts refer to the number of concurrent users for a given deployment. The number of concurrent numbers is commonly lower than the total number of user accounts.
- :doc:`Scale up to 200 users </scale/scale-to-200-users>` - Learn how to scale Mattermost to up to 200 users.
- :doc:`Scale up to 2000 users </scale/scale-to-2000-users>` - Learn how to scale Mattermost to up to 2000 users.
- :doc:`Scale up to 15000 users </scale/scale-to-15000-users>` - Learn how to scale Mattermost to up to 15000 users.
- :doc:`Scale up to 30000 users </scale/scale-to-30000-users>` - Learn how to scale Mattermost to up to 30000 users.
- :doc:`Scale up to 50000 users </scale/scale-to-50000-users>` - Learn how to scale Mattermost to up to 50000 users.
- :doc:`Scale up to 80000 users </scale/scale-to-80000-users>` - Learn how to scale Mattermost to up to 80000 users.
- :doc:`Scale up to 90000 users </scale/scale-to-90000-users>` - Learn how to scale Mattermost to up to 90000 users.
- :doc:`Scale up to 100000 users </scale/scale-to-100000-users>` - Learn how to scale Mattermost to up to 100000 users.
- :doc:`Scale up to 200000 users </scale/scale-to-200000-users>` - Learn how to scale Mattermost to up to 200000 users.
Important
Due to constraints in testing, the proxy instance specifications were fixed for all the tests from which we derived these reference architectures. This was done to avoid a combinatorial explosion of variables in tests, but it resulted in minor gaps in our understandings of certain aspects of the reference architectures. In particular, the proxy instance is overspecified for the smaller user counts.
All tests were executed with the custom load test tool built by the Mattermost development teams to determine supported users for each deployment size. Over time, this guide will be updated with new deployment sizes, deployment architectures, and newer versions of the Mattermost Server will be tested using an ESR.
At a high level, each deployment size was fixed (Mattermost server node count/sizing, database reader/writer count/sizing), and unbounded tests were used to report the maximum numbers of concurrent users the deployment can support. Each test included populated PostgreSQL v14 databases and a post table history of 100 million posts, ~200000 users, 20 teams, and ~720000 channels to provide a test simulation of a production Mattermost deployment.
Tests were defined by configuration of the actions executed by each simulated user (and the frequency of these actions) where the coordinator metrics define a health system under load. Tests were performed using the Mattermost v9.5 Extended Support Release (ESR). Job servers weren't used. All tests with more than a single app node had an NGINX proxy running in front of them.
For the last test of 200K users, further infrastructure changes were made. Elasticsearch nodes were added. A Redis instance was added, and multiple NGINX proxies were used to distribute traffic evenly across all nodes in the cluster. More details can be found in the page </scale/scale-to-200000-users>.
Full testing methodology, configuration, and setup is available, incluidng a fixed database dump with 100 million posts. Visit the Mattermost Community and join the Developers: Performance channel for details.
Mattermost provides a set of tools written in Go to help profiling Mattermost under heavy load, simulating real-world usage of a server installation at scale. The Mattermost Load Test Tool estimates the maximum number of concurrently active users the target system supports, and enables you to control the load to generate.
Visit the Mattermost Load Test Tool documentation on GitHub for details on getting started with the tools, and visit the Go documentation for code-specific documentation details.
Important
- The Mattermost Load Test Tool was designed by and is used by our performance engineers to compare and benchmark the performance of the service from month to month to prepare for new releases. It's also used extensively in developing our recommended hardware sizing.
- We recommend deploying :doc:`Prometheus and Grafana </scale/deploy-prometheus-grafana-for-performance-monitoring>` with our :ref:`dashboards <scale/deploy-prometheus-grafana-for-performance-monitoring:getting started>` for ongoing monitoring and scale guidance.
- If you encounter performance concerns, we recommend :doc:`collecting performance metrics </scale/collect-performance-metrics>` and sharing them with us as a first troubleshooting step.