In: Computer Science
Write a paragraph or two about which of five software architecture patterns (Layered Architecture, Event Driven Architecture, Microkernel Architecture, Microservices Architecture Pattern, and Space-Based Architecture) would be best given each scenario. Indicate which pattern would be used to implement the system and why it is the best choice. Use descriptions of how the various architectural characteristics apply to this system and pattern to support your decision as needed.
The first system in question is a set of software drivers and middleware that implements a new communication system which involves many new communication protocols.
The second system in question is a software development tool which allows customers and engineers to create and develop software for an IOT device. In the future, it is hoped that the tool may be extended by customers, third parties, and the open source community to provide many different additional functionalities in addition to the base functionality being provided today
1. For set of software drivers and middleware that implements a new communication system which involves many new communication protocols
Layered architecture is most suited for this kind of development. For understanding how this is perfect for this scenario we have to understand what is layer architecture first;
Layered arch is divided in layers, where each layer has specific purpose like presentation, application, domain and infrastructure. For drivers and middleware, it is necessary to keep them as separate independent entities and can communicate with hardware on need basis. Drivers can be written as layered modules where the driver UI is encoded in presentation layer, all the driver logic comes in application layer, which communicate to hardware centric layer. Most important aspect of layered architecture is less high cohesion and low coupling.
2. For a software development tool which allows customers and engineers to create and develop software for an IOT device. In the future, it is hoped that the tool may be extended by customers, third parties, and the open source community to provide many different additional functionalities in addition to the base functionality being provided today:
Microservices architecture is perfect for this scenario. As microservice architecture can be scale up on demand basis. Multiple teams across the globe can develop there loosely coupled services and club them together on single platform, it's more like attaching and detaching a service from a platform depends on demand. Version maintenance is easy in this style. It decomposes a big system into small lightweight, easy to maintain, fine-grained services which results in easy to understand modular program. The most important aspect of microservice architecture is easy deployment and continuous delivery.