产品架构重构与优化

大规模软件系统的产品周期

随着产品的不断发展,复杂度不断增加,生产率(Features数量)下降,质量(Bugs)不受控制,稳定性(Fluctuation)变差,架构变得腐化。

原则、模式、最佳实践和工具集

架构优化原则

1.单一职责

2.领域内聚

3.抽象接口隔离

4.重用

5.管理架构资产

模块解耦模式

1.模块重新划分

表现:

一个模块在领域中内聚性不强,而和某个领域的耦合性很强

解决方案:

模块重新划分领域,保持领域及模块的内聚性,必要的情况下可以拆分该模块到不同领域。

2.通用抽象模式

表现:

各领域实现了相同或相近的业务逻辑,导致维护工作量大,架构不一致

解决方案:

抽象出各领域的通用逻辑,并在应用框架(Application Framework)上进行实现,各领域继承该通用逻辑,并且可以插入扩展点,各领域实现差异化实现插件。

3.消除强耦合(循环依赖)

解耦方式:根据耦合关系的处理方式,分为

  • 耦合上升
  • 耦合下沉
  • 回调
  • 依赖倒置
  • 消除耦合关系

数据解耦模式

1.数据共享模式

表现:相同或相关数据在跨领域被创建、转换或传输,存在重复、冲突等问题

根据策略提供多种解决方案:

1)数据重新划分领域,如足够通用的数据划分到通用基础数据供各业务领域共享,而错误划入通用基础数据的业务数据被重新划入业务领域;

2)跨领域的复杂数据,划分抽象通用数据及和业务领域相关数据,采用通用数据共享,而和业务相关的数据则分业务领域存储;

3)通用数据分领域视图,对有领域通用并且有业务组织权限的数据,对各不同领域提供不同视图

2.数据拆分模式

表现:

集中数据方式下,当企业的业务量激增后,导致集中式数据库成为整个系统的性能瓶颈

解决方案:

分领域拆分各自的数据Schema,逻辑上进行拆分。可以根据业务量的需求,部署在一个数据库实例,或者分领域部署在不同的数据库实例中。

架构最佳实践

1.API抽象(服务)层

问题:

各领域之间存在直接调用,互相循环调用,甚至不合理调用的情况,各领域之间蜘蛛网式的耦合关系,导致一个问题互相影响,问题跟踪起来困难,各领域之间很难独立发布版本。

解决方案

各领域之间的调用都采用标准的API方式服务接口,领域调用采用服务接口消费的调用方式统一管理,各领域之间存在了一个接口隔离层,不会导致互相影响或影响比较小,各领域在接口稳定的情况下可以独立发布版本。

2.事件总线(EventBus)

问题:

原来的应用框架采用继承方式来提供扩展性,导致继承层次很多,逻辑复杂,框架的可维护性差,可演进性差,同时在分析问题时不知道问题出在框架还是业务,诊断成本高

解决方案

采用EDA架构,EventBus构成框架的核心交互组件,通过事件分类应用的不同扩展点,各层的业务根据事件定制自己的可插拔扩展插件,降低了各领域系统和框架的依赖关系,增加了框架的可扩展性和可演进性。提供框架的API及通用的服务实现,各业务领域可以跟进各自的需要进行重新实现和替换。

工具集

1. 模块代码依赖关系分析工具,分析各模块的依赖关系,可以生成依赖关系图

2. 模块代码耦合分析工具,分析各模块的实际代码依赖的调用

3. 依赖关系管理插件(开发工具)及持续构建依赖管理工具

4. 数据审计工具,可以分析模块依赖的数据是否是本领域还是跨领域

分析问题制定优化方案

分析问题

1.通过工具,协以分析代码的方式,找出各领域(进一步是各模块)之间的依赖关系

2.数据的依赖通过使用的ORM和SQL进行分析

3.分类是数据依赖,还是代码层次的依赖;是领域间依赖还是模块间依赖

4.依赖是否是必须的依赖,不必要的依赖后面都会消除依赖关系

制定方案

1.根据解耦模式,制定各个模块对应的解耦方案,以消除强耦合依赖关系

2.对于不必要的依赖,必须给出消除的方案,如依赖关系下降到通用模块,完全消除依赖关系等等

3.数据依赖比代码依赖更难处理,谨慎处理数据依赖,包括数据的转换、迁移的成本,影响到对客户迁移的成本

4.需要权衡利弊,并不是完美的解耦就好,而是权衡的结果

制定治理策略,防止架构腐化

1.服务的治理

  • 构建统一的服务管理平台,每个领域把自己的服务注册发布服务到服务中心,而消费方领域则注册消费服务到服务中心。
  • 跨领域必须提供服务平台进行服务调用,禁止直接调用。根据需要各领域可以集中部署,采用Local调用,或者分布式部署,采用Remote调用。
  • 服务的调用提供统一的平台进行监控和管理。

2.依赖关系管理

  • 为防止系统的进一步腐化,模块之间的依赖必须管理起来。依赖不能随意添加,必须通过在设计层面统一考虑。
  • 持续集成代码构建时检查依赖关系,不符合依赖关系的会导致构建失败。
  • 开发工具Eclipse需要安装依赖管理插件。

总结

系统优化重构是一个不断分析、实现、稳定的过程,因此制定出一套符合企业架构优化的方法、模式、工具及规范非常有必要。

时间: 2024-10-11 12:15:19

产品架构重构与优化的相关文章

微信Android模块化架构重构实践

微信Android架构历史 微信Android诞生之初,用的是常见的分层结构设计.这种架构简单.清晰并一直沿袭至今.这是微信架构的v1.x时代. 图1-架构演进 到了微信架构的v2.x时代,随着业务的快速发展,消息通知不及时和Android 2.3版本之前webview内存泄露问题开始突显.由于代码.内存.apk大小都在增长,对系统资源的占用越来越多,导致微信进程容易被系统回收.因此微信开始转向多进程架构,独立的通信进程保持长连接的稳定性,独立的webview进程也阻隔了内存泄露导致的问题. 时

唯品会架构师是如何实现架构重构的

随着唯品会业务的快速发展,订单量的不断增长,原有的订单存储架构已经不能满足公司的发展了,特别是在大促高峰期,原订单库已经成为抢购瓶颈,已经严重制约公司的发展. 唯品会旧订单库包含几十张订单相关表,旧订单库是典型的一主多从架构:主库容量已接近服务器物理空间上限,同时也已经达到 MySQL 的处理上限,很快将无法再处理新增订单. 旧订单库面临的问题有: 1.超大容量问题 订单相关表都已经是超大表,最大表的数据量已经是几十亿,数据库处理能力已经到了极限: 单库包含多个超大表,占用的硬盘空间已经接近了服

IBM Think 2019:新一代IBM产品架构浮出水面,第四次转型进入下半场

"2012年,IBM在如日中天的时候,开始了第四次转型."IBM大中华区董事长陈黎明在2019年2月12日到15日美国旧金山举办的IBM Think 2019年度大会上,接受采访时谈了过去6年来的转型心路历程,"转型的第一要务是生存,再走向成功,再经历下一个转型."在2017年第四季度,IBM宣布结束了长达22个季度的营收下滑,2019年初底宣布2018全年实现营收增长.在这四次的转型生死大考中,IBM已经走过了"生存"阶段. 其实在整个第四次转

浅谈代码重构与优化

浅谈代码重构与优化 前几天看到有一篇不错的文章减少该死的if-else嵌套,觉得写得很不错,整理了一下后准备在团队内部简单分享一下. 写在前面 大家在接手项目的时候,应该有遇到过下面这种结构的代码 if (true) { ..... if (true) { if (true) { .... if (true) { if (true) { ...... } } // do something } // do something if (true) { ......... } } // do som

“微服务” 的架构终将成为产品架构上的主流

在敏捷开发中, 我们确实找到了一个框架,能使领域专家,架构师可共同的协作,设计出一可适应变化的 ROA 架构. 但,我想应该从另一个角度来思考-- 团队中即使领域专家,架构师可共同协作,但毕竟领域专家,架构师都还是人,不是神.所以,到底能从当前的版本中,预测到多少未来需求的变化? 这实在是个无法答复的问题.所以,在实务上,架构到底能承受多少的变化,同样也变成个无法答复的问题. "假如,不走预测变化这条路做架构设计.那架构设计的思维又是什么?" 很简单-- "既然不能有效预测变

项目设计&重构&性能优化

漫谈项目设计&重构&性能优化 重构的好处:重构能够改进软件设计,随着项目需求的变更,项目体积的变大早已与最初的设计大相径庭,代码结构变得凌乱.复杂,如果不进行重构,则很难添加新的功能. 1.使项目代码更容易理解很多情况下是由于项目赶进度和不注重质量导致的.那么通过重构可以帮助代码维持自己该有的形态.项目开始的时候,设计并没有考虑到方方面面,因为你不可能预测到后面的所有需求.同时你也不能把每个功能都做预留,做成灵活可变,如果最后你预测失败,那么意味着你所做的灵活性是多余的,浪费了时间且增加了

JS代码的简单重构与优化

JS代码的简单重构与优化(适合新手) 原文  http://www.cnblogs.com/similar/p/5016424.html Demo . 1 //bad if (age > 20) { return true; } else { return false; } //good return age > 20; 这种一看就明白吧,没什么说的. Demo . 2 //bad for (var i = 0; i < arr.length; i++) { //do something

ODI学习笔记2--ODI产品架构

ODI学习笔记2--ODI产品架构 ODI产品架构: ODI提供了以下几种管理工具:Designer 用于定义数据转换逻辑,这是最常用的开发工具,大部分的开发任务,包括data store的定义,interface(数据映射关系)和package(相当于workflow)的创建等,都是在Designer中完成.Operator用于管理和监控数据转换任务的执行情况,在设计阶段,也可用于调试(debugging)Topology Manager用于定义物理和逻辑基础架构,如work reposito

中国农业银行IT架构梳理和优化

IT建设已经成为企业实现其战略目标,提升竞争力的必不可少的举措之一.随着市场竞争的加剧.业务规模的发展和业务领域的扩大,企业应该有怎样的it架构.组织及能力,才能更好地支撑其业务的发展和战略目标的实现呢? 项目背景介绍 中国农业银行是我国四大国有商业银行之一,是中国金融体系的重要组成部分,总行设在北京.中国农业银行网点遍布城乡, 资金实力雄厚,服务功能齐全,为广大客户所信赖,已成为中国最大的银行之一,被<财富>评为世界500强企业之一.2006年,农业银行成功入选中国企业信息化500强并位居第