业务单系统架构设计心得(一)

这篇具有很好参考价值的文章主要介绍了业务单系统架构设计心得(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

阅读说明:

如果有排版格式问题,请移步 [《业务单系统架构设计心得(一)》](https://www.yuque.com/mrhuang-ire4d/oufb8x/ilud3u0w74sthfpo?singleDoc# 《业务单系统架构设计心得(一)》),选择宽屏模式效果更佳。
本文为原创文章,转发请注明出处。

作为一个业务开发工程师,工作中最多的是需求开发,把需求从ppt到落地实现。随着工作的深入,工作面也变得更广和更深,需要面对更多的系统,更加复杂的场景。这时完成功能实现是基本要求了,想要开发能力上一个台阶,需要做好架构设计。常见的架构有:洋葱架构、六边形架构、整洁架构、SOA架构、CQRS架构等等。
业务单系统架构设计心得(一)
业务单系统架构设计心得(一)
业务单系统架构设计心得(一)

这些架构都有一个共同点,分层。针对业务开发系统,本文总结如下业务架构,总共分为5部分:api层、流程层、服务层、数据访问层、指令输出层。
业务单系统架构设计心得(一)

1.api层
功能:隔离本系统与外部其他系统的交互,交互方式有rpc接口,http,mq, 定时任务等方式。 api层接收和处理入口参数以及凭借和转换参数,映射为内部服务,并处理内部服务出参。api层不只是做转换,还需要理解内部服务的模型定义和领域能力,对参数建立合理的模型。

api层在设计上需要尽量满足以下四个原则:

  1. api层尽可能薄。api层不要业务逻辑,业务逻辑下沉到流程层和服务层里面。
  2. 满足弹性设计,减少后续对api定义的改动。api层是跟外部交互,接口定义上尽量减少变动。弹性设计方法有:
  • 对入参和出参使用一个大对象包装,后续变更参数时,变动收缩在对象内部;
  • 使用Map来传递一些可变参数;
  • 通过List实现参数规模的弹性,不断丰富Condition模型来支持更多的参数结构和含义,比如范围搜索、模糊搜索、并联或者互斥条件含义。
  1. 参数归一化。所有外部的请求,业务上一般需要记录上游方的调用信息,方便后面追溯请求和做业务监控。因而,需要抽离出公共模型,专门记录调用方相关信息。所有返回结果,根据是否成功有可能性:成功,失败。 在定义成功和失败上,为了便于上游,需要统一成功和失败的code,在设计返回结果时需要抽离出一个标准返回模型,统一定义成功和失败的code。比如http,只有200才表示成功,其他错误码都是不同失败原因。
  2. 上游参数映射:尽力隔离上游系统的领域内容,防止上游定义变更,带来的大批量修改灾难。

当然,api层可以做一些非业务功能,比如用户鉴权,接口限流。

2.流程层(biz层)
负责流程编排。将服务层的逻辑串联起来完成业务逻辑。流程层主要负责组织串联服务,可以将组织串联功能沉淀出基础组件功能便于复用。 流程层可以留有简单的业务逻辑,如果本身不复杂,业务逻辑可以直接放到流程层,不必下沉到服务层再被流程层调用,业务架构设计中可根据情况具体分析。

3.服务层(service)
系统核心模型和能力弹性的承载层,是系统功能和扩展性张力来源。服务层内部要进行划分成不同的功能区,划分方法可参考DDD,原则上各个功能区是独立的,不应存在跨功能区调用的情况。

4.数据访问层
对接数据存储,对外提供统一的接口,屏蔽存储实现,数据存储有mySQL, Redis, ES等。

5.输出指令层
输出指令数据,方式有RPC, MQ, 以及http等服务。在层级上跟数据访问层处于同一层级。输出指令层也是跟外部服务进行交互,如有必要进行参数映射,防止下游定义变更,带来的大批量修改灾难。

业务复用

随着系统壮大,越来越多新的功能加入,如果新功能跟现有功能在流程上具备相似之处,从原则上应该复用现有逻辑。复用现有逻辑,一方面能够减少开发量,只需要专注差异点的开发,能够快速交付上线;另一方面,从长远来看,便于维护,无需多次改动。

不同业务具备公共业务点和差异业务点,业务复用可以在两个地方实现:流程层重新编排和服务层子服务开启差异点扩展。

流程层重新编排是指各个业务线在流程层各自写一套服务编排逻辑,被编排的子服务可以分为公共子服务和差异子服务, 公共业务点放到公共子服务中,差异业务点放到差异子服务。
业务单系统架构设计心得(一)

服务层子服务开启差异点扩展是指流程编排是相同的,在子服务中根据不同的业务线实现差异点,为了在子服务中实现差异点,需要在流程上下文中带上业务标识。

流程层重新编排适合差异点比较大的情况下,差异子服务并非一个服务的不同实现,这种情况下将差异点直接编排成子服务更合适。服务层子服务开启差异点适合差异比较小的场景,对于某个功能点各个服务都有自己不同的实现,这种有个好处是便于定义标准扩展接口,做成SPI还能够支持动态扩展。实际业务线采用哪种方式要根据具体业务来定,或者两种都采用。

扩展点

一个系统能够成为优秀系统,扩展能力是一个必备的能力。良好的扩展能力不仅能够帮助系统提高扩展,增强适应性,还能够简化系统结构,代码更加优雅。java中提供了多种机制对程序功能进行扩展,如继承,组合,多态,接口,内部类等,框架类比如Netty, Spring同样提供了大量自定义扩展点。同理,在业务系统架构设计中,剥离出变动部分,并设计为扩展点的形式,方便后续迭代。

链式扩展

用更形象的表述,就如数据结构中的链表一样,链表中的节点为扩展节点,链表将多个扩展节点串联起来执行。链式又可以分为单链和双链。单链中每个节点只有一个处理器,双链每个节点分为前置和后置处理器,双链在执行上,节点前置处理器先正序执行,执行完后,后置处理器再逆序执行。
业务单系统架构设计心得(一)

业务单系统架构设计心得(一)

链式扩展由扩展节点(扩展点的具体实现), 扩展节点链组成。链式扩展的扩展节点实现具备同等地位,图中ExtensionOne, ExtensionTwo, ExtensionThree都是对同一扩展点的不同实现。注册Extension时,将扩展节点编排成链,如果扩展节点无前后依赖关系,那么节点执行顺序可以任意编排。当然,有些扩展点是有前后的依赖关系,这种情况下就必须指定节点执行顺序。在Spring中,注册Extension变得更加简单。直接自动从Spring中上下文中找到所有扩展点的实现节点,在修改节点时,无需改动注册逻辑。

链式扩展应用广泛,在SpringMVC中,实现拦截器,提供日志打印,权限校验等工作。在订单业务系统中,也有很多应用。比如订单拆单流程,业务上有很多拆单规则比如大小件拆开,按照发货仓库拆开等等,一个订单经过拆单规则后,将拆分成多个子单。拆单规则通常是动态变化的,这里就非常适合采用链式扩展点。
业务单系统架构设计心得(一)

星型扩展

星型扩展组成上有一个分发器和多个扩展节点。分发器根据分发条件分发到响应的扩展点进行处理。
业务单系统架构设计心得(一)

星型扩展逻辑简化如下:

if (命中业务A) {
	执行ExtensionOne;
} else if (命中业务B) {
	执行ExtensionTwo;
} else {
	执行ExtensionThree;
}

星型扩展的应用也很多,上一节中的业务复用,在服务层子服务开启业务复用,需要开启星型扩展来处理不同业务的差异点。 SPI虽然没有明显分发器,但也属于星型扩展的方式。

参考:
[1]. https://zhuanlan.zhihu.com/p/479800537
[2].https://medium.com/expedia-group-tech/onion-architecture-deed8a554423
[3].https://mp.weixin.qq.com/s/pNfC7klCZTKhXwC4t5V7BA
[4].https://mp.weixin.qq.com/s/F42LqQncMDLQH-WWmZ28fA
[5].https://mp.weixin.qq.com/s/y-RBStzS0jNlbkljRP_MrA文章来源地址https://www.toymoban.com/news/detail-802625.html

到了这里,关于业务单系统架构设计心得(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【企业架构设计实战】2 业务架构设计

    业务架构(Business Architecture)来自业务,我们先来看看什么是“业务”。 在百度百科中,业务被定义为“ 各行业中需要处理的事务,但通常偏向指与销售有关的事务,企业最终主要以销售产品、销售服务、销售技术等为主要盈利模式。 ” 在 TOGAF 中,业务被定义为“ 任何与

    2024年01月17日
    浏览(27)
  • 架构设计方法(4A架构)-业务架构

    什么是架构?理解架构定义,以及架构重要性,建立对架构设计的认识。 系统架构主要表述了契合一个环境的系统的基本元素及元素之间关系构成的结构集,在环境中体现出来的基本属性,以及设计与演进的原则。 架构包括三个部分: (1)组成系统的基本元素、元素之间关

    2024年04月12日
    浏览(59)
  • .Net下企业应用系统架构构建心得

    在开始架构设计之前,需要了解一下架构是什么,按照IEEE标准的定义是: Architecture 是一个系统的基本组织,它蕴含于系统的组件中、组件之间的相互关系中、组件与环境的相互关系中、以及呈现于其设计和演进的原则中。 (The embodied fundamental organization of a system in its compone

    2023年04月22日
    浏览(29)
  • 业务架构设计模式

    背景介绍 我们是CRO面向商家的业务技术团队,做商家营商环境治理业务已经4年了。作为垂直型业务技术团体(区别于平台技术团队),我们也面临大部分业务技术团队的拷问:业务技术与平台技术的差别是什么?业务技术如何做?如何理解业务?如何在短频快的业务节奏中

    2024年02月09日
    浏览(31)
  • 问界低代码平台架构设计及业务实践

      1.前言 内因:随着之家业务快速发展,公司内部的数字化需求越来越多,信息系统团队每年都面对大量的需求,但研发侧资源是一定的,那么如何更快速的交付需求,越来越成为团队重点思考解决的问题。 外因:互联网技术的不断推陈出新,尤其以React,Vue为代表的前端技

    2024年02月11日
    浏览(54)
  • 从业务出发,K8S环境自建和非自建整体架构设计比较

    新钛云服已累计为您分享 751 篇技术干货 随着数字化转型的大潮到来,越来越多的企业开始上云,同时也纷纷加入到微服务和K8S队伍中。但在K8S整体环境究竟应该用自建的还是非自建?以及他们需要用到的服务,究竟应该自建还是直接用PAAS服务?这些问题往往会困扰住大家。

    2024年02月09日
    浏览(30)
  • 【AUTOSAR】BMS开发实际项目讲解(七)----BMS硬件架构设计概要说明

    概要说明 / General Information 文档目的 / Document Purpose 本文档定义 BMS 平台的硬件架构设计,包含 SBC 电源模块,模拟信号采集模块,数字信号采集模块,高压互锁模块, MCU 最小系统, CAN 收发器模块, HSD , LSD ,高压及绝缘采集模块,高压侧 MCU 系统,前端采样芯片及通信转换

    2024年02月12日
    浏览(35)
  • 【业务功能篇73】web系统架构演变-单体-集群-垂直化-服务化-微服务化

    1.1 单体架构 单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问层。 单体架构只适合在应用初期,且访问量比较下的情况下使用,优点是性价比很高,开发速度快,成本低,但缺点也很明显,这时扩展的首先

    2024年02月11日
    浏览(42)
  • 系统设计-经典场景电商业务之下单

    系统设计-经典场景电商业务之下单 上图我们看到,针对电商系统的架构设计考虑点,提到了许多重要的方面。以下是对每个关注点的详细描述: 1. **API网关**:     API网关作为系统的入口,负责将客户端的请求转发给后端服务。它可以集中处理安全性、鉴权、监控、缓存、请

    2024年02月11日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包