软件系统架构师论文[2018年下半年]论软件体系结构的演化

软件系统架构师论文[2018年下半年]论软件体系结构的演化

软件体系结构的演化是在构件开发过程中或软件开发完毕投入运行后,由于用户需求发生变化,就必须相应地修改原有软件体系结构,以满足新的变化了的软件需求的过程。体系结构的演化是一个复杂的、难以管理的问题。请围绕“论软件体系结构的演化”论题,依次从以下三个方面进行论述,
1.概要叙述你参与管理和开发的软件项目以及你在其中所承担的主要工作。
2.软件体系结构的演化是使用系统演化步骤去修改系统,以满足新的需求。简要论述系统演化的6个步骤。
3.具体阐述你参与管理和开发的项目是如何基于系统演化的6个步骤完成软件体系结构演化的。

论软件体系结构的演化

摘要: 本文以我作为系统架构师亲身参与管理和开发的“某大型商业银行信贷管理系统”为例,深入探讨了软件体系结构在系统生命周期中所经历的演化过程。该系统在成功上线后,为应对激烈的市场竞争和快速的业务变化,经历了多次重大的架构演化。文章首先概要介绍了该项目的背景及我承担的主要工作;随后,详细论述了系统演化的六个标准步骤;最后,结合该系统为支持“实时信贷反欺诈”和“大数据风控”新需求而进行的从单体架构到微服务架构的演化案例,具体阐述了我们如何遵循这六个步骤,成功地完成了此次架构演化,从而保证了系统的可持续发展和业务价值的持续交付。

关键词: 软件体系结构;架构演化;微服务;重构;信贷系统


1. 项目概要及个人主要工作

“某大型商业银行信贷管理系统”是一个核心业务系统,于2018年在我作为系统架构师的主导下,采用RUP过程并以Java EE技术栈构建完成。系统初期采用分层架构模式,成功支持了传统信贷业务的线上化运营。然而,随着互联网金融的崛起和银行业务的快速发展,系统在运行两年后面临了新的挑战:首先,业务要求系统在秒级内完成信贷申请的实时反欺诈分析;其次,风险部门希望引入外部大数据进行更深层次的风控建模。原有的单体架构在可扩展性、技术异构性和部署灵活性上已无法满足这些新需求。

在此次架构演化项目中,我继续担任系统架构师,承担的主要职责包括:

  1. 演化需求分析:识别和分析新的业务需求对现有架构带来的冲击与挑战。
  2. 演化方案设计:主导设计新的目标体系结构(微服务架构),并制定详细的演化路线图。
  3. 技术选型与团队指导:负责引入Spring Cloud、Elasticsearch等新技术栈,并指导开发团队按照新架构进行开发和重构。
  4. 演化过程管控:确保演化过程平稳、可控,最大限度地降低对现有业务的影响。
2. 系统演化的6个步骤

软件体系结构的演化是一个系统化的工程,而非简单的代码修改。它通常遵循以下六个有序的步骤:

  1. 需求变化与演化规划:这是演化的触发器。首先,必须全面分析和理解新的需求,评估其对现有架构的影响。在此基础上,制定明确的演化目标、范围、计划和验收标准。
  2. 制定演化计划:在规划基础上,制定详细的技术方案和实施计划。包括确定目标架构、选择演化的策略(如大爆炸式重构、增量式迁移)、资源分配、风险评估以及回滚方案。
  3. 修改现有体系结构:根据目标架构的设计,对现有的体系结构进行具体修改。这包括识别需要拆分的模块、定义新的组件和服务接口、调整数据模型等,并产出新的架构文档。
  4. 实施演化计划:这是将设计落地的过程。开发团队根据修改后的架构,进行代码的重构、新服务的开发、数据库的迁移等具体实施工作。此阶段通常采用迭代和增量式开发。
  5. 测试与验证:对演化后的新系统进行全面的测试,包括单元测试、集成测试、性能测试和回归测试等,以验证新架构是否满足了演化规划中设定的目标,并确保原有功能未受破坏。
  6. 部署与总结:将演化后的系统部署到生产环境。之后,对整个演化过程进行复盘和总结,评估是否达到预期目标,积累经验教训,并为下一轮可能的演化做好准备。
3. 信贷管理系统架构演化的具体实践

我们以系统需要引入“实时信贷反欺诈”和“大数据风控”能力为例,详细说明如何基于上述六个步骤完成架构演化。

3.1 需求变化与演化规划

  • 需求变化:业务部门提出,信贷申请流程需在5秒内调用外部反欺诈模型和信用评分模型,并需要高效地查询和分析海量的申请日志行为数据。
  • 影响分析:现有单体架构下,所有模块耦合在一个应用中。插入新的风控组件需要修改核心审批流程,技术栈被锁定,且任何修改都需要全应用重新部署,难以满足高性能和快速迭代的需求。
  • 演化规划:演化目标是构建一个高内聚、松耦合、可独立部署和扩展的微服务架构。具体指标包括:风控服务可独立扩缩容;风控服务与技术栈可与主系统异构;核心审批流程与风控逻辑解耦。

3.2 制定演化计划
我们选择了绞杀者模式 的增量式演化策略,而非一次性重写。

  • 目标架构:将原系统中的“风控核验”模块逐步绞杀,独立为“实时反欺诈服务”和“大数据风控服务”。核心的“信贷审批流程”服务化,通过API网关调用这些新服务。
  • 实施计划:分三个阶段迭代完成:
    • 迭代一:新建“实时反欺诈服务”(采用Spring Cloud + Redis),并使其与单体系统并行运行。
    • 迭代二:改造审批流程,将反欺诈调用从本地调用切换到新的微服务。
    • 迭代三:同理,构建“大数据风控服务”(采用Spring Cloud + Elasticsearch),并完成集成。

3.3 修改现有体系结构
我们对现有架构进行了如下关键修改:

  • 引入API网关:作为所有前端请求的统一入口,负责路由、认证和限流。
  • 服务拆分:定义了“信贷流程服务”、“反欺诈服务”、“风控服务”、“客户服务”等微服务边界。每个服务拥有独立的数据库。
  • 接口定义:使用RESTful API明确了服务间的通信协议和数据格式。例如,信贷流程服务 会同步调用 反欺诈服务/api/fraud/check 接口。
  • 数据一致性:引入了“最终一致性”理念,对于非实时强依赖的数据,通过消息队列进行异步同步。

3.4 实施演化计划
在具体实施中,我们严格遵循了计划:

  • 迭代一:我们新建了“反欺诈服务”,并将其部署到新的服务器上。此时,它并未接管任何流量,但我们编写了完整的测试用例对其进行了验证。
  • 迭代二:这是最关键的一步。我们修改了单体系统中的信贷审批代码,将反欺诈校验的调用从原有的内部方法调用,改为通过HTTP Client调用新部署的“反欺诈服务”。我们采用了并行运行的策略,即同时调用新旧两种方式,对比结果日志以确保正确性,待稳定运行一段时间后,再关闭旧逻辑。此举最大限度地降低了演化风险。
  • 迭代三:重复上述模式,成功上线了“大数据风控服务”。

3.5 测试与验证
在此次演化中,测试工作尤为重要:

  • 契约测试:确保服务接口(如REST API)的变更能被及时识别和兼容。
  • 集成测试:重点测试信贷流程服务与反欺诈、风控服务之间的调用链路是否畅通、数据是否正确。
  • 性能测试:使用JMeter对新的服务链进行压力测试,验证其是否满足5秒响应的SLA要求。
  • 回归测试:确保原有信贷申请、审批、合同生成等核心功能未因本次架构调整而出现退化。

3.6 部署与总结

  • 部署:由于采用增量式演化,每次迭代都是一个小版本的发布,风险可控。最终,当所有服务都成功切换后,我们下线了单体应用中旧的风控模块代码。
  • 总结:通过此次演化,系统成功获得了技术异构的能力(如风控服务可使用Python进行AI建模),部署频率从每月一次提升到每周多次,反欺诈服务的性能提升了300%。我们总结了“绞杀者模式”在本项目中的成功经验,并记录了在服务拆分和数据一致性方面遇到的挑战与解决方案,为后续其他模块的演化提供了宝贵资产。
4. 总结

软件体系结构的演化是系统保持生命力的必然途径。在信贷管理系统的演化实践中,我们深刻体会到,一个结构化的、循序渐进的演化过程是成功的关键。通过严格遵循从规划、计划、修改、实施到验证和总结的六个步骤,我们有效地管理了演化过程中的技术风险和项目风险,平稳地将一个单体系统引向了更灵活、更强大的微服务架构,有力地支撑了业务的创新发展。这证明了将体系结构演化视为一个严谨的软件工程活动,而非随意的技术修补,对于复杂企业级系统的长期健康发展至关重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值