架构03 - 理解构架的视角

2024-01-13 06:36
文章标签 理解 架构 03 构架 视角

本文主要是介绍架构03 - 理解构架的视角,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

学习架构时,首要任务是弄清楚不同视角对于架构的理解,因为每个人对于架构的理解可能存在差异。不同职位对于架构的关注点也不同。开发人员更多关注开发架构,售前人员更多关注业务架构,运维人员更多关注运维架构,技术支持和部署人员更多关注网络和物理架构。

这样说清楚了一个观点:架构并不仅限于一种视角或者角色,而是综合了多个视角和角色的考虑。每个视角都可以提供不同的信息和关注点,从而帮助我们全面地理解和设计架构。

在学习架构时,应该尝试从不同的视角思考问题,了解各种架构所关注的要素和考虑因素。这样可以帮助我们形成一个更全面、综合的架构知识体系,并且更好地理解不同职位的需求和沟通。

1.架构的视角

在笔者的知识体系中,实际上将架构分为业务架构、应用架构、云基础架构这几大类,业务架构主要着眼于控制业务的复杂性,基础架构着眼于解决分布式系统中存在的一系列问题。无论何种架构,都希望能实现系统的可变的同时保障业务的高可用。

关注公众号:领取架构师面试资料

注意:

在实际情况中,架构的视角和分类并没有明确的边界,而是存在一定的交叉和综合。不同的架构视角之间常常相互关联和影响。

同时,软件架构与所在的部门组织架构之间也存在着直接的关系。组织架构决定了不同职能团队之间的协作方式和沟通渠道。这种组织架构也会反过来影响到软件架构的设计和演进。例如,若开发团队分为前后端开发,他们的组织结构可能会影响到系统的分层架构设计;若运维团队与开发团队合作紧密,运维需求可能会影响到系统的可部署性和可维护性等方面。

因此,我们需要意识到软件架构和组织架构之间的相互关系,充分理解不同视角的人员所关注的重点,并通过良好的沟通协作,以满足组织的需求和目标。这种综合性的考虑可以帮助我们更有效地设计和演化软件架构,使其符合组织的要求并支持业务的成功。

2.业务架构

核心是解决业务带来的系统复杂性,了解客户/业务方的痛点,项目定义,现有环境;梳理高阶需求和非功能性需求,进行问题域划分与领域建模等工作;沟通,方案建议,多次迭代,交付总体架构。

图片

京东业务架构(网上分享图):

图片

3.应用/技术架构

根据具体的业务需求,我们需要设计应用的层次结构,并制定相应的应用规范、接口定义以及数据交互协议等。在此过程中,我们需要尽量控制应用的复杂度,确保它在可接受的水平上运行。这样一方面可以快速支撑业务发展,另一方面也确保了系统的可用性和可维护性,并满足了应用所需的非功能属性要求,如性能、安全性和稳定性等。

在技术架构的设计中,重点考虑系统的非功能性特征。我们需要对系统进行综合的考虑,确保其具有高可用性、高性能、可扩展性、安全性、可伸缩性和简洁性等特点。例如,通过设计容错机制和冗余部署来提高系统的可用性和容错性;通过采用性能优化策略、合理的资源管理和负载均衡技术来实现高性能;通过良好的安全设计和防护措施来保障系统的安全性;通过模块化和解耦等技术手段来实现系统的可扩展性和简洁性。

总之,技术架构的设计旨在在满足业务需求的同时,考虑系统的非功能性特征,确保系统能够高效、稳定地运行,并具备满足未来发展需求的灵活性和可维护性。

4.功能视角

图片

5.技术视角

技术框架是一个可重用的设计,用于构建整个或部分技术系统。它由一组抽象构件和构件实例之间的交互方法组成。另外,技术框架也可以被技术开发者进行定制,作为应用的基本结构。

从技术角度描述,技术框架通常采用分层模型,包括持久层、数据层、逻辑层、应用层和表现层等。每个层次都使用不同的技术框架来支持开发工作。举例来说,持久层可能会使用Hibernate来管理数据库访问,数据层可能会使用Spring JDBC提供数据操作支持,逻辑层可能会采用Spring框架来实现依赖注入和控制反转(IOC),应用层可能会使用成熟的类库和中间件来支持业务逻辑,而表现层可能会采用MVC(模型-视图-控制器)架构来实现用户界面和交互。此外,还可以使用WebService等技术来实现系统间的数据交互和集成。

通过使用这些技术框架,我们能够将整个系统的主要实现概括起来,提供了一种结构化和标准化的方式来处理各个层次的功能和交互。这样的设计不仅可以提高开发效率,还能够增加系统的可维护性和扩展性,并且能够充分利用现有的技术和成熟的解决方案。

6.技术视角-基础架构

7.技术视角-运维架构

负责运维系统的规划、选型、部署上线,建立规范化的运维体系。

图片

8.DDD到各种架构

领域驱动设计的战略核心在于将问题领域与应用架构分开,将业务语义明确化,将原本难以理解的业务算法逻辑通过领域对象和统一语言转化为清晰表达的领域概念。

换句话说,领域驱动设计注重将业务问题与技术实现相分离,使得业务领域的概念和过程能够更加清晰地表达出来。通过使用领域对象,即具有业务特性和行为的对象,可以将问题领域中的概念和逻辑进行抽象和显性化。同时,建立统一语言,即在组织 ** 享的业务术语和概念,有助于业务团队和开发团队之间的有效沟通和理解。

通过采用领域驱动设计的方法,我们能够更好地关注业务的本质,专注于解决业务问题。将复杂的业务逻辑和概念转化为形式化的领域对象和统一语言可使整个系统的设计更加清晰、可维护性更强,并且使业务需求的变更更容易实现。这种方法强调了业务领域的重要性,在设计和开发过程中以业务为中心,从而提高系统的灵活性和可扩展性。

统一语言,软件的开发人员/使用人员都使用同一套语言,即对某个概念,名词的认知是统一的,建立清晰的业务模型,形成统一的业务语义。将模型作为语言的支柱。确保团队在内部的所有交流中,代码中,画图,写东西,特别是讲话的时候都要使用这种语言。例如账号,转账,透支策略,这些都是非常重要的领域概念,如果这些命名都和我们日常讨论以及 PRD 中的描述保持一致,将会极大提升代码的可读性,减少认知成本。。比如不再会有人在会议中对“工单”、“审核单”、“表单”而反复确认含义了,DDD 的模型建立不会被 DB 所绑架。

面向领域,业务语义显性化,以领域去思考问题,而不是模块。将隐式的业务逻辑从一推 if-else 里面抽取出来,用通用语言去命名、去写代码、去扩展,让其变成显示概念;很多重要的业务概念,按照事务脚本的写法,其含义完全淹没在代码逻辑中没有突显出来。

职责划分,根据实际业务合理划分模型,模型之间依赖结构和边界更加清晰,避免了混乱的依赖关系,进而增加可读性、可维护性;单一职责,模型只关注自身的本职工作,避免“越权”而导致混乱的调用关系。通过建模,更好的表达现实世界中的复杂业务,随着时间的发展,不断增加系统对实际业务的沉淀,也将更好的通过清晰的代码描述业务逻辑,模型的内聚增加了系统的高度模块化,提升代码的可重用性,对比传统三层模式中,很有可能大量重复的功能散落在各个 Service 内部。

关注公众号:领取架构师面试资料

这篇关于架构03 - 理解构架的视角的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/600543

相关文章

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

回调的简单理解

之前一直不太明白回调的用法,现在简单的理解下 就按这张slidingmenu来说,主界面为Activity界面,而旁边的菜单为fragment界面。1.现在通过主界面的slidingmenu按钮来点开旁边的菜单功能并且选中”区县“选项(到这里就可以理解为A类调用B类里面的c方法)。2.通过触发“区县”的选项使得主界面跳转到“区县”相关的新闻列表界面中(到这里就可以理解为B类调用A类中的d方法

如何理解redis是单线程的

写在文章开头 在面试时我们经常会问到这样一道题 你刚刚说redis是单线程的,那你能不能告诉我它是如何基于单个线程完成指令接收与连接接入的? 这时候我们经常会得到沉默,所以对于这道题,笔者会直接通过3.0.0源码分析的角度来剖析一下redis单线程的设计与实现。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源

MySQL理解-下载-安装

MySQL理解: mysql:是一种关系型数据库管理系统。 下载: 进入官网MySQLhttps://www.mysql.com/  找到download 滑动到最下方:有一个开源社区版的链接地址: 然后就下载完成了 安装: 双击: 一直next 一直next这一步: 一直next到这里: 等待加载完成: 一直下一步到这里

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

响应式架构

介绍 响应式架构(Reactive Architecture)是一种面向服务和事件的系统设计方法,旨在提高系统的可扩展性、弹性和容错能力。它适用于构建分布式系统,特别是在云环境和微服务架构中。响应式架构的核心理念是通过事件驱动和数据流来实现各个组件之间的解耦,从而提高整个系统的响应能力和可靠性。 响应式架构的主要特点包括: 响应性:系统能够快速响应外部事件和内部变化,确保在各种负载和故障情

图形编辑器基于Paper.js教程03:认识Paper.js中的所有类

先来认一下Paper的资源对象,小弟有哪些,有个整体的认识。认个脸。 在Paper.js的 官方文档中类大致有如下这些: 基类: ProjectViewItemPointToolSizeSegmentRectangleCurveCurveLocationMatrixColorStyleTweenToolEventGradientGradientStopEvent 二级或三级类 继承Ite

isa指针的理解

D3实例isa指向D3类对象。D3类的话isa指向D3元类对象。D3元类保存类中的方法调度列表,包括类方法和对象方法

大型网站架构演化(六)——使用反向代理和CDN加速网站响应

随着网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大。有研究表明,网站访问延迟和用户流失率正相关,网站访问越慢,用户越容易失去耐心而离开。为了提供更好的用户体验,留住用户,网站需要加速网站访问速度。      主要手段:使用CDN和反向代理。如图。     使用CDN和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速

大型网站架构演化(五)——数据库读写分离

网站在使用缓存后,使绝大部分数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过大而成为网站的瓶颈。      目前豆粉的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站利用数据库的这一功能,