阅读文本大约需要3分钟。
正文
如果有人让你介绍你的系统架构是什么样子的 你从哪里开始?
每个人都有自己的结构认知,并根据自己的联系内容进行总结。该系统分为用户中心、营销中心、商品中心。 这是产品经理说的;我们的系统使用三层架构和SSM框架... 这是程序员说的;用户说 该系统具有后台、前台、货物上下架、用户管理等功能。
在实际工作中,架构师架构的系统不仅要考虑用户功能的实现,还要平衡系统的可用性、高性能、可扩展性和可伸缩性。综合业务目标、当前开发人员数量、开发人员综合能力、在线时间、项目预算等,选择开发语言、开发框架和功能开发顺序。有些公司需要时间,有些公司需要质量,但最终表明结构是实时变化的,不是一个完美的结构,而是根据当前的业务需求,但你的结构必须支持这种变化 满足上述要求。
一个复杂的系统需要不同角色的人参与,所以架构师必须考虑让不同的参与者理解你的架构 如果用户为您提供原始需求,项目经理需要制定计划,以了解他们应该做什么 在不同的小组之间进行沟通 着陆您的架构,开发人员获得您的设计实现功能。因此,架构涵盖的内容和决策太多,需要从不同的角度进行设计 ,也是为了便于理解、沟通和归档架构。
最常用的架构分为逻辑架构和物理架构视图逻辑架构逻辑结构规定了哪些逻辑元素以及这些逻辑元素之间的关系。逻辑元素可以是逻辑层、功能子系统和模块。
物理架构在计算机中显示模块之间的部署逻辑、如何生成数据、计算哪一块、如何存储、共享等。
这里暂时列出概念。在架构设计之初,要避免涉及太多具体的技术细节,需要看透需求,找出实现的难点,优先考虑质量或时间。
5视图法:逻辑架构、物理架构、数据架构、开发架构、运行架构面对不同的角色,我们需要用不同的思维来表达。对于领导来说,我们可以用业务图而不是技术架构来报告,对于开发,我们可以谈论具体的开发架构、操作架构和物理架构。因此,我们需要不同的架构设计来表达。
逻辑架构逻辑架构= 模块划分+接口定义(统一接口规范)+领域模型
物理架构物理架构=硬件分布+软件部署+方案优化(可伸缩、高性能、易维护、监控)
系统、网络、服务器等基础设施更受物理结构的重视。例如,如何通过服务器部署和配置网络环境来实现应用程序的“可伸缩性和高可用性”。或者举一个实际的例子,如何通过设计基础设施架构来确保网站可以支持10W在线和7*24小时提供服务。当超过10W或低于10W在线时,可以很容易地调整部署架构来支持。
数据架构数据架构=存储+数据分布
数据架构更注重数据的持久性和存储水平,也可能包括数据的分布、复制和同步。更合适的是,如何选择所需的关系数据库、流行的NOSQL、如何确保数据存储水平的性能、高可用性、灾难等。大多数时候,它与物理架构密切相关,但它更关注数据存储水平,而物理架构更关注整个基础设施部署水平。
开发架构开发架构=技术选择+文件划分+编译关系(模块依赖关系)
开发架构更注重程序包,不仅仅是我们自己写的程序,还有SDK、第三方类库、中间价等。特别是像Java这样的主流、.NET将更加关注依赖虚拟机的语言和平台,以及基于数据库的主流应用程序。它与逻辑架构密切相关。
运行架构运行架构=物理架构+数据流控制(系统运行中的数据流关系)
顾名思义,我们更关注应用程序运行中可能出现的一些问题。例如,并发问题、常见的“线程同步”问题、死锁问题、对象创建和销毁(生命周期管理)问题等。开发架构更注重飞机起飞前的一些准备工作,可以在静态状态下规划,运行架构更注重飞机起飞后可能出现的一些问题。
实现架构设计需求分析的六个步骤由系统用户和客户收集的业务实现背景要求组成的原始需求文档分析,包括功能要求、质量(性能要求)、约束(时间、预算、可行性分析、风险评估、三方是否需要对接)。在这里,我们应该输出一个完整的需求文档,包括我们想做什么(功能范围、非功能需求)、我们是否能做到、我们能做到的前提要求和我们需要面对的问题,以及如何做(进入系统分析实现阶段)。
确定关键需求不仅要筛选功能需求(如用例),还要权衡非功能需求,最终确定对架构起关键作用的需求。如果需求是以高性能并发性为关键,还是以可扩展性为要求或同时满足,因为考虑到成本、在线时间和现有系统的影响,部分需求将被放弃,关键需求需要确定:核心功能和高风险功能。
概念架构设计一个决定四种选择:如何划分顶级子系统;架构风格选择(C/S或B/S架构);开发技术选型(java);集成技术选型(API);选择二次开发技术(API)。
详细的架构设计5视图法:分别从逻辑架构、物理架构、数据架构、开发架构、操作架构等方面进行设计,各部分的重点不同,可细化粗粒度。
领域建模领域建模的本质是业务决定功能,功能决定模型。将需求业务转化为抽象模型对象之间的流通关系。
常用的表达方式是类图 表达模型之间的关系是“建模”。模型的建立也逐渐完善,包括状态(流程图)、特征要求等文字说明。
关于如何建模领域 有专门的 领域驱动设计 这方面的书可以参考。
架构验证可以快速开发一个统一的框架(一个原型,一个技术难点)来实施架构设计,然后测试和评估原型 补充架构。
最后,可以总结为系统的架构可以从各个方面用5个视图来描述,然后用6个步骤来描述如何实现架构。然而,将业务逻辑与物理架构结合在一起仍然很流行 忽略实现细节。
软件架构是一种实用优雅的设计,不在于设计模式/架构模式的分层或应用。应以满足用户需求为前提,以开发人员普遍接受为基础,满足系统特点和业务开发需求,从软件设计的角度,可以实现清晰、可维护、可重用、可扩展……非常好,不需要故意纠结多少层,是否使用什么模式,多么抽象等。以面向对象设计为例,基本目标是“高内聚、低耦合”,因此我们可以遵循一些常见的设计原则(如经典的SOLID设计原则)。
通常我们说的模式有很多种,不仅仅是“设计模式”(设计模式有几千万,不仅仅是常见的GOF 23种设计模式)。通常包括:企业架构模式、设计模式、SOA模式、企业集成模式等。
强调架构要“实用”,开发人员普遍可以接受,符合现状。否则,无论设计多么“优雅”,都会成为高成本的“花架”,生动的设计和过度的设计只会让项目“流产”。