You can easily google modern software architecture, and you will get both images and definitions. They vary widely. I tried a few weeks ago, and was looking for something I could easily grasp and use as a high-level basis to expand upon as needed. I was looking for something more succinct, providing a nice high-level logical diagram with enough explanations and simple examples that I could run with it, and expand and elaborate as I wish.
Not finding what I was looking for, I created it myself and have decided to share it here. It is short and I hope you find it useful.
Modern Software Architecture
Typical modern software architectures include, but are not limited to, the following attributes:
- They are SOA.
- They are Distributed and highly-scaleable, upon demand.
- They offer well-defined API's.
- They build to change instead of build to last.
- They provide a well established separation of concerns.
- They provide data partitioning that fits architectural needs, and not database monolithic, that is, they do not house all data within a single database. There may be many different data stores, including relational, NoSQL, in-memory, and more.
- They are loosely-coupled.
- They integrate with lots of systems, applications, message queues, and message logs. Many of these are open-source.
- They perform synchronous as well as asynchronous processing.
- They are a mash of lots of different technologies. For example, php, nodejs, Apache Kafka, Apache Storm, Apache Spark, hadoop, druid, and many many more...
Depicting a Modern Software Architecture
I now provide diagrams depicting:
- logical modern software architecture
- service categories
and provide some next steps to provide some tips to help you move forward with your understanding of modern software architecture.
Logical Modern Software Architecture
Figure 1 below depicts a logical modern software architecture. I like this as a basis as it nicely partitions architecture into its logical core at a high-level, and demonstrates horizontal scaling.
The architecture in Figure 1 is defined as follows:
- Business Logic
- Platform Services
As modern software architectures publicize API's, they proxy the services and business logic. Proper API management can manage user request limits, throttle requests at high-demand times, and provide a clean contract to your service(s).
Integration gets interesting, as it provides the integration points into platform services such as message queueing, database, data analytics, data warehousing, system logging and instrumentation services, and many more.
The categories in Figure 2 define some general service groupings. Services are commonly hosted where they make sense respective to their functions. Calls need to be made to exposed contracts/interfaces to properly govern them.
Most importantly, it should be understood that services help provide the loose-coupling and are critical in creating a distributed architecture. With that in mind, services are commonly hosted in many, if not all, of the logical layers defined in Figure 1.
Identify other aspects and important influencers to the overall architecture. This helps to create a more complete architectural picture. For example, consider the following:
- UI architecture
- Security architecture
- data in transit
- data at rest
- Information (data) architecture
- Integration architecture
- Physical architecture
- Identify NFR's
- CI Deployments
- Release management
- QA (automation testing...)
This was short and to-the-point, and I hope you can use this as the basis to further your understanding of modern software architecture. Extend and elaborate to your heart's content!
Credit from my Colleague: Brian Buikema, Sr. Software Architect