程序员架构修炼:架构设计概要,业务、应用、技术、数据架构

简介: 架构设计在架构设计过程中,我们会根据需要做出不同的架构设计,而在设计时需要涉及一定的架构设计核心要素。

架构设计

在架构设计过程中,我们会根据需要做出不同的架构设计,而在设计时需要涉及一定的架构设计核心要素。

架构设计概要

架构设计是从业务需求到系统实现的一个转换,是对需求进一步深入分析的过程,用于确定系统中实体与实体的关系,以及实体的形式与功能。架构可根据从业务需求到系统实现的不同需要分为:业务架构、应用架构、数据架构、技术架构。下面以电商系统为例进行架构设计。

业务架构

业务架构是对业务需求的提炼和抽象,使用一套方法论对产品(项目)所涉及需求的业务进行业务边界划分,简单地讲就是根据一套逻辑思路进行业务的拆分,开发软件必须满足业务需求,否则就是空中楼阁。软件系统在业务上的复杂度问题,可以从业务架构的角度切分工作交界面来解决。比如在做一个电商网站时,需要将商品类目、商品、订单、支付、退款等功能很清晰地划分出来,不要在业务架构中考虑用什么技术开发、并发量是否太大、选择什么样的硬件,等等。

这里简单规划了电商系统的业务模块,对其根据业务架构的模块不断细化,一直分解到代码流程。对于软件开发而言,以业务架构为依托,架构师和开发者能比较清晰地看到系统的业务全貌,架构师能更方便地分析系统复杂度,分解业务逻辑,做好开发的分工,如图5.1所示。

图5.1

业务架构是决定一个软件项目能否顺利开展的总纲,软件架构是业务架构在技术层面的映射,合理的开发分工也应该基于业务架构去做。如果没有业务架构,进行软件开发就会很盲目。业务架构是需求和开发的汇聚点,需求分析是否做到位,功能开发是否达到预期目标,都以此为依托。我们在工作中会遇到一些问题,例如研发人员说需求分析做得不到位,而做需求的人员会质疑需求做到怎样才算到位,为什么开发出的产品和用户想要的不一致,这些从根上来说,都是因为没有将业务架构梳理清楚,没有达成共识。

站在软件项目的角度来看,在项目前期做好业务架构设计,对整个项目的开发都有重要的意义。例如,对于比较类似的业务系统,可能业务架构在比较粗的颗粒度上是一样的,而在细化过程中不一样。

在做项目时,当手头有一个现成的系统,需要做一个需求类似的项目时,大家可能会首先尝试用现成的系统去覆盖新项目,以求利益最大化。对于该想法能否实现,可以通过业务架构来衡量,如果没有业务架构,则接下来的工作会非常盲目。业务架构的设计原则如下。

(1)将业务平台化。

◎ 业务平台化,相互独立,例如交易平台、物流平台、支付平台、广告平台等。

◎ 基础业务下沉,可复用,例如用户、商品、类目、促销、时效等。(2)将核心业务和非核心业务分离。将电商系统的核心业务和非核心业务如主交易服务和通用交易服务分离,将核心业务精简(利于稳定),并将非核心业务多样化。

(3)隔离不同类型的业务。

◎ 交易平台的作用是让买家和卖家签订交易合同,所以需要优先保证高可用,让用户能快速下单。

◎ 履约业务对可用性没有太高要求,但要优先保证一致性。

◎ 秒杀业务对高并发要求很高,应该和常规业务分离。

(4)区分主流程和辅助流程。要清楚哪些是电商系统的主流程,在运行时优先保证主流程的顺利完成;对辅助流程可以采用后台异步的方式,避免辅助流程的失败影响主流程的失败回流。

应用架构

应用架构介于业务与技术之间,是对整个系统实现的总体架构,需要指出系统的层次、系统开发的原则、系统各个层次的应用服务。

如图5.2所示为将系统分为表现层、业务流程层、服务层、服务构建层、数据层、集成层、数据架构层和服务治理层,并写明每个层次的应用提供的服务。

在进行系统拆分时,要平衡业务和技术的复杂度,保证系统形散神不散。系统采用什么样的应用架构,则受到业务复杂度的影响,包括企业的发展阶段和业务特点;同时受技术复杂度的影响,包括 IT技术的发展阶段和内部技术人员的水平。业务的复杂度(包括业务量大)必然带来技术的复杂度,应用架构的目标是在解决业务复杂度的同时避免技术太复杂,确保业务架构落地。

图5.2

应用架构的设计原则如下。

(1)稳定

◎ 一切以稳定为中心。

◎ 架构尽可能简单、清晰,追求小而美,不要大而全。

◎ 不过度设计。

(2)解耦

◎ 将稳定部分与易变部分分离。

◎ 将核心业务与非核心业务分离。

◎ 将电商主流程和辅助流程分离。

◎ 将应用与数据分离。

◎ 将服务和实现细节分离。(3)抽象

◎ 应用抽象化:应用只依赖服务抽象,不依赖服务实现的细节和位置。

◎ 数据库抽象化:应用只依赖逻辑数据库,不需要关心物理库的位置和分片。

◎ 服务抽象化:应用虚拟化部署,不需要关心实体机的配置,动态调配资源。

(4)松耦合

◎ 跨域调用异步化:在不同的业务域之间尽量异步解耦。

◎ 非核心业务尽量异步化:在核心业务和非核心业务之间尽量异步化。

◎ 在必须同步调用时,需要设置超时时间和任务队列的长度。

(5)容错设计

◎ 服务自治:服务能彼此独立修改、部署、发布和管理,避免引发连锁反应。

◎ 集群容错:应用系统集群部署,避免单点服务。

◎ 多机房容灾:多机房部署、多活。

技术架构

技术架构就是对在业务架构中提出的功能(或服务)进行技术方案的实现,包括软件系统实现、操作系统选择和运行时设计。技术架构的边界比较模糊,对于不同的受众,内容的详细程度也不同,技术栈自上而下比较关注技术架构,但是各层关注的点不同。技术决策层可能关心的是系统或系统群的技术选型,对整体的把握要保证不因为选型引起其他风险,例如,如果在高性能存储方面选择 Redis,就要尽量保证网络的封闭性,避免公网访问;再如,在选择以COBOL语言实现的各类产品时,要考虑市场上开发人员数量少,需要承担更高的迭代成本等。

上述业务架构的一个简单技术架构如图5.3所示。

图5.3

技术架构的设计原则如下。

(1)无状态,即尽量不要把状态数据保存在本机上。

(2)可复用。

◎ 复用粒度是有业务逻辑的抽象服务,不是服务的实现细节。

◎ 服务引用只依赖服务抽象。

(3)松耦合

◎ 跨业务域调用,尽可能异步解耦。◎ 在同步调用时设置超时时间和队列大小。

◎ 将相对稳定的基础服务与易变流程服务分离。

(4)可治理

◎ 服务可降级。

◎ 服务可限流。

◎ 服务可开关。

◎ 服务可监控。

◎ 白名单机制。

◎ 制定服务契约。

(5)基础服务

◎ 基础服务下沉、可复用,例如时效、库存和价格计算。

◎ 基础服务自治、相对独立。

◎ 对基础服务的实现要精简,并可水平扩展。

◎ 对基础服务的实现要进行物理隔离,包括基础服务相关的数据。

数据架构

数据架构是对存储数据(资源)的架构,其设计原则和应用架构

设计大同小异,在设计时需要考虑系统的业务场景,需要根据不同的业务场景对数据进行异构设计、数据库读写分离、分布式数据存储策略等。如图5.4所示是电商系统中数据架构的一个概要。

图5.4

数据架构包括两部分内容:静态部分的内容和动态部分的内容。

静态部分的内容的重点是数据元模型、数据模型,包括主数据、共享动态数据和所有业务相关的业务对象数据的分析和建模;动态部分的内容的重点则是对数据全生命周期的管控和治理。因此,不能单纯地将数据架构理解为纯静态的数据模型。业务架构中数据模型的分析重点是主数据和核心业务对象,应用架构中数据模型的分析重点则进一步转换为逻辑模型和物理模型,直到最终的数据存储和分布。

数据分两个层面的生命周期:单业务对象数据的全生命周期,它往往和流程建模中的单个工作流或审批流相关;跨多个业务域对象数据的全生命周期,它体现的是多个业务对象数据之间的转换和映射,

往往和端到端的业务流程 BPM 相关。这里要注意,数据虽然是静态层面的内容,但是数据的生命周期或端到端的数据映射往往间接反映了流程,这是很重要的内容。

数据建模的方法包括面向结构的传统ER模型分析方法,也包括面向对象的对象类模型分析方法,它们都是可行的数据建模方法,只是传统ER模型分析方法更容易实现向底层物理数据库模型的转换,而面向对象的对象类建模方法更容易体现抽象和复用。特别是在企业架构建模中,面向对象和面向结构往往不是严格区分的,很多时候都会出现两种方法混用的情况,但重点是区分每种方法或工具的重点及要解决的问题。与数据相关的矩阵分析相当多,业务架构阶段的重点矩阵分析是业务对象和业务流程、业务组件、业务功能间的类CRUD矩阵分析;而应用架构阶段的重点矩阵分析是逻辑或物理模型对象和具体的应用模块或应用功能间的矩阵分析。两者的思路基本类似,只是关注的层面不同,前者重点关注主数据的识别和业务组件的分析,而后者重点关注应用功能模块的划分和模块间集成接口的初步分析。

根据前面的思路,我们仍然应该将数据集成分析分解为两个层面的内容:业务层面的分析,以及应用和 IT 实现层面的分析。前者的重点是理清业务流程或业务域之间的业务对象集成和交互,而后者的重点是如何更好地共享数据或如何通过类似的 BI 工具或大数据平台实现数据的集成和交互。

数据架构的设计原则如下。

(1)统一数据视图,即保证数据的及时性、一致性、准确性和完整性。

(2)数据和应用分离。

◎ 应用系统只依赖逻辑数据库。

◎ 应用系统不直接访问其他应用的数据库,只能通过接口访问。

(3)数据异构,即在源数据和目标数据内容相同时做索引异构,在商品库不同维度的内容不同时(如订单数据中的买家库和卖家库)做数据库异构。

(4)数据库读写分离。

◎ 将访问量大的数据库做读写分离,例如订单库。

◎ 将数据量大的数据库做分库分表。

◎ 将不同业务域的数据库做分区隔离。◎ 对重要的数据配置备库。

(5)采用关系数据库。除成本因素外,MySQL 的数据库扩展性和高并发支持能力较强,也比较容易招聘到相关的研发人员和运维人员。

(6)合理利用 NoSQL 数据库。在数据库有能力支撑时,尽量不要引入缓存。另外,要合理利用缓存做容灾。

本文给大家讲解的内容是程序员架构修炼:架构设计概要,业务、应用、技术、数据架构

本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。

相关文章
|
17天前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
15天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
8天前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
128 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
15天前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####
|
22天前
|
Cloud Native 安全 持续交付
深入理解微服务架构及其在现代软件开发中的应用
深入理解微服务架构及其在现代软件开发中的应用
40 3
|
22天前
|
Cloud Native 持续交付 云计算
云原生技术在现代IT架构中的转型力量####
本文深入剖析了云原生技术的精髓,探讨其在现代IT架构转型中的关键作用与实践路径。通过具体案例分析,展示了云原生如何赋能企业实现更高效的资源利用、更快的迭代速度以及更强的系统稳定性,为读者提供了一套可借鉴的实施框架与策略。 ####
23 0
|
22天前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
42 1
|
23天前
|
监控 持续交付 API
深入理解微服务架构及其在现代应用开发中的应用
深入理解微服务架构及其在现代应用开发中的应用
24 0
|
16天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
25天前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
40 3
下一篇
DataWorks