第一单元设计优良的架构
软件架构是针对软件系统、子系统以及模块层次的设计过程,包括如何组织系统组件,管理组件之间关系以及指导设计的基本原则。
架构的定义
业界对架构的各种认识与定义。对组件的理解,对自治组件与服务的分析;组件与环境的关系。架构决策的关键性,架构设计的重要原则:关注点分离原则与高内聚、松耦合。
优良的架构
优良架构的特征:简单、一致、清晰、自治。
设计简单的架构:清晰地表达设计意图,保证系统足够小,促进恰如其分的架构设计。遵循 “关注点分离”的架构原则,将架构的分离策略分为纵横分离与内外分离。
设计一致的架构:设计风格的一致性,概念的一致性,解决方案的一致性以及路线图的设计。
设计清晰的架构:随着软件系统变得越来越复杂,若能保证架构的清晰,将是避免混乱的关键。
设计自治的架构:小完备特征、自我履行特征、稳定空间特征和独立进化特征。
案例分析:当当⺴的架构优化,普华永道的架构演化
第二单元架构风格与参考架构
REST架构风格
REST描述了Web作为一个分布式超媒体的应用,相互链接的资源通过交换代表资源状态的表述来进行通信。它是WEB系统架构运用为文泛的架构风格。
案例分析:订单管理系统的REST架构。通过案例讲述如何在架构设计中运用REST架构。
基于消息的分布式架构
分布式架构是企业软件系统主要采用的一种架构风格,通过使用基于消息的中间件完成消息的发送与接收,从而实现系统之间的集成,以及业务处理的异步模型。
案例分析:医疗卫生知识库系统。通过引入消息队列改善系统架构的质量。
数据为中的软件架构
一般的数据管理系统都分为三个步骤: Data Ingestion、Data Storage与Data Processing。在大数据处理中,这种模型体现得更为明显。所有的软件系统都离不开数据处理。此外,本节内容还会讲解 Spark所支持的MapReduce、Streaming等架构风格,剖析Spark的架构原理和佳实践。
案例分析:电信业数据分析平台,分析基站、区以及客户的通信行为、通信质量和投诉管理。
向服务的软件架构与微服务架构
从SOA的服务设计原则到微服务( Micro Service)架构,讲解如何进行面向服务的架构设计。
案例分析:企业后台支撑系统
第三单元架构模式与应用实践
分层架构模式与实践
讲解经典的软件分层架构以及当下架构设计对分层的认识与分解,并介绍了领域驱动设计中推崇的分层模
式。
六边形架构模式与实践
Cockburn提出的六边形架构不仅是一种有效架构模式,同时还是一种非常重要的架构分析方法,重点关注模
块(子系统)之间的通信与集成方式。
微内核架构模式与实践
微内核模式是架构模式中极为重要的一种模式,尤其是它划分功能子集为核心功能子集的设计思想非常重要,但它的重要性却常常被人忽略。
管道-过滤器架构模式与实践
若要实现数据处理的良好可扩展性,有效降低数据处理的算法复杂度,就需要运用管道-过滤器模式。
MVC架构模式及其延伸
MVC架构模式是常用的架构模式,体现了关注点分离的架构原则。在介绍 MVC模式的同时,还将讲解MVC模式的若干变化与延伸。
趋势分析:前端架构的演化与发展
CQRS架构模式与实践
CQRS模式即命令查询职责分离模式,是 DDD中基于事件的读写分离架构模式。将业务逻辑建模为状态机模型,并利用松散耦合的命令与事件机制,采用异步模型改善系统整体性能。
案例分析:会议注册与管理系统的 CQRS架构
第四单元领域驱动设计
优秀的软件系统与好的软件设计息息相关,但关键的还是在于对需求的理解。如果不能正确的理解软件需求,那么再好的设计也不能设计出好的软件。正确的做事情固然重要,更重要的是要做正确的事。领域驱动设计就是要解决技术人员对业务建模的问题,是分析获得业务架构和应用架构的设计方法。
限界上下文(Bounded Context)
若要进行领域建模,并将业务需求逐步演化为架构设计,则需要引入 DDD(领域驱动设计)的战略设计作为指导。场景图与限界上下文可以很好地结合,帮助架构师很好地识别各个子领域的概念边界与设计边界。如此则可以运用“分而治之”的思想识别出整个系统的业务逻辑边界与物理边界。
场景驱动
场景驱动设计的核心在于识别场景,它需要设计者结合具体的业务场景,分析业务流程,以此驱动出用例;再以用例驱动对业务逻辑的建模。场景驱动设计的核心模型为 6W模型,即Who,Why,When,What,Where与hoW。它将对应职责模型的业务价值、业务功能与业务实现,并从角色的角度思考对象之间的协作以及设计边界。
用例方法 (Use Case)
通过利用传统的用例方法来帮助我们驱动出领域的限界上下文。
演练:识别电子商务系统的限界上下文
上下文映射图 (Context Map)
本部分内容会讲解限界上下文之间主要存在的组织模式与集成模式,这其中包括防腐层,开放服务调用等。利用上下文映射图,有助于识别上下文之间的关系,思考处于上下文内领域模型之间的通信方式,从而帮助架构师驱动出终的应用逻辑架构。
可视化演练:电子商务系统的应用逻辑架构
第五单元风险驱动设计与Clean Architecture
风险驱动设计
风险驱动模型主要关注软件系统的质量属性,通过识别风险来逐步驱动软件架构设计,它强调进行恰如其分的架构设计。
风险驱动设计的过程风险驱动设计的过程分为三个步骤,即识别风险,并对风险排定优先级;选择和运用适当的软件技术来降低风险;评估风险是否得到降低。
案例分析:RackSpace架构的演进
风险评估模型
评估风险并非只是架构师的职责,而应该是整个团队包括客户共同参与的结果。本部分将引入可视化的Future Backwards方法,引导团队搭建软件系统的风险评估模型。
约束对架构的驱动
除了风险之外,我们也可以通过识别一些架构约束(约束的识别是通过与客户的充分沟通,从质量属性的角度来分析),并将其作为一种驱动力来逐步改进或者调整架构。技术债务也可以看做是另一种设计约束,我们需要随时更新整个项目的技术债务,并制定相应的计划去解决这些技术债务,从而进一步优化软件系统的整体架构。
案例分析:约束对REST架构风格的设计驱动
Clean Architecture思想
Clean Architecture提出的模型是一个可测试的模型,无需依赖于任何基础设施就可以对它进行测试,只需通过边界对象发送和接收对应的数据结构即可。它们都遵循稳定依赖原则 ,不对变化或易于变化的事物形成依
赖。
演练:支付宝红包发送系统的设计
第六单元架构关注点专题讨论
专题一:高性能系统的设计
高性能是软件系统设计无法绕过的话题,无论是企业架构还是互联网架构,设计时都需要考虑如何满足高性能的要求,尤其是在数据量越来越大,并发访问越来越多的前提下,⾼性能会成为架构师必须要解决的问题。
本专题讨论会给出高性能设计的常见问题、解决方案与佳实践。
案例: Twitter的高性能分布式日志,满足了系统的可靠性、高吞吐量、低延迟、可扩展性等质量属性。
专题⼆:分布式事务
当今的大型软件系统都是分布式系统,随着硬件成本的逐渐降低,网络带宽的逐步增加,我们已经告别单机时代。分布式系统可以更大限度地利用硬件的水平扩展,也能够保证异构、异步系统的集成,但是带来的问题也很显著,除了运维方面的挑战外,如何保证业务服务的事务,成了棘手的问题。
本专题会介绍分布式事务 ACID约束的问题,并讲解 BASE原则以及CAD原理。
案例:通过对支付宝扣款到余额宝的案例分析分布式事务的解决方案。
专题三:大数据处理
大数据处理成为这几年热门的话题,也是大多数软件企业需要解决的问题:即如何在海量数据中寻找到业务价值。本专题会从技术角度剖析大数据技术生态圈,并主要介绍 Hadoop、Spark等大数据主流技术与平台框架。
案例:Airbnb数据基础设施的主要架构
专题四:函数式编程、事件与不变性
随着多核硬件的普及,并行计算成为软件开发的主流,这也为本来更偏向派的函数式编程思想变得越来越重要。函数式编程思想对软件架构的影响则包括:数据结构的不变性、状态迁移与事件处理机制。
案例分析:分析Redux框架以及Akka框架的设计思想,并讲解 Redux框架在前端开发的运用, Akka框架在后端开发的应用。
第七单元大型软件系统体系架构在线零售商集成解决方案
整个系统牵涉到电子商务、库存管理、呼叫中心、邮件服务等多个系统的集成。该解决⽅案通过运用分布式系统的佳实践,运用基于消息的中间件,对系统进行整体设计,使得系统能够高质量地支撑在线零售商的核心业务。
银行保险客户核心支撑系统真实案例,是某大型金融集团的客户核心支撑系统,需要支持的业务系统多达数十个,且具有不同的业务,部署在不同的平台。如何通过合理地设计,运用 ESB和REST对整个系统进行集成。 |