Software Architecture in Practice
Status:: 🟥
Links:: Software Architecture
Metadata
Authors:: Bass, Len; Clements, Paul; Kazman, Rick
Title:: Software Architecture in Practice
Date:: 2021
Publisher:: Addison-Wesley
URL::
DOI::
Bibliography
Bass, L., Clements, P., & Kazman, R. (2021). Software Architecture in Practice (Fourth edition). Addison-Wesley.
Zotero
Type:: #zotero/book
Zotero::
Keywords:: [💎, Architectural Tactics, Energy Efficiency, Software Architecture]
Relations
Abstract
The Definitive, Practical, Proven Guide to Architecting Modern Software--Fully Updated with New Content on Mobility, the Cloud, Energy Management, DevOps, Quantum Computing, and More
Updated with eleven new chapters, Software Architecture in Practice, Fourth Edition, thoroughly explains what software architecture is, why it's important, and how to design, instantiate, analyze, evolve, and manage it in disciplined and effective ways.
Three renowned software architects cover the entire lifecycle, presenting practical guidance, expert methods, and tested models for use in any project, no matter how complex. You'll learn how to use architecture to address accelerating growth in requirements, system size, and abstraction, and to manage emergent quality attributes as systems are dynamically combined in new ways.
With insights for utilizing architecture to optimize key quality attributes--including performance, modifiability, security, availability, interoperability, testability, usability, deployability, and more--this guide explains how to manage and refine existing architectures, transform them to solve new problems, and build reusable architectures that become strategic business assets.
- Discover how architecture influences (and is influenced by) technical environments, project lifecycles, business profiles, and your own practices
- Leverage proven patterns, interfaces, and practices for optimizing quality through architecture
- Architect for mobility, the cloud, machine learning, and quantum computing
- Design for increasingly crucial attributes such as energy efficiency and safety
- Scale systems by discovering architecturally significant influences, using DevOps and deployment pipelines, and managing architecture debt
- Understand architecture's role in the organization, so you can deliver more value
Notes & Annotations
Energy Efficiency
Energy Efficiency Tactics
- Monitor Resources
- Metering
- Static Classification
- Dynamic Classification
- Allocate Resources
- Reduce Usage
- Discovery
- Schedule Resources
- Reduce Resource Demand
- Manage Event Arrival
- Limit Event Response
- Prioritize Event
- Reduce Computational Overhead
- Bound Execution Times
- Increase Resource Usage Efficiency
Energy Efficiency Patterns
For Further Reading
- @Procaccianti.etal.2014.CatalogueGreenArchitectural
- @Paradis.etal.2021.ArchitecturalTacticsEnergyEfficiency
- @Pang.etal.2016.WhatProgrammersKnow
- @Kazman.etal.2018.ManagingEnergyConsumption
- @Chowdhury.etal.2019.GreenBundleEmpiricalStudy
- @Fonseca.etal.2019.ManifestoEnergyAwareSoftware
- @Cruz.Abreu.2019.CatalogEnergyPatterns
- @Schaarschmidt.etal.2024.FrameworkSoftwareDesign
Performance
Control Resource Demand
📑 Annotations (imported on 2024-01-19#17:58:18)
A tactic is a design decision that influences the achievement of a quality attribute response—it directly affects the system’s response to some stimulus. Tactics may impart portability to one design, high performance to another, and integrability to a third.
📑 Annotations (imported on 2024-01-19#18:03:35)
At both the low end and the high end, energy consumption of computational devices has become an issue that we should consider. This means that we, as architects, now need to add energy efficiency to the long list of competing qualities that we consider when designing a system. And, as with every other quality attribute, there are nontrivial tradeoffs to consider: energy usage versus performance or availability or modifiability or time to market.
An architectural approach is necessary to gain control over any important system quality attribute, and energy efficiency is no different. If system-wide techniques for monitoring and managing energy are lacking, then developers are left to invent them on their own. This will, in the best case, result in an ad hoc approach to energy efficiency that produces a system that is hard to maintain, measure, and evolve. In the worst case, it will yield an approach that simply does not predictably achieve the desired energy efficiency goals.
Most architects and developers are unaware of energy efficiency as a quality attribute of concern, and hence do not know how to go about engineering and coding for it. More fundamentally, they lack an understanding of energy efficiency requirements—how to gather them and analyze them for completeness. Energy efficiency is not taught, or typically even mentioned, as a programmer’s concern in today’s educational curricula. In consequence, students may graduate with degrees in engineering or computer science without ever having been exposed to these issues.
Most architects and developers lack suitable design concepts—models, patterns, tactics, and so forth—for designing for energy efficiency, as well as managing and monitoring it at runtime. But since energy efficiency is a relatively recent concern for the software engineering community, these design concepts are still in their infancy, and no catalog yet exists.