Real-time open source messaging systems are easy to design and code when small, servicing a few hundred users, and with limited media handling features. When an open source project becomes successful, however, the community of users often demand a level of scalability that the original design did not anticipate - and the entire project with its ever increasing codebase (in both size and complexity) can fail miserably during this transition.
Rocket.Chat as an open source project has to cross the chasm not only once but twice in its history. The first time we took the wisdom of the time and bolt-on a multi containerized instances approach to the monolith project. The result is both surprising and somewhat functional - easily servicing 10s of thousands of users. Satisfying the demand at that time.
Continued success of the project led us to the second transition into a world-scale (approaching hundreds of thousands of users) rich messaging system. This transition required a complete re-architecture of the monolith server - an engineering debt that we knew we had to pay before long. The result, after two long years with a lead R&D team, is what can be described loosely as a “micro services” based scalable-by-function backend.
In this talk, we will go into some technical details of these two transitions; and fill the community in on a few interesting back stories along the way.