您当前的位置:首页>课程>软件体系架构设计

软件体系架构设计

浏览:1960
分享

Bruce zhang Read more

百林哲咨询(北京)有限公司专家团队成员

深圳大眼科技有限公司的首席架构师,联合创始人。先后就职于中兴通讯、惠普GDCC、中软国际、ThoughtWorks等大型中外企业,精通包括C#、Java、Ruby、Scala、Python、JavaScript等多种语言。

简介   

软件架构并非架构师闭门造车完成的作品,而是整个开发团队积极与客户沟通协作,在树立了共同的系统愿景与目标之后,由架构师基于架构原则与架构方法,在满足软件系统功能目标的前提下,进行的一次设计历险。之所以称为“历险”,是因为软件架构从来都不能一蹴而就,在这个过程中可能会经历诸多风险和未知的变化,如大海航行可能会遭遇的暗礁与风暴。是否能够到达成功彼岸,除了需要架构师卓越的架构能力,还需要整个开发团队遵循系统的架构原则与约束,并能在面对紧急时刻,调整系统的架构方向。

  于是,设计软件架构就面临两大难题:

· 如何明确客户的需求,并将需求没有偏差,或较小偏差地转化为架构?

· 如何设计恰如其分的架构,从而在不浪费资源的情况下,具有掌控变化与风险的能力?

本课程引入的领域驱动设计策略, 正是解决第一个问题的有效方案,它通过一些直观而又具备协作能力的方式,引导架构师与整个团队包括客户积极参与到软件架构过程中来,并通过场景图、上下文映射图、六边形架构等诸多方法与模式,让架构变成为一种沟通交流的视觉工具。换言之,这是一种体验式的架构设计。它同样遵循经典的架构原则与设计方法,但却可以让这些原则与方法清晰地可视化,让团队协作成为可能,让架构结果更加直观,从而避免了沟通上的误差与分歧,使得团队能够迅速就架构内容达成一致。

架构本身是复杂的,但它的呈现却必须足够清晰简单,易于理解,因为架构本身是作为开发团队交流基础而存在。要有效地解决前面提出的第二个问题,就需要搭建一个具备简单、一致和自治特色的整洁架构。基于此,整个培训将围绕风险驱动设计与Clean Architecture的思想来指导整个架构过程。

课程核心内容

本次课程包括以下主要内容:

· 面向对象分析与设计

· 领域驱动设计

· 场景驱动设计

· 分层架构模式

· 六边形架构模式

· 面向服务架构

· 基于消息的分布式架构

· 数据为中心的软件架构

· RESTful架构

· CQRS架构

· 微服务架构

· 风险驱动模型

· Clean Architecture思想

课程时长

2天(12H) 

分享提纲

第一单元 设计优良的架构

软件架构是针对软件系统、子系统以及模块层次的设计过程,包括如何组织系统组件,管理组件之间关系以及指导设计的基本原则。

架构的定义

业界对架构的各种认识与定义。对组件的理解,对自治组件与服务的分析;组件与环境的关系。架构决策的关键性,架构设计的重要原则:关注点分离原则与高内聚、松耦合。

优良的架构

优良架构的特征:简单、一致、清晰、自治。

设计简单的架构:清晰地表达设计意图,保证系统足够小,促进恰如其分的架构设计。遵循“关注点分离”的架构原则,将架构的分离策略分为纵横分离与内外分离。

设计一致的架构:设计风格的一致性,概念的一致性,解决方案的一致性以及路线图的设计。

设计清晰的架构:随着软件系统变得越来越复杂,若能保证架构的清晰,将是避免混乱的关键。

设计自治的架构:最小完备特征、自我履行特征、稳定空间特征和独立进化特征。

案例分析:当当网的架构优化,普华永道的架构演化


第二单元 架构风格与参考架构

REST架构风格

REST描述了Web作为一个分布式超媒体的应用,相互链接的资源通过交换代表资源状态的表述来进行通信。它是WEB系统架构运用最为广泛的架构风格。

案例分析:订单管理系统的REST架构。通过案例讲述如何在架构设计中运用REST架构。

基于消息的分布式架构

分布式架构是企业软件系统主要采用的一种架构风格,通过使用基于消息的中间件完成消息的发送与接收,从而实现系统之间的集成,以及业务处理的异步模型。

案例分析:医疗卫生知识库系统。通过引入消息队列改善系统架构的质量。

数据为中心的软件架构

一般的数据管理系统都分为三个步骤:Data Ingestion、Data StorageData Processing。在大数据处理中,这种模型体现得更为明显。所有的软件系统都离不开数据处理。此外,本节内容还会讲解Spark所支持的MapReduceStreaming等架构风格,剖析Spark的架构原理和最佳实践。

案例分析:电信业大数据分析平台,分析基站、小区以及客户的通信行为、通信质量和投诉管理。

面向服务的软件架构与微服务架构

从SOA的服务设计原则到微服务(Micro Service)架构,讲解如何进行面向服务的架构设计。

案例分析:企业后台支撑系统


第三单元 架构模式与应用实践

分层架构模式与实践

讲解经典的软件分层架构以及当下架构设计对分层的认识与分解,并介绍了领域驱动设计中推崇的分层模式。

六边形架构模式与实践

Cockburn提出的六边形架构不仅是一种有效架构模式,同时还是一种非常重要的架构分析方法,重点关注模块(子系统)之间的通信与集成方式。

微内核架构模式与实践

微内核模式是架构模式中极为重要的一种模式,尤其是它划分功能子集为核心功能子集的设计思想非常重要,但它的重要性却常常被人忽略。

管道-过滤器架构模式与实践

若要实现数据处理的良好可扩展性,有效降低数据处理的算法复杂度,就需要运用管道-过滤器模式。

MVC架构模式及其延伸

MVC架构模式是最常用的架构模式,体现了关注点分离的架构原则。在介绍MVC模式的同时,还将讲解MVC模式的若干变化与延伸。

趋势分析:前端架构的演化与发展

CQRS架构模式与实践

CQRS模式即命令查询职责分离模式,是DDD中基于事件的读写分离架构模式。将业务逻辑建模为状态机模型,并利用松散耦合的命令与事件机制,采用异步模型改善系统整体性能。

案例分析:会议注册与管理系统的CQRS架构

第四单元 领域驱动设计

优秀的软件系统与好的软件设计息息相关,但最关键的还是在于对需求的理解。如果不能正确的理解软件需求,那么再好的设计也不能设计出好的软件。正确的做事情固然重要,更重要的是要做正确的事。领域驱动设计就是要解决技术人员对业务建模的问题,是分析获得业务架构和应用架构的设计方法。

限界上下文(Bounded Context)

若要进行领域建模,并将业务需求逐步演化为架构设计,则需要引入DDD(领域驱动设计)的战略设计作为指导。场景图与限界上下文可以很好地结合,帮助架构师很好地识别各个子领域的概念边界与设计边界。如此则可以运用“分而治之”的思想识别出整个系统的业务逻辑边界与物理边界。

场景驱动

场景驱动设计的核心在于识别场景,它需要设计者结合具体的业务场景,分析业务流程,以此驱动出用例;再以用例驱动对业务逻辑的建模。场景驱动设计的核心模型为6W模型,即WhoWhyWhenWhatWherehoW。它将对应职责模型的业务价值、业务功能与业务实现,并从角色的角度思考对象之间的协作以及设计边界。

用例方法 (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对整个系统进行集成。

 


我要参加

可同时提交您的需求,我们会及时与您联系

预约内训

将课程带入到您的团队,为您的团队进行一对一辅导。

相关课程