Home United States USA — software Why Distributed Apps Need Dependency Management

Why Distributed Apps Need Dependency Management

132
0
SHARE

Dependency management is the key to unlocking the power of distributed software, We need to learn from the past to power the future of cloud-native development.
Join the DZone community and get the full member experience. Distributed cloud applications (aka microservices) have introduced an enormous amount of complexity into the design and operation of cloud software. What used to manifest itself as complexity hidden within a single process or runtime now finds itself spread across tens or hundreds of loosely coupled services. While all of these services can use different languages and can scale independently from one another, the distributed nature can often make the app as a whole hard to navigate, hard to deploy, and hard secure. This new complexity makes it increasingly difficult to manage and contribute to cloud-native applications and beckons questions as to how we can maintain healthy cloud software. How can we take advantage of the benefits of service-oriented design without introducing friction and cost elsewhere? Fortunately, we’ve run into this problem before. Microservices aren’t the first pattern that has forced developers to figure out how to collaborate and contribute to endless webs of interconnected components. For the last few decades, the solution has been the same: dependency management. We use dependency managers every day to re-use public and private software packages, build upon the work of others, and gracefully encapsulate the details of our own work into consumable formats. There are a number of reasons why dependency management is the key to unlocking the power of distributed software, and it’s high time we learn from the past to power the future of cloud-native development. One of the most important functions of dependency managers like NPM, Pip, Maven, and others is to broker collaboration amongst developers. By providing a consistent packaging mechanic that seamlessly enables code to be extended, dependency managers have enabled otherwise unrelated teams to consume each other’s work. While these tools can be used within the walls of enterprises to enable teams to publish and collaborate on their work, we’ve seen dependency managers used at a much grander scale to broker collaboration within the open-source community. The consistency of the tooling and width of adoption has enabled the creation of enormously powerful and freely accessible libraries for all to use and continue to build upon. While this level of collaboration has been realized within the communities for individual languages (NPM for JavaScript, Pip for Python, and so on), it has yet to be fully realized within the cloud-native community. We, fortunately, have Docker to create consistency in how cloud services are packaged, but containers don’t have enough information about the relationships between services to resolve and extend dependencies. Adding proper dependency management to index and resolve relationships to peer apps and services is critical if we want to realize for microservices what others already do with libraries in individual languages.

Continue reading...