Co-Founder Taliferro
Introduction
Application architecture is a key deliverable of a project. This post provides architects, application designers, and developers with the following:
- Summary of the application inventory, in particular, how the application relates to the business vision. How it reacts to other applications and the sum of their qualitative and quantitative characteristics.
- An overview of how specific architectural issues are handled
- Guidelines for selecting a specific technical approach where alternatives exist
For this post to remain relevant, ongoing work must occur to ensure that as new architecture capabilities are developed, this post is updated with the other architectures initiated to cover gaps known to exist in this post.
Architecture Principles
Time-based snapshot - A requirement to display asset state at particular points in time.
The right level of granularity - Ensure the right level is considered for data, services, and user display consumption.
Don't break subscribers - Any subscribers to a web service exposed should not break the subscriber's code.
Horizontal data growth -Based on plans to import data from various systems, ensure there is a path for flat data growth.
Decouple - Decouple the view from the middleware, and the middleware from the data. Avoid tight coupling wherever possible.
State rebuild - The system's current state should be able to be rebuilt at any point.
Data consistency across services - Data accessed through web services must be consistent regardless of the consumer.
Serve only data needed by the Client - Avoid retrieving or gathering data the client did not request. Totals, lists, and other queries should not exceed the initial request by the client.
Prepare and ensure data is available - Set up triggers to prepare data before the information is needed; for example, when a user logs in, retrieve and persist in advance only the data required by the user IF the data is not currently persisted.
Use the Materialized View Pattern - The materialized view pattern is used to prepopulate views of data to avoid unnecessary query operations. A materialized view can significantly improve performance.
Use the Circuit Breaker Pattern - In some cases, the services a user needs may not be available, or the data may not be available. Resource threads might be consumed by the caller while waiting for the other service to respond. This could lead to resource exhaustion, which would make the calling service unable to handle other requests. The failure of one service can potentially cascade to other services. The client should invoke a remote service via a proxy similar to an electrical circuit breaker. When the number of consecutive failures crosses a threshold, the circuit breaker trips and all attempts to invoke the remote service will fail immediately. After the timeout expires, the circuit breaker allows a limited number of test requests to pass through. If those requests succeed the circuit breaker resumes normal operation. If there is still a failure, the timeout period begins again.
API Gateway - Allows clients to access individual services at a micro level. The granularity of the API should be fine-grained to allow clients to interact with multiple services as, typically, the services that are provided are different than the client's needs.
Physical Architecture
A project's technical architecture comprises multiple environments. These environments include integration, staging, and production, where separate resource groups isolate each domain.
The staging group is not an active environment but is designed to mirror the production environment and assume its activities for real-world testing. Azure provides redundancy and failover capabilities through the use of a configuration setup. Details on configuration and setup will be defined during an Operations Architecture and Deployment Planning phase.
In addition, the external systems used for development and System tests do not belong to a project but are active environments within a company operated by various stakeholders.
Through a set of web services, the architecture should empower developers to assemble new business applications that combine the functionality from multiple systems within a company, providing the end-user with new cross-functional network-enabled applications. The architecture should meet the challenges of:
- Availability
- Data Management
- Management and Monitoring
- Performance and Scalability
- Resiliency
- Security