ownCloud is a recognized and trusted name among private clouds. Several years ago, the software opened up a market niche in which users prefer to host their data themselves instead of handing it over to public clouds. The product has developed and evolved over the years, and steadily widened its user base and reach. Today, companies also benefit from the possibility of storing their data in a central location and making it available, for example, on mobile devices using the appropriate applications.
Over the last several years, ownCloud has increasingly appealed to larger businesses and organizations with high demands. However, it is precisely this customer segment that has been causing the developers concern for some time. Where private users work with relatively small amounts of data, commercially-operated instances of ownCloud quickly generate and store a trove of data adding up to several terabytes. On top of that, the flow of data is significantly greater for enterprises. A private user who uploads only music or vacation photos to his cloud from time to time understandably causes less traffic than a medium-sized company that runs an ownCloud instance all day long.
Pulling the brakes on PHP
The technical foundation of ownCloud has undergone modifications since the first versions of the software, but it has never undergone a radical transformation. When the product was launched in 2012, programs like ownCloud were built as LAMP applications as a matter of course. The application itself was written in PHP, Apache served the websites that belonged to it, MySQL stored metadata, and the technical foundation for the team was Linux.
For quite a while, ownCloud relied on PHP 5; only later did the developers enable ownCloud operation with PHP 7 as well. However, this is still not enough for massively scalable setups. own Cloud developers encountered limitations in PHP, until a radical decision was made:
The next ownCloud version should be a revolution and not merely evolution. Consequent to this decision, ownCloud Infinite Scale is a complete modernization of ownCloud in Go.
Go takes over
Of course, between ownCloud and Go lies a complete generation of experience in the design of programming languages. Accordingly, ownCloud Infinite Scale benefits from several features that were simply not available in PHP. Practically every developer points out that Go is better at concurrency, so it is much easier to deal with several different tasks within a program at the same time. ownCloud Infinite Scale, in the style of a modern application, consists of a collection of microservices that are tailored to individual specific tasks.
Three levels of ownCloud Infinite Scale
The developers divide ownCloud Infinite Scale into three tiers: One tier is responsible for storing files, one tier provides the sync and file sharing functions that have been at the core of ownCloud (such as the WebDAV interface), and the third is the new ownCloud Web interface (ownCloud Web), also a complete rewrite based on Vue.js.
Overcoming the challenge of scalable storage
With Infinite Scale, developers at ownCloud strived to get around a problem that ownCloud users often faced: insufficient storage space. To date, the only mass storage devices found in computers are hard drives and fast SSDs. All of these are block storage devices that do not bring any structure themselves. In order to be usable, they are usually used together with a file system. This is exactly the approach that ownCloud has taken up to now: The ownCloud instance itself was usually also the data storage location. This brings with it scalability problems on several levels.
On the one hand, the bandwidth of the network connection may not be sufficient to guarantee good parallel access by multiple clients. On the other hand, it is not easy to extend the space on the hard disk when it is full. ownCloud developers interpose in Infinite Scale between the actual ownCloud services and the requests of the users the framework for storage access Reva, an abstraction layer that provides developers in ownCloud with a uniform interface for different storage systems behind it.
Infinite Scale still allows direct access to a classic file system according to POSIX standard. So if you want, you can continue to store your data directly within the ownCloud instance. But Reva offers many more possibilities. For example, online storage can be integrated via Amazon’s S3 protocol. This does not necessarily have to be S3 from Amazon itself.
Many storage products such as Ceph offer S3 emulation layers and can also be used as backend storage for Reva. However, the ownCloud developers have another application in mind, namely the combination with EOS (the recursive abbreviation stands for EOS Open Storage in good open source tradition). This is a massively scalable storage system for files built by CERN, with which Reva can also communicate.
How relevant the EOS backend will actually be in everyday life remains to be seen, because the operation of an EOS cluster is complex and is probably out of the question, at least for end users. Companies, however, may see things differently. And even if EOS does not meet with great approval, the option to run Infinite Scale with S3 in the background is already a significant improvement.
Microservices and Traefik
The actual core function in own Cloud Infinite Scale will in future be provided by a series of microservices that communicate with each other. The product no longer needs an external database such as MySQL, because Reva will be primarily responsible for data storage in the future; in ownCloud, a simple microservice will simply record which files can be found under which path.
Another component takes care of authentication and authorization by connecting Infinite Scale to SAML software. External user administration is therefore only possible in Infinite Scale via OpenID or SAML connection. If desired, however, Infinite Scale can become its own OpenID provider. To the outside world, ownCloud Infinite Scale continues to speak the well-established WebDAV protocol.
The corresponding API is also provided by a separate component of the microservice cosmos of Infinite Scale. At the core of Infinite Scale is a considerable number of microservices, all written in Go. Here, the ownCloud developers prove that Infinite Scale really is geared to the standards of the present. Instead of managing the communication paths between these services on foot, Infinite Scale also includes Traefik, which automatically sets up a communication mesh between the services. Traefik comes with a whole range of practical features. These include securing the connections between the components via SSL as well as automatic load balancing between the various instances of a service.
This shows how scalable ownCloud Infinite Scale really is: If an instance goes down or the load of the clients becomes too great, the Infinite Scale mesh can be expanded at any time with new instances of each service involved.
ownCloud Web: Rewritten in Vue.js
This is also true for the completely rewritten web interface in Vue.js, which does not deny its relationship to the former web interface. This is no coincidence. Users will be able to migrate data from an old ownCloud instance to Infinite Scale via bridge mode. Because WebDAV will still be used and the API will remain stable, it will be possible to use the old ownCloud with the new web interface. The same applies to existing apps, for example, for Android or iOS: they will work just as well or not with Infinite Scale.
As befits a microservices application, ownCloud delivers its Infinite Scale software either as a single Go binary or in the form of Docker containers. These are ready to run on any system with a functional runtime environment for containers. Whether using the binaries directly or the version in containers, the admin has a central tool in the form of the Infinite Scale tool, with which the individual Infinite Scale services can be controlled.
Moreover, unlike ownCloud 10 with PHP, there is only one central configuration file in Infinite Scale, in which the admin makes all settings. A wildly distributed potpourri of settings between PHP, Apache and ownCloud itself will no longer be necessary.
A Prometheus-compatible API
With Infinite Scale, the developers are adding a Prometheus-compatible API for metrics data to their software. Prometheus can therefore read a range of performance data directly from ownCloud Infinite Scale. In addition, the Prometheus Node Exporter can be used to monitor the resources used by Infinite Scale.
Prometheus alert manager can also be used to define alarms for various events in Infinite Scale, which will notify the administrator in the event of an incident.
The new architecture indeed achieves what the developers hope for – faster response, much better scalability and interfaces for enterprise features that supercedes the functions of its predecessor. Of course, Infinite Scale is also a bet on the future. The act of leaving the PHP community behind is courageous, all the more so because ownCloud was well rooted in the PHP world.