What is Amino.Run?¶
Amino.Run is an open source, multilanguage development platform and distributed runtime environment designed to make distributed applications much easier to design, develop and operate. It is the distributed process runtime component of the broader Amino distributed operating system effort, which also includes subsystems for:
- distributed, reactive memory (Amino.Sync)
- distributed, transactional persistent store (Amino.Store)
- distributed privacy and security (Amino.Safe)
Amino.Run supports most commonly used programming languages and is, by default, deployed and managed in container environments using Kubernetes. Common examples of distributed applications include:
- mobile-cloud applications,
- mobile backend style applications,
- edge computing applications and
- other cloud-native applications
All of these classes of applications share a common set of difficult design and development challenges including performance, distributed concurrency, remote invocation, synchronization, fault tolerance, scalability, sharding, code and data migration, leader election, load balancing, observability, fault diagnosis and many more.
Amino.Run is based on, and extends, several years of research work done at the University Of Washington Computer Systems Lab in Seattle.1,2,3.
Amino.Run is alpha software, and not yet suitable for production use. We have a well-funded development team actively working on getting it production ready, and actively support contributions from the open source community.
Why we created Amino.Run?¶
In a nutshell, we created Amino.Run to make design, development and operation of reliable, fast, distributed applications quicker, easier and more fun.
In summary, our approach is to:
- provide a wide and expandable range of standard, re-usable, pluggable and production-ready Deployment Managers DMs to solve many common distributed computing problems (including all of those mentioned above) so that you can focus on application logic, not solving hard distributed systems challenges.
- make it very easy to plug combinations of these into new or existing application code, even if it was not designed to be distributed - in many cases a few lines of code can change a simple standalone application written to run on a single computer into a robust, scalable distributed, cloud-native application. Create sharded, consistent replicas of your objects, or replicated shards. Either way it requires only a one-line code or configuration change to your application.
- make it easy to deploy your application anywhere, and move it
around (piece by piece) as you wish:
- On your local machine
- On (public or private) cloud servers
- On mobile devices (Android, iOS)
- On edge devices
- Even have Amino.Run move parts of your application around automatically at runtime to optimize performance, reliability or battery power consumption.
Over time Amino will include a runtime process manager (Amino.Run), a reactive distributed memory manager (Amino.Sync), a consistent transactional storage system (Amino.Sync) and a privacy and security framework (Amino.Safe). Initial focus is on making Amino.Run production-ready.
1 Customizable and Extensible Deployment for Mobile/Cloud Applications
2 Diamond: Automating Data Management and Storage for Wide-area, Reactive Applications
3 Building Consistent Transactions with Inconsistent Replication (Extended Version)
4 Not all of these languages are currently officially supported, but they are all on our medium-term roadmap, support based on GraalVM