业务架构和系统架构_技术架构和系统架构

业务架构和系统架构_技术架构和系统架构通用业务系统架构演进

大家好,又见面了,我是你们的朋友全栈君。

前言

系统搭建初期,为对公司业务进行快速支持,往往搭建的系统非常加单,主要为了满足快速迭代的需求,使用公司初期的高速发展。 随着业务的越来越繁杂,系统会变得越来越复杂,除了需要在技术角度去满足系统的高性能,稳定性,高可用等需求外,设计可以满足业务需求迭代的架构同样重要。

常见痛点

为快速支撑复杂业务能力,系统代码往往采用类中写几千行代码,一个方法中到处if-else,如果再没有阅读性好的代码和注释,随着员工离职,接手的程序员很难快速介入代码进行开发,反过来则限制了系统业务能力的快速迭代。 最坏的结果可能造成因为越来越难以迭代,使得系统推翻重做。

通用业务系统实现

系统初期往往采用三层架构方式搭建,上层为controller,中间层为service,下层的数据访问为dao层。

Controller

Controller层往往推荐只作请求参数和响应参数的处理等一些浅逻辑,比如协议转换等。

业务架构和系统架构_技术架构和系统架构

业务代码中,往往按照业务领域划分和组织代码结构,比如按照订单,会员等划分,这样同样可以在Controller层做好请求到领域内的映射。

比如:

  • 将请求参数解析出来组装成内部参数
  • 调用下层服务执行业务逻辑
  • 组装返回响应结果,异常情况下,则对异常堆栈封装等

主要的原则是:网关内对协议进行处理,将业务逻辑进行收敛,不暴漏给外部,这样在内部逻辑进行重构时,不需要外界感知变化。

Service

业务层是承载业务流程和业务规则的地方,同样可以采用分层方式进行代码逻辑组织:

  • 1.业务服务层
  • 2.业务流程层
  • 3.业务组件层

业务架构和系统架构_技术架构和系统架构

业务服务层

业务服务层可以作为按业务领域划分的领域对外的接口,每个接口代表一个领域业务,比如订单领域内逻辑统一放在Order Service,账户领域交给User Service。

在接口指责划分上,可以采用读写接口分离的原则,比如:Order Read Service和Order Write Service,这样在未来系统在技术角度需要做读写分离处理和流量管理时,可以减少极大的梳理成本。

接口中功能方法的名称尽量有意义,比如订单创建叫做cereate Order,取消订单叫做 cancel Order,而不是简单的增删改查名称。

参数组织上如:Request,DO,DTO等。

业务流程层

业务流程代表对于规则的解释和梳理,规则是将PM的需求翻译成代码的过程,所以同样可以通过多种标准化动作进行控制:

  1. 组装参数
  2. 规则判断分支
  3. 执行动作节点,每个动作节点包含业务功能代码

主要原则是将容易变动的地方做到易修改,易测试,减少新功能迭代时的理解成本。 将不易变动的功能进行拆分,固化,变成可维护的业务组件。

业务组件层

业务组件层是将一些可服用的逻辑,可固化的功能进行内聚封装,可以有参数组件,规则判断组件,动作行为组件等。

业务组件的形成往往是在对业务理解深刻之后演进出来的,过早的抽象往往效果不好。

组件内聚之后可能产生如:短信组件,下单组件扽。

多种组件可以组合产生业务流程的能力。

Dao

数据访问层同样可以由两部分组成:接口定义,技术组件。

业务架构和系统架构_技术架构和系统架构

接口定义

底层数据能力需要和上层业务能力分离,通过设计合理的接口,向业务层屏蔽底层复杂度。 可以基于面向接口编程的思想设计数据库访问接口和缓存访问接口等。

技术组件

系统随着业务发展和需要承载的用户越来越多,需要经历单机,集群,服务化等多个阶段,所以需要沉淀下来一些技术组件,来将多个阶段问题进行固化封装,达到系统发展而业务无需感知的能力。 可以沉淀的技术组件包括:数据存储,缓存,消息,调度任务,事务,锁机制等。

数据存储,底层可以封装访问关系数据库,日志系统HBase,文件系统HDFS,本地文件系统等。

缓存,可以按照不同的超时时间纬度或数据量进行选择,比如本地内存的Encache,集中式缓存Memcache,集中式可持久化的Redis集群等,同时可以将缓存击穿处理等逻辑进行集成。

消息,在系统中常常用来解决异步处理能力,消息的消费往往和调度任务组合起来,可以按照调度规则,配置一次或者多次业务逻辑的处理。

事务,往往采用数据库实现,单机的事务依赖于数据库事务,可以使用spring-tx的事务进行事务控制,业务逻辑中,事务应该尽量小,可以将业务逻辑紧密的数据库操作放在一起。在分布式场景下可以根据不同的业务需求选择不同的分布式事务处理机制。

锁,主要有两种:乐观锁和悲观锁。

  • 乐观锁:往往采用数据库加版本字段实现,粒度较小;
  • 悲观锁:可以采用基于JDK的Lock实现,粒度较粗;
  • 分布式场景下可以基于Redis集群和Zookeeper实现;

总结

通过以上方式我们可以提炼出针对于业务系统所需要具备的通用能力,在一定程度上满足了业务系统规则易变的特点,当然不同业务场景有自己的要求,很难有银弹,还需要根据自己的业务场景进行提炼和补充。

转载于:https://my.oschina.net/u/1000241/blog/3014150

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106981.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ODT_ODT2是什么意思

    ODT_ODT2是什么意思ODT练手CF915E题意:Q次区间(1~n)操作,k=2区间(l,r)变为1,k=1区间(l,r)变为0,一开始全是1问每次操作后1的数目n<=1e9Q<=1e5#include<bits/stdc++.h>usingnamespacestd;#definelllonglongllqmod(lla,llb,llmod){…

    2022年9月10日
    0
  • 大数据概况及Hadoop生态系统总结

    大数据概况及Hadoop生态系统总结觉得有帮助的,请多多支持博主,点赞关注哦~文章目录大数据概况及Hadoop生态系统1、大数据概念理解1.1、什么是大数据?1.2、大数据特征(4V)?1.3、大数据应用场景?1.4、大数据部门业务流程分析?1.5、大数据部门组织结构?1.6、数据仓库与数据库的区别?2、职业简介2.1、大数据工程师2.1.1、简介2.1.2、职责2.1.3、所需技能2.1.4、工作方向2.2、大数据分析师2.2….

    2022年5月19日
    39
  • 2021软件测试面试题及答案_2021年软件测试面试题大全

    2021软件测试面试题及答案_2021年软件测试面试题大全1.数据库增删改查基本上查询考的比较多,也有考察新增,修改,删除的,极个别的会给出表结构,字段要求,让你据此建表以及临时表查询语句主要考察子查询,聚合函数,多表查询,分组,可参考下面链接(sql50题)sql50题插入语句insertinto[table]([column],[column])values(?,?)删除语句deletefrom[table]wherecolumn=?修改语句update[table]setcolumn=?wherec

    2022年8月26日
    3
  • QT——开发入门简介

    QT——开发入门简介1、你了解Qt吗?Qt是一种基于C++的跨平台图形用户界面应用程序开发框架。如何跨平台?上到服务器上位机,下到嵌入式GUI,上天入地无所不能。Qt最早是由1991年由QtCompany开发,但是到2008年,QtCompany科技被诺基亚公司收购,是的,就是拥有着我们很多情怀的诺基亚。但在2012年,Qt又被Digia收购。等到了2014年,跨平台集成开发环境QtCreator3.1….

    2022年5月17日
    29
  • 把Android系统签名弄成jks

    把Android系统签名弄成jks假设我们得到了系统签名文件:platform.pk8、platform.x509.pem,还需要一个用于签名的文件:signapk.jar,这里提供了一份下载连接,可供练习使用:链接:https://pan.baidu.com/s/1OiBcVyhZVqTulb6HXwcqHA提取码:7g81不同的系统,系统签名是不一样的,所以你们下载我的这个签名文件是用不到你的系统上的,但是signapk.jar是通用的,什么系统签名都可以使用他。当你有你的系统签名文件时,如何把一个apk签名为系统签名呢?如下:

    2022年6月21日
    28
  • pycharm terminal 进入虚拟环境_pycharm failed to create virtual

    pycharm terminal 进入虚拟环境_pycharm failed to create virtualPycharmterminal激活虚拟环境,首先需要保证系统完成了conda的安装,并在Powershell中完成虚拟环境的创建(操作创建的虚拟环境名称为deep_pool,这个虚拟环境在接下来的操作中会被提及到)。如果不会创建虚拟环境,可以参考下面这个流程:Ubuntu20.4安装Anaconda以及过程中遇到的问题(已解决)_qq_53258482的博客-CSDN博客在虚拟环境创建完成后,在powershell中输入命令Set-ExecutionPolicy-ScopeCurrentUse

    2022年8月25日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号