模块化架构_程序猿子曰的博客-程序员信息网_模块化架构

技术标签: 微服务  架构  java  子曰架构那些事  分布式  程序人生  

一、模块化是什么

模块化的思想不是我们创造的,而是各行各业的趋势。造一辆汽车,它的发动机、轮子、电池组等都是标准化模块化的;又比如原来造一幢房子是钢筋水泥土,现在是通过预制件。带来的好处是又快又好又省。

二、开发领域模块化

基于传统的开发方式,软件工程到一定的规模以后,系统变的越来越复杂,很多一定规模的公司,中台系统也非常庞大复杂,按传统的开发方式,来一个需求,编码开发,一段时间之后系统变的越来越臃肿。

这是一张印度的电线杆,比较形象的来形容软件工程到一定程度后系统变的越来越复杂了,很多大公司也有类似的系统。

传统的软件工程方式,随着需求和时间会变得越来越臃肿,而采用模块化方式,我们尽可能思考如何复用,很多实现可以用流程图代替大量编码,并且沉淀更多的能力组件,组件越来越多,反而以后开发起来越来越快。

对于一块业务而言,业务需求提高一倍,传统模式因为系统复杂了,需要倍数级增加开发人员,如从10人增加到25人,目前程序员成本极高,而用海牛架构后可以大幅减少人员规模。

三、为什么用海牛模块化架构

公司自研一套有效的模块化成本极高

交流了一些大公司CTO,其中有一家公司在我们交流之前,组建了架构师团队,花了6个月时间开发了一套模块化解决方案,但是效果不好就废弃了;另外一家投入了5、6百万成本,也没有搞出来;还有几家搞出来了,效果也不明显。海牛模块化是资深架构师设计的,不需要花6个时间开发,直接可实战使用,最重要的是可行性,已经有多个项目落地,可行性比较高。对于很多公司来说,不用投入不确定的研发,站在海牛模块化的肩膀上构筑自己的模块化方案。

我们的专业性

我在8年前在阿里开始实践模块化,阿里的会员平台是基于模块化落地的,支撑了很多核心业务的会员解决方案,出来之后把基于阿里会员模块化,重新打造,更标准化体系化落地,又有很多项目落地,这些年一直在打磨模块化架构,目前几个大公司开始使用,我们是模块化架构最专业的,海牛模块化是模块化开发的最佳实践。

通过不断的思考和实践模块化,我们体系化来设计模块化(可以参考第四部分,4个层面的思考);我们像艺术品一样打磨每个组件,从组件的抽象力度和范围,到组件的每个文案交互,到用流程图来组合组件,力求顺应程序员所思所想,就是这样来呈现的,简单又自然。

解决痛点问题

1)大量重复开发,释放大量的工作量 ,同样的人创造数倍的价值

如文件导出导出批量处理方案、大屏展示方案等,原来需要1天-3天工作量,后续开发只要半个小时之内。

目前研发从业人员成本非常高。

2)解决复杂系统问题,让系统更好维护,更好扩展。

灵活应对人员变动,原来需要长长交接文档,系统中有什么坑,成本比较高去维护别人的代码,现在文档自动生成,流程图及是文档,只要权限更改就完成了。

每次开发越多,潜在的bug也越多,但反复使用模块和组件,已经反复使用了几十遍上百遍,产出的稳定性较高,而且复杂系统变的简单,提高了系统稳定性,更好地服务目标客户。

3)通过模块化解决异构系统问题

很多saas方案有很多定制化场景,原来可以saas化部署,现在需要部署多套,需要更多的人来维护,成本高。

异构部分可以用流程图代替,真正实现定制化场景的saas化,一套系统解决不同客户问题。

四、如何践行海牛模块化

海牛工作台开发工具只是模块化的一小部分,更核心的是整个海牛模块化架构和思想。

和传统开发方式对比:

对于资深的开发者本身就会把一些通用功能抽象为方法类;对于海牛模块化我们抽象的是开发的本质(取数据、数据处理、数据展示或者落库)

如上图所示,海牛模块化和传统开发方式相比,往下多思考了几个层面。

第一层 抽象的范围

传统开发方式主要抽象的能力,如传统组件能复用10种场景;

海牛模块抽象的要求更高,而且不仅仅抽象功能还抽象业务,海牛组件能复用20种场景。

第二层 组件可视化配置

海牛组件可以通过可视化表单进行配置,组件的表达能力进一步增强,能复用50种场景。

第三层 模块化三个层次(组件、模块、模板),从简单到复杂,又可以从复杂到简单

就行模块化方式造的房子,通过基础的预制件可以搭建出各种各样的房子,而且可以更灵活的扩展和更改。

多个组件可以组成模块,多个模块还可以组成模块,多个模块接口可以组成模板(如用户模板,包括登录、注册、管理等),进一步复用,这时海牛组件能复用100种场景。

道生一、一生二、二生三、三生万物,虽然后面万物个不同,也很复杂,但都是从最简单标准的元素开始,在模块化中就是标准的组件,通过标准的组件可以组合成各种复杂的系统。

第四层 分布式服务标准化

当我们面向整个公司分布式服务体系来看。

传统模式下,如电商中台有很多系统,不同的团队负责不同的系统,内部很多微服务接口,而且服务形式也有很多,在模块化架构的中台下,系统变成了一个通用系统,运行不同的流程图数据。

并且服务也标准化了,把服务抽象为服务调用和服务提供,通过组件来调用服务,(除了调用标准接口,历史的各种接口也可以通过通用组件调用)用流程图来实现标准统一的服务,这样整个分布式中台复杂度大幅降低。

模块化是体系化的,从很小的组件开始,到整个公司模块化分布式中台架构,都是通过一个简单的标准化的组件开始,通过分形,能表达复杂系统和整个公司分布式体系,但本质是很简单的组件。

海牛工作台设计了一整套机制,先让程序员用起来,用的过程中,自然而然开始抽象和思考,慢慢引导程序员去设计开发一套让自己很舒服的优雅的系统,通过不断地使用和项目模块化落地,自然而言让程序员具备了模块化架构的思维。

对于模块化开发人员来说,对自己产出的东西是有一定要求的,设计出一套优雅的架构,我们尽可能发挥我们抽象能力,经过一段时间模块化反复训练后,当有需求和项目时,脑子里就有流程图了,就知道怎么更好的实现,就像打太极,很多招式方法,都在我们脑子里,打出来游刃有余,一切是那么自然。

两个案例践行模块化案例

1)第一次真正迈入模块化

某应届测试同学第一次真正的用海牛平台开发的一个项目实战体会。

2)模块化熟悉之后融会贯通

对海牛平台比较熟悉的同学,用半天时间实现了一个原本需要3天的需求,

更重要的是沉淀了一套解决方案,后面再开发类似需求时只要半个小时。

这两个实战的例子更接近我想表达的从传统开发方式到模块化开发方式,不仅仅是上面的案例,之前我带的开发人员,也同样具备了以上的能力,模块化流程图需要训练程序员的抽象能力,经过反复训练之后,流程图和传统代码方式相比更接近程序员的思维方式,实现前面说的遇到一个需求,自然而然脑子里就有流程图了,经过反复训练,能设计出让我们自己很舒服的架构和方案,后期扩展也是很顺滑的。

五、海牛模块化部分案例

美港股金融量化APP,提供财报、量化分析和投资组合计算,非常复杂的金融场景,完全用模块化落地。

采用海牛模块化1.0版本(模块配置化版本),1个开发当3个人来使用。

类似于产业园区的贝壳,用海牛模块化2.0版本,15天后端全部开放完成。

寺庙saas,采用海牛云3.0版本(可视化开发)1天架构设计,2天开发完成。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43844911/article/details/122152612

智能推荐

MVC.数据回填_半纸烟蓝的博客-程序员信息网

对于在页面上回填数据,这是很常见的,在编程时,往往伴随着数据的新增,修改,删除,查询,当要对数据执行修改的时候,这时候就需要针对个别页面或者input标签进行数据的回填,然后对回填的数据进行修改。数据回填的思路主要是针对于自身存在的ID,把ID传输到控制器执行数据的查询,然后控制器里面定义好的方法就会从数据库里面查询,筛选数据,,然后再把查询出来的数据返回给页面,从而达到数据的回填。既然要回填...

petalinux下建立zynq 工程_JiaoCL的博客-程序员信息网_zynq 建立petalinux

zynq系列的裸跑部分完成后,用片内的arm跑一下linux,并运行sdk文件:petalinux-create -t project --template zynq --name zynqprojectcd zynqproject将vivado生成的sysytem_wrapper.hdf 复制到zynqproject文件夹petalinux-config --get-hw-descrip...

原创|分享2个赚零花钱的小技巧_Sitin涛哥的博客-程序员信息网

今天是涛哥日更打卡40/100天,大家给涛哥点赞分享呀。作为程序员平时喜欢宅在家里面,日常也都懒得动,所以各种产品都是网上进行购买的,买的东西多了就想着能不能有些省钱的秘籍呢?趁着日更,...

学习嵌入式Linux开发——Firefly RK3288更换系统(烧写固件)_l恒星l的博客-程序员信息网_rk3288刷机

目录概述准备安装Firefly 官方烧写固件教程Firefly 韦东山版烧写固件教程韦东山出的还带有SD卡启动的教程概述在Windows10系统下为Firefly-RK3288烧写固件。准备软件及Ubuntu固件点此下载软件:稍后我会把需要用到的软件上传一下。镜像:选好版本,个人建议用16.04的,太新了可能会不太稳定,太老了有可能有一些功能不支持了。安装首先:其次:...

too many open files错误与解决方法_单的格子的博客-程序员信息网_was脚本执行报错too many open files

"too many open files" 错误与解决方法问题现象:这是一个基于 java 的 web 应用系统,在后台添加数据时提示无法添加,于是登陆服务器查看 tomcat 日志,发现如下异常信息:java.io.IOException: Too many open files通过这个报错信息,基本判断是系统可以用的文件描述符不够了,由于 tomcat 服务室系统 www 用户启动的,于是以 www 用户登陆系统...

Wireshark协议分析之ARP协议_马赛克|的博客-程序员信息网_wireshark arp完整需要补0

一:以太网帧一个完整的以太网帧包含下面的内容:1前同步码(前导码)(56比特=7字节)2 标识以太网帧正式开始的定界符(分隔符SFD)(8比特=1字节)3 目标MAC地址(48比特=6字节)4 源MAC地址(48比特=6字节)5 长度/类型字段(16比特=2字节)6 第二层以太网帧里的数据体(46-1500字节)7 数据体长度不足时填充(如果...

随便推点

mysql按照给定的顺序筛选_mysql 查询结果集按照指定的字段值顺序排序_我是史迪仔的博客-程序员信息网

mysql 查询结果如果不给予指定的order by ,那么mysql会按照主键顺序(innodb引擎)对结果集加以排序,那么最后的排序可能就不是你想要的排序结果。举个例子,我要按照前端传过来的mongoId集合来查询数据库并且返回同样排序的结果集合,如(M3,M5,M4),他们对应的主键顺序为(M4,M3,M5)。如果在查询语句中不加order by 对查询结果排序,那么结果就会变成主键顺序(M...

网络测速命令--speedtest_weixin_34166472的博客-程序员信息网

网络测速speedtest-cli顾名思义,这个命令为网络测速命令,基于Python编写,测试系统网络的上传下载速度,GitHub托管的项目地址,以下列出常见的用法安装命令pip install speedtest-cli使用命令# 查看帮助,具体选项说明自行查看,这里列出几个常用的speedtest-cli -h参数说明原文-h, --help显示帮助信息...

如何使用Postman 模拟post上传文件请求_小狐狸和小兔子的博客-程序员信息网_postman post 文件

当我们使用postman来测试接口的时候,对于文件上传应该如何配置呢首先填写请求的 Headers 加入key= Content-Type ,value= multipart/form-data然后进入Body,选择form-data,填写后台对应接收的名称,类型选择file,然后在value选择文件上传即可效果如图...

JDK安装步骤_斩·侯的博客-程序员信息网

查看当前Linux系统是否已经安装java输入 rpm -qa | grep java要是有的话把他卸载掉卸载两个openJDK输入rpm -e --nodeps 要卸载的软件1.把jdk文件的压缩包拖入虚拟机2.找到刚刚拖的那个文件3创建jdk文件夹4.解压jdk的文件,并存放在刚刚创建的jdk的文件夹下5.查看文件所在位置,配置环境变量vi编辑的时候吧一下东西编辑进去#set java environmentJAVA_HOME=/usr/local/jdk/jdk

ubuntu 安装完后对于开发需要做的事情_weixin_30735391的博客-程序员信息网

是从https://www.osboxes.org/ubuntu/ 下载的vdi文件,估计vmware对应的应该也有。1. 安装 openssh-serverapt-get install openssh-server可以对 openssh server进行配置$ sudo vi /etc/ssh/sshd_config找到PermitRootLogin no一行,改为PermitRo...

Python ln_Python 可视化——绘制动图_weixin_39788986的博客-程序员信息网

在进行动力学模拟的时候遇到了状态过程可视化问题,因此mark一下python动图的绘制,希望能有所帮助。这里主要介绍 python中 matplotlib 的 animation 模块,可以快速绘制Mp4, gif动画class matplotlib.animation.FuncAnimation(fig, func, frames=None, init_func=None, fargs=None...

推荐文章

热门文章

相关标签