首页 > 其他分享 >第五章:持续交付的软件系统架构

第五章:持续交付的软件系统架构

时间:2023-07-26 11:33:09浏览次数:52  
标签:功能 服务 软件系统 部署 系统 插件 第五章 架构

“大系统小做”原则:
  持续交付架构要求:系统架构在设计时应该考虑如下因素
    1.为测试而设计
    2.为部署而设计
    3.为监控而设计
    4.为扩展而设计:支持团队成员规模的扩展,支持系统自身的扩展
    5.为失效而设计:一旦部署或发布失败,如何优雅且快速的处理
  系统拆分原则:
    1.作为系统的一部分,每个组件或服务有清晰的业务职责,可以被独立修改,甚至被另一种实现方案所替代
    2.“高内聚,低耦合”,使整个系统易于维护,每个组件或服务只知道尽可能少的信息,完成相对独立的单一功能
    3.整个系统易于构建与测试。将系统拆分后,这些组件仍需要组合在一起,为用户提供服务
    4.使团队成员之间的沟通协作更加顺畅
常见架构模式:
  微核架构:又叫插件架构,指的是软件的核心框架相对较小,而其主要业务功能和业务逻辑都通过插件实现。核心框架部分通常只包含系统启动运行的基础功能,例如基础通信模块、基本渲染功能和界面整体框架等。插件则是相互独立的,插件之间的通信只通过核心框架进行,避免出现相互依赖的问题。
    优点:
    良好的功能延伸性:需要什么功能,开发一个插件即可
    易发布:插件可以独立的加载和卸载,使它比较容易发布
    易测试:功能之间是隔离的,可以对插件进行隔离测试
    可定制性高:适应不同的开发需要
    可以渐进式的开发:逐步增加功能
    缺点:
    扩展性差:内核通常是一个独立单元,不容易做成分布式,但对客户端软件来说,这就不是一个严重问题
    开发难度相对较高,因为涉及插件和内核的通信,以及内部的插件登记机制等,比较复杂
    高度依赖框架,既享受框架带来的方便性,当框架接口升级时又可能会影响所有插件,导致大量的改造工作
  微服务架构:将单一应用程序划分成一组小的服务,服务之间相互协调,相互配合,为用户提供最终价值。
    优点:
    扩展性好:各个服务之间低耦合。可以对其中的个别服务单独扩容
    易部署:每个服务都是可部署单元
    易开发:每个组件都可以进行单独开发,单独部署,不间断的升级
    易于单独测试:如果修改只涉及单一服务,那么只测试该服务即可
    缺点:
    由于强调互相独立和低耦合,服务可能会被拆分的很细。这导致系统依赖大量的微服务,变得很凌乱和笨重,网络通信消耗也会比较大
    一次外部请求会涉及内部多个服务之间的通信,使得问题的调试与诊断比较困难,需要更强大的工具支持
    为原子操作带来困难,例如需要事务类操作的场景
    跨服务的组合业务场景的测试比较困难,通常需要同时部署和启动多个微服务
    公共类库的升级管理比较难。在使用有一些公共的工具性质的类库时,需要在构建每个微服务时将其打包到部署包中
  巨石应用:也称巨石架构,是指由单一结构体组成的软件应用,其用户接口和数据访问代码都绑定在同一语言平台的同一应用程序
    优点:
    利于开发和调试:当前所有开发工具和IDE都很好的支持了巨石应用程序的开发,系统架构简单,调试方便
    部署操作本身比较简单:只需一个War文件即可包含所有功能
    很容易扩展:只要在负载均衡器后面运行这个应用的多个副本就可以扩展应用程序。
    缺点:
    对整体程序不熟悉的人来说,容易产生混乱的代码,污染整个应用,给老代码的学习和理解带来困难
    难与新技术共同应用
    只能将整个应用作为一个整体进行扩展
    持续部署比较困难。为了更新一个组件,必须重新部署整个应用程序
架构改造实施模式
  拆迁者模式:根据当前的业务需求,对软件架构重新设计,并组织单独的团队,重新开发一个全新的版本,一次性完全替代原有的遗留系统
    优点:与旧版本无瓜葛,没有历史包袱,可以按预期进行架构设计
    缺点:
    业务需求遗漏:软件的历史版本中,有很多不为人熟知的功能还在使用
    市场环境变化:由于新版本架构无法 一蹴而就,当市场需求发生变化时,就会错失市场良机
    人力资源消耗大:必须分出人力,一边维护旧版本的功能或紧急需求,一边要安排充分人力进行架构改造
    闭门造车:新版本上线后,无法满足业务需求
  绞杀者模式:保持原来的遗留系统不变,当需要开发新的功能时,重新开发一个服务,实现新的功能。通过不断的构建新的服务,逐步使遗留系统失效,并最终替代它
    优点:
    不会遗漏原有需求
    可以稳定的提供价值,频繁的交付版本,可以让你更好的监控其改造进程
    避免“闭门造车”现象
    缺点:
    架构改造的时间跨度会变大
    产生一定的迭代成本
  修缮者模式:将遗留系统的部分功能与其余部分隔离,以新的架构进行单独改善。在改善的同时,需要保证与其他部分仍能协同工作
    优点:
    系统外部无感知
    不会遗漏原有需求
    可以随时停下改造工作,响应高优先级的业务需求
    避免“闭门造车”现象
    缺点:
    架构改造的时间跨度会变大
    会有更多的额外的架构改造迭代成本
  数据库的拆分方法:
    详细了解数据库结构,包括外键约束、共享的可变数据以及事务性边界等
    先拆分数据库
    数据库双写无误后,找到程序架构中的缝隙
    将拆分出来的程序模块和数据库组合在一起,形成微服务

标签:功能,服务,软件系统,部署,系统,插件,第五章,架构
From: https://www.cnblogs.com/wxf1314/p/17582009.html

相关文章

  • 单元化架构解决了什么问题
    文章摘自:单元化架构解决了什么问题-兰希姑娘的文章-知乎https://zhuanlan.zhihu.com/p/339600956作者:兰希姑娘链接:https://zhuanlan.zhihu.com/p/339600956来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。首先,我们先来看下单元化是什么。所......
  • springboot项目分层架构
    SpringBoot项目分层架构SpringBoot是一个用于构建Java应用程序的开源框架,它提供了快速开发的特性,使得开发人员可以更加专注于业务逻辑的编写。在开发一个SpringBoot项目时,良好的分层架构是非常重要的,它可以帮助我们更好地组织代码并提高项目的可维护性和可扩展性。本文将介绍一......
  • (五) MdbCluster分布式内存数据库——数据迁移架构及节点扩缩容状态图
    (五)MdbCluster分布式内存数据库——数据迁移架构及节点扩缩容状态图 上一篇:(四)MdbCluster分布式内存数据库——业务消息处理本节主要讨论在系统扩容期间的数据迁移架构及节点的状态图。我们将通过介绍这两部分,慢慢展开复杂的扩缩容流程。下图从左到右,我们增......
  • linux MHA架构
    MHA架构可以完成mysql的高可用,避免单台服务器的故障导致服务关闭,提高容错率,保证master的切换。目录一、MHA概述二、MHA组成三、MHA的特点四、MHA工作原理五、MHA实验六、总结    一、MHA概述1.MHA概述MHA(MasterHighAvailability)是一套优秀的MySQL......
  • 深入讲解Kubernetes架构-垃圾收集
    垃圾收集(GarbageCollection)是Kubernetes用于清理集群资源的各种机制的统称。垃圾收集允许系统清理如下资源:终止的Pod已完成的Job不再存在属主引用的对象未使用的容器和容器镜像动态制备的、StorageClass回收策略为Delete的PV卷阻滞或者过期的CertificateSigningRequest......
  • 【高可用系统架构设计】SLA服务可用性4个9是什么意思?如何保证服务的高可用性 HA(High A
    如何保证服务的高可用性HA(HighAvailability)?高可用HA(HighAvailability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。方法论上,高可用是通过冗余+自动故障转移来实现的。我们都知道,单点是系统高可用的大敌,单点往往是系统高可用最大的......
  • 可扩展的分布式数据库架构 vs 传统关系数据库
    可扩展的分布式数据库架构本文发表在《程序员》杂志2010年第6期引言数据库的可用性和扩展性一直是数据库厂商和用户最关注的问题。过去我们采用高端的设备,比如使用小型机和大型存储来保证数据库的可用性。而扩展性主要采用向上扩展(Scaleup)的方式,通过增加CPU,内存,磁盘等方式......
  • 豆瓣网技术架构的发展历程
    豆瓣网简介 •2005年3月上线•以分享和发现为核心的社区•读书、电影、音乐、小组、同城、九点•我的豆瓣、友邻一些数据•2.8M注册用户,约1/4活跃用户•千万级非注册用户•20M动态请求/天,峰值500~600/sec•23台普通PC服务器(1U*15/2U*8)•12台提供线上服务•38Gmemcach......
  • k8s架构
    核心组件etcd保存整个集群的状态apiserver提供资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制controllermanager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上kubelet负责......
  • 直播架构图
    直播架构图解析及代码示例随着直播行业的快速发展,直播架构成为了直播系统的核心组成部分。本文将对直播架构图进行解析,并提供代码示例来帮助读者更好地理解直播架构的实现。直播架构图概述直播架构图是对直播系统中各组件和其相互关系的可视化表示。它展示了直播系统的核心功能......