In talking about software architecture, everybody is referring to the following diagram. I like this way of description. Actually I often come back to this framework to verify my idea.
IEEE 1471 conceptual framework for architecture description
However it might be good to interpret it in the way most people can understand at first glance. Here is my interpretation of IEEE 1471.
There’re basically following 4 elements that define a software architecture.
1. Functional/Non-functional requirements.
Usecases and quality attributes. It’s said that to examine 10% of entire usecases would suffice in designing the architecture.
Some critical restrictions such as band-width, data volume etc. would affect the architecture.
3. Patterns / Practices
Patterns used in successful projects can be leveraged. Those include design , deployment , data , business and integration patterns.
4. Architecture Disciplines
Disciplines such as high coherence, loose coupling etc.
First two elements are project specific and last two are the common elements across the board. When we talk about architecture, it’s also said “There’s no one size fits all”. That’s very true as long as we have project specific elements to define it. However we can classify them into categories based on following 2 dimensions; application type and development scenario.
1. Web Hosting
2. Media Hosting
3. Multi-tenant Service
4. High Performance Computing
5. Distributed Storage
6. Multi-enterprise Integration
1. Greenfield (Development from scratch)
2. Brownfield (Migration)
- Vertical separation : functional extension
- Horizontal separation : app in the cloud with data on premise or vice versa
- Data Archive : long-lived data in the cloud for cost efficiency
- Elastic scalability : cloud for peak workload only
- Disaster Recovery : cloud as backup
I think we can eventually come up with a framework like this.
Application catalog has a list of application types, “High Performance Computing” for instance. It will be developed based on a certain architecture pattern like parallel processing which comes with a number of frameworks that implement the pattern like Dryad, Hadoop etc. Further more, the development scenario and application types combine to produce a matrix to classify a solution domain in depth.
I know it’s going to be a long journey but can’t wait to hit the road.