Zero Marginal Cost
Modern, distributed applications are characterized by decentralized control, zero trust, open source and arguably an egalitarian spirit. They create significant value with little overhead, and together with IoT, are behind what economist Jeremy Rifkin calls, The Zero Marginal Cost Society, as well as the new sources of energy, modes of transportation, and means of communication of The Third Industrial Revolution. Needless to say, there’s a lot riding on software development and deployment.
As I’ve written in just about every article before this one, there is a problem with distributed computing. Simply put, its hard to implement. Its the reason there are so many testimonials about failed microservices projects. One key technology pattern helping to combat this problem could be called transparent integration. Here are some of the patterns and practices I’ve noticed:
- Distributed Operating System e.g. Elixir lang has its own take on processes (not to be confused with OS processes) which are designed to communicate with one another locally or remotely...the developer doesn't care which. (Go-Micro is another example.)
- Application Network Overlay like a sofware-defined network, provides a layer of abstraction between applications and the network, usually at layer 7, enabling data to get where it needs to go with minimal human involvement. It is sometimes implemented as a mesh network, pub-sub event/messaging layer (NATS), or a message intercept layer that acts like a switch or router (AppSwitch).
- Distributed Object Cache a group of related, serializeable, application components subscribe to each others cache events and can be deserialized and unmarshalled by a remote host on which their software was not installed prior to the event.
- Module Federation remote modules are streamed over the network at runtime when imported by a host. Importing a federated module looks the same as importing a local one.
- Application Federation combines module federation, runtime binding and clean architecture to support independent deployment of integrated components to a single process, switching seamlessly from network to in-memory communication and back again, as needed.
More on this to come…