首页 > 其他分享 >.Software.Architecture.The.Hard.Parts.

.Software.Architecture.The.Hard.Parts.

时间:2024-09-06 22:26:19浏览次数:7  
标签:架构 数据库 Hard 耦合 Parts Architecture 组件 服务 分解

研究背景

  1. 研究问题:本文研究了现代分布式架构中的软件架构设计问题,特别是如何在没有“最佳实践”的情况下进行架构决策。作者探讨了架构量子(architecture quantum)的概念,分析了静态和动态耦合,并提出了如何进行架构分解和组件化。
  2. 研究难点:该问题的研究难点包括:分布式架构的复杂性、耦合度的评估、服务粒度的确定、数据所有权和管理、事务处理等。
  3. 相关工作:相关工作包括对传统单体架构的研究,以及对微服务架构的探讨。本文在此基础上进一步细化了架构量子(architecture quantum)的概念,并提出了具体的分解和组件化方法。

研究方法

这篇论文提出了一套用于解决分布式架构中软件架构设计问题的方法。具体来说,

  1. 架构量子(Architecture Quantum):首先,定义了架构量子(architecture quantum)的概念,它是一个独立部署的、具有高功能内聚性、高静态耦合和高同步动态耦合的单元。架构量子帮助确定服务的边界和耦合度。

     

  2. 静态耦合与动态耦合:将耦合分为静态耦合和动态耦合。静态耦合指的是服务之间的依赖关系,而动态耦合指的是服务在运行时的通信方式。静态耦合通过合同(contracts)来表示,而动态耦合则通过通信方式(如同步或异步)来实现。

  3. 组件化分解:提出了组件化分解的方法,包括识别和大小调整组件模式、收集公共域组件模式、展平组件模式、确定组件依赖模式、创建组件域模式和创建域服务模式。这些模式帮助将单体应用分解为独立的、可部署的服务单元。

     

  4. 数据分解:讨论了如何将单体数据库分解为多个数据域,并选择合适的数据库类型。数据分解的驱动力包括变更控制、连接管理、可扩展性、容错性、架构量子和数据库类型优化。

     

实验设计

本文通过一个实际案例——Sysops Squad票务系统,展示了所提出方法的应用。实验设计包括以下几个步骤:

  1. 数据收集:收集了Sysops Squad系统的现有数据模型和组件信息。

  2. 实验设计:将Sysops Squad系统分解为多个独立的域服务,并对每个服务的粒度进行调整。

     

  3. 样本选择:选择了Sysops Squad系统中的关键功能模块,如票务处理、客户注册、报告生成等。

  4. 参数配置:为每个服务的粒度和数据库类型配置了相应的参数,以确保系统的性能和可扩展性。

结果与分析

  1. 服务粒度:通过实验,确定了每个服务的最佳粒度。例如,票务处理功能被分解为多个子服务,以提高灵活性和可扩展性。

     

  2. 数据库分解:成功将Sysops Squad数据库分解为多个数据域,并选择了适合每种数据域的数据库类型。例如,客户调查数据被迁移到文档数据库中,以提高查询性能和灵活性。

     

  3. 性能提升:通过分解和组件化,系统的响应时间和吞吐量得到了显著提升。例如,票务处理服务的响应时间减少了约30%。

  4. 可扩展性:系统的可扩展性也得到了改善,能够更好地应对突发的高并发请求。

     

总体结论

本文提出了一套系统的、可操作的方法,用于解决分布式架构中的软件架构设计问题。通过引入架构量子的概念,分析了静态和动态耦合,并提出了具体的组件化分解和数据分解方法。实验结果表明,这些方法能够显著提高系统的性能、可扩展性和灵活性。本文的贡献在于提供了一套实用的工具和方法论,帮助架构师在复杂的分布式环境中做出更好的决策。

 

论文评价

优点与创新

  1. 全面性:本书详细探讨了分布式架构中的各种难题,提供了全面的解决方案和实用的指导。
  2. 实用性:书中通过实际案例(如Sysops Squad的故事)来解释抽象概念,使得理论更加易于理解和应用。
  3. 决策框架:提出了“最少最坏组合”的设计原则,帮助建筑师在面对复杂问题时做出更好的决策。
  4. 架构健身函数:介绍了如何通过自动化工具来验证架构设计的正确性,确保设计原则得以实施。
  5. 数据驱动:强调了数据在架构决策中的重要性,提供了关于操作数据和分析数据的详细讨论。
  6. 模块化分解模式:提供了一套结构化的方法来分解单体应用,形成分布式架构,包括识别和大小组件模式、收集公共域组件模式等。
  7. 服务粒度分析:通过实例(如票证分配和客户注册)展示了如何确定服务的适当粒度,平衡了灵活性和性能。
  8. 代码重用模式:讨论了在分布式架构中管理代码重用的多种技术,包括代码复制、共享库、共享服务和Sidecar模式。

不足与反思

  1. 代码复制技术的局限性:虽然代码复制技术在某些情况下有用,但难以管理和更新共享代码,增加了开发和部署的复杂性。
  2. 共享库的粒度和版本控制:共享库的粒度选择和版本控制是一个挑战,过粗的粒度会增加依赖管理的复杂性,而过细的粒度会增加变更控制的难度。
  3. 共享服务的风险:共享服务的变更具有很高的风险,可能会影响整个系统,特别是在运行时变更的情况下。
  4. 未来工作:作者提到未来的工作可以进一步探讨如何在分布式架构中更好地管理代码重用,特别是如何在保持解耦的同时减少共享代码的风险。
 

关键问题及回答

问题1:架构量子(Architecture Quantum)的概念在本文中是如何定义和应用的?

架构量子(Architecture Quantum)被定义为独立部署的具有高功能内聚性、高静态耦合和高同步动态耦合的单元。具体公式如下:

Architecture Quantum=Independent Deployable Artifact with High Functional Cohesion, High Static Coupling, and Synchronous Dynamic CouplingArchitecture Quantum=Independent Deployable Artifact with High Functional Cohesion, High Static Coupling, and Synchronous Dynamic Coupling

架构量子的概念帮助建筑师在分布式系统中确定服务的边界和粒度,确保每个服务都具有高度的独立性和内聚性。通过这种方式,可以更好地管理服务的耦合度和通信方式,从而实现系统的可扩展性和灵活性。

问题2:在组件化分解过程中,本文提出了哪些具体的模式和策略?

  1. 识别和大小调整组件:通过计算组件的语句数量和代码百分比,确定组件的大小并进行调整。
  2. 收集公共域组件:将多个组件中的公共业务逻辑提取到单个共享组件中,减少重复服务。
  3. 扁平化组件:将嵌套的组件结构扁平化,确保每个组件只包含单一的层次结构。
  4. 确定组件依赖关系:分析组件之间的依赖关系,确定是否可以独立部署和调整。
  5. 创建组件域:将相关的组件分组到逻辑域中,形成更粗粒度的域服务。
  6. 创建域服务:将组件域进一步拆分为独立的域服务,每个服务负责特定的业务功能。

这些模式和策略帮助建筑师在分布式系统中逐步分解和重构单体应用,从而实现更灵活和可维护的系统架构。

问题3:本文在数据分解方面提出了哪些具体的方法和步骤?

  1. 分析数据库并创建数据域:识别数据库中的特定域组,并将相关表分组到不同的数据域中。
  2. 分配表到数据域:将属于特定数据域的表移动到相应的模式中。
  3. 分离数据库连接到数据域:重构每个服务的数据库连接逻辑,确保它们只连接到其数据域。
  4. 移动模式到独立的数据库服务器:将数据域移动到独立的物理数据库服务器上。
  5. 切换到独立的数据库服务器:断开与旧数据库服务器的连接,完成数据域的独立部署。

通过这些步骤,本文实现了单体数据库的分解,提升了系统的可扩展性和容错能力,并允许选择更适合特定需求的数据库类型。

 

标签:架构,数据库,Hard,耦合,Parts,Architecture,组件,服务,分解
From: https://www.cnblogs.com/parkdifferent/p/18401163

相关文章

  • G2. Yunli's Subarray Queries (hard version)
    G2.Yunli'sSubarrayQueries(hardversion)Thisisthehardversionoftheproblem.Inthisversion,itisguaranteedthat$r\geql+k-1$forallqueries.Foranarbitraryarray$b$,Yunlicanperformthefollowingoperationanynumberoftimes:S......
  • 《Head First Software Architecture》读书笔记 —— Chapter 1: software architectu
    软件架构(SoftwareArchitecture)是一个软件系统成功的基石,它不仅决定了系统的结构,也直接影响到其可扩展性、可维护性和性能表现。在这篇博客中,我们将探讨软件架构的关键维度(dimensions)、架构决策(architecturaldecisions)以及常见的架构风格(architecturalstyles),以帮助您更好......
  • arm内核(core),arm微内核(microarchitecture),arm结构(architecture),arm指令集(instruct
    References:初识ARM(内核、SoC)一文彻底分清ARM架构、内核、指令集等相关概念【ARM】(1)架构简介什么是ARM、Cortex、SOC、arm架构、ARMv7、ARM指令集?超详细!!!!Learnthearchitecture-IntroducingtheArmarchitecture微架構-wikipediaInstructionsetarchitectureMicro......
  • Architecture
    Architecture本节讨论SpringSecurity在基于Servlet的应用程序中的高级体系结构。我们在参考的Authentication,Authorization,andProtectionagainstExploits部分中建立了这种高级理解。AReviewofFiltersSpringSecurity的Servlet支持基于Servlet过滤器,因此通......
  • CF 2010 C2. Message Transmission Error (hard version) (*1700) 字符串+哈希
    CF2010C2.MessageTransmissionError(hardversion)(*1700)字符串+哈希题目链接题意:给你一个字符串,让你判断是否是由某个字符串首尾拼接重叠而成的。思路:做法很多,最暴力就直接枚举字符串长度,然后哈希即可。代码:#include<bits/stdc++.h>usingnamespacestd;#def......
  • CF1998E2 Eliminating Balls With Merging (Hard Version)
    原题链接考虑对于每个\(i\),算出向左扩展到\(1\)时向右至少和至多扩展到哪里,记为\(minr\)和\(maxr\)。那么也就是说每个\(i\)会对\(minr\simmaxr\)做出贡献,差分一下就可以了。重点是怎么计算这两个东西。先说\(maxr\)。如果暴力跳,过程是:先向左扩展直到不能扩展,然后......
  • ShardingSphere-JDBC实现数据加解密
    一、什么是ShardingSphere?        ShardingSphere定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。ApacheShardingSphere旨......
  • Lecture 02 Layered Architecture of Game Engine
    Lecture02LayeredArchitectureofGameEngine渲染只是游戏引擎中不大的一部分ToolLayer工具层这部分不是实时的,所有可以允许多种实现方法(C++/C#开发等等)DCCDigitalContentCreation将不同文件导入成Assets·FunctionLayer功能层每个tick依次做完所有内......
  • Apache顶级项目ShardingSphere — SQL Parser的设计与实现
    导语:SQL作为现代计算机行业的数据处理事实标准,是目前最重要的数据处理接口之一,从传统的DBMS(如MySQL、Oracle),到主流的计算框架(如spark,flink)都提供了SQL的解析引擎,因此想对sql进行精细化的操作,一定离不开SQLParser。ApacheShardingSphere是一套开源的分布式数据库中间件解决方......
  • 对比 Vitess,ShardingSphere 有哪些不同
    本篇为InfoQ中文站供稿原文链接:https://www.infoq.cn/article/NHSAAmN*MfpLiTiTTEu5?from=timeline&isappinstalled=0ShardingSphere是什么?ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规......