编写网站策划方案,网站哪里有,wordpress教学视频,工业和信息化部投诉电话记录某金融机构老项目重构升级为微服务过程1
如何从EJB架构拆分微服务
这个非常有趣的过程#xff0c;整个过程耗时大致接近半年时光#xff0c;需要考虑到重构升级保留原来的业务线#xff0c;而且还要考虑后续的维护成本#xff0c;保留现有的数据库表结构#xff0c;…记录某金融机构老项目重构升级为微服务过程1
如何从EJB架构拆分微服务
这个非常有趣的过程整个过程耗时大致接近半年时光需要考虑到重构升级保留原来的业务线而且还要考虑后续的维护成本保留现有的数据库表结构以减少数据后续的迁移工作只从现有的ESB体系的老系统中剥离升级为微服务架构本文大致从现有的ESB架构的体系中的EJB项目升级springcloud的完整过程这个介绍体系后续持续更新。
EJB架构升级为SpringCloud
我们原来的EJB的金融系统的老项目已经使用很多年对这个业务线以及设计的表结构还有这个架构里面涉及到的方方面面的工具类使用的模板套路都非常熟悉如果在现有的老系统新增业务线也能支撑业务的扩展以及揽客的要求但是随着公司提出的开源节流对于开发从业者的成本控制以及项目迭代的周期要求逐渐提高原来的EJB架构的瀑布流模式的开发明显更高成本现在分析EJB项目里面的各个组件的功能梳理出来接口层API防腐层业务层分发层以及页面使用vue3作为渲染数据的架构实现前后台分离。
全新的界面设计 使用vue3的组件界面明显清晰得到快速响应的效果而且基于事件驱动调用后端接口实现局部数据的刷新渲染提高用户体验这里简单介绍VUE3的使用具体还是后端的服务切分以及如何减少数据迁移成本展开叙述。EJB原来是使用sessionBean实现业务数据的流转而且业务高度耦合特别是通过EJB存根对象调用存储层的接口就明显的非常冗余代码结构非常的混乱而且新手上手成本非常高能让开发先需要了解各个组件的使用套路才能更好的专注业务逻辑代码的编写增加了 抽象存储层 升级的老系统最重要是抽象出一个单独的公共的微服务仓储层这个服务主要是为了减少后续的数据迁移成本继续保留现有的数据库表结构的一个设计原老系统使用了大量的PROCEDURE复杂的表关联逻辑即使拆分了微服务这部分的逻辑都不能马上可以拆分合理的业务逻辑所以保留现有的procedure是非常明智的办法保留这些核心的逻辑都抽象到一个单独的微服务其他的微服务就可以通过feign进行调用但是这里要注意这里的仓储层已经是链路的最后一个节点不能调用其他的微服务但是其他业务层可以互相调用而且最后调用的链路是这个仓储层所以这里的设计需要并发的访问处理并且需要设计缓存层对热点数据进行减少磁盘的冲击仓储层只要设计API模块负责提供远程微服务的调用入口以及JDBCExcute的封装实现调用procedure。这个微服务没有负责的代码层面的逻辑核心的逻辑都是原来老系统的procedure进行封装好保留继续使用即可。全新的 service层的设计 从老系统剥离的MVC三层架构升级为多个微服务而且链路要短关联表要少上手容易维护容易方便新业务线的新增改造等围绕这些触发点新增的微服务service层设计就非常重要这里就通过剥离原来controller的分发后端的逻辑原来通过EJB调用暴露的接口API改为抽象的仓储层API接口调用这里就简化了升级的设计难度从原MVC升级多个微服务之间的调用简单容易理解几个例子原来jsp通过form表单提交后端的数据使用的是formBean接收这里的Bean肯定是无状态的Bean只负责提交到后端的controller进行接收做业务处理比如数据的类型转换格式转换外接口的调用返回当前业务线数据查procedure的参数等无非就是数据的过滤转换以及外接口的返回参数的处理一并组装新的VO作为参数查核心的业务脚本举个简单的业务线作为本次记录的收尾汇款功能相信所有的金融机构都有这个功能这个功能点具体的表结构核心的主表肯定有USER表PRAM参数表RATE汇率表ACCOUT账户信息表REMITTANCE汇款表等等这些核心表构成这里的核心表账户表属于常用的逻辑可以封装为accountUtil提出抽象的VO 提供多个模块使用包括一些常用的负责处理逻辑关联逻辑都可以体现在这个工具包下另外页面的API接口的剥离设计这里可以分2种常用的方案进行API的分割比如第一种一个Form表单分多个tab没有tab都有单独的信息展示而且这些都来自一个大表的其中一些核心数据还有其他关联表的数据这里就可以通过多个tab划分多个API进行调用这样的好处就是前端的设计容易保留原来的业务功能新系统上手难度低用户保留熟悉感能快速上手完成汇款交易但是这里同样也有缺点就是加大了后端切分的业务量原来的一个tab是一个大表关联其他表返回的完整的FormBean进行返回页面现在是一个tab进行切割导致这里的Bean需要重新设计而且原来的service层的代码逻辑都需要改变特别是组装VO查询procedure的逻辑当剥离多个API接口后查询核心逻辑分开然后重新组新的response对象返回其实相当于重构了原来MVC里面的controller的业务代码对后端开发耗时非常大而且粒度非常大不容易分离抽象通用的代码块另外一种方式就是通过粒度更细的方式进行升级构造比如页面如果多个字段而且有些字段需要通过ajx局部刷新请求后台的这类就非常适合抽象成API进行单独的设计另外还有初始化页面的dropdown的数据等都非常适合这类型的单独设计为新的API接口这个设计思路也有弊端就是后端的接口压力非常大需求额外新增缓存来进行防护增加了维护成本所以这两种各有利弊
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片: 公式展示 Γ ( n ) ( n − 1 ) ! ∀ n ∈ N \Gamma(n) (n-1)!\quad\forall n\in\mathbb N Γ(n)(n−1)!∀n∈N 是通过欧拉积分 Γ ( z ) ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)∫0∞tz−1e−tdt. #mermaid-svg-IW1a9lybnBEjXyn6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-IW1a9lybnBEjXyn6 .error-icon{fill:#552222;}#mermaid-svg-IW1a9lybnBEjXyn6 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-IW1a9lybnBEjXyn6 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-IW1a9lybnBEjXyn6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-IW1a9lybnBEjXyn6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-IW1a9lybnBEjXyn6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-IW1a9lybnBEjXyn6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-IW1a9lybnBEjXyn6 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-IW1a9lybnBEjXyn6 .marker.cross{stroke:#333333;}#mermaid-svg-IW1a9lybnBEjXyn6 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-IW1a9lybnBEjXyn6 .mermaid-main-font{font-family:"trebuchet ms",verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-IW1a9lybnBEjXyn6 .exclude-range{fill:#eeeeee;}#mermaid-svg-IW1a9lybnBEjXyn6 .section{stroke:none;opacity:0.2;}#mermaid-svg-IW1a9lybnBEjXyn6 .section0{fill:rgba(102, 102, 255, 0.49);}#mermaid-svg-IW1a9lybnBEjXyn6 .section2{fill:#fff400;}#mermaid-svg-IW1a9lybnBEjXyn6 .section1,#mermaid-svg-IW1a9lybnBEjXyn6 .section3{fill:white;opacity:0.2;}#mermaid-svg-IW1a9lybnBEjXyn6 .sectionTitle0{fill:#333;}#mermaid-svg-IW1a9lybnBEjXyn6 .sectionTitle1{fill:#333;}#mermaid-svg-IW1a9lybnBEjXyn6 .sectionTitle2{fill:#333;}#mermaid-svg-IW1a9lybnBEjXyn6 .sectionTitle3{fill:#333;}#mermaid-svg-IW1a9lybnBEjXyn6 .sectionTitle{text-anchor:start;font-family:'trebuchet ms',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-IW1a9lybnBEjXyn6 .grid .tick{stroke:lightgrey;opacity:0.8;shape-rendering:crispEdges;}#mermaid-svg-IW1a9lybnBEjXyn6 .grid .tick text{font-family:"trebuchet ms",verdana,arial,sans-serif;fill:#333;}#mermaid-svg-IW1a9lybnBEjXyn6 .grid path{stroke-width:0;}#mermaid-svg-IW1a9lybnBEjXyn6 .today{fill:none;stroke:red;stroke-width:2px;}#mermaid-svg-IW1a9lybnBEjXyn6 .task{stroke-width:2;}#mermaid-svg-IW1a9lybnBEjXyn6 .taskText{text-anchor:middle;font-family:'trebuchet ms',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-IW1a9lybnBEjXyn6 .taskTextOutsideRight{fill:black;text-anchor:start;font-family:'trebuchet ms',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-IW1a9lybnBEjXyn6 .taskTextOutsideLeft{fill:black;text-anchor:end;}#mermaid-svg-IW1a9lybnBEjXyn6 .task.clickable{cursor:pointer;}#mermaid-svg-IW1a9lybnBEjXyn6 .taskText.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-IW1a9lybnBEjXyn6 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-IW1a9lybnBEjXyn6 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-IW1a9lybnBEjXyn6 .taskText0,#mermaid-svg-IW1a9lybnBEjXyn6 .taskText1,#mermaid-svg-IW1a9lybnBEjXyn6 .taskText2,#mermaid-svg-IW1a9lybnBEjXyn6 .taskText3{fill:white;}#mermaid-svg-IW1a9lybnBEjXyn6 .task0,#mermaid-svg-IW1a9lybnBEjXyn6 .task1,#mermaid-svg-IW1a9lybnBEjXyn6 .task2,#mermaid-svg-IW1a9lybnBEjXyn6 .task3{fill:#8a90dd;stroke:#534fbc;}#mermaid-svg-IW1a9lybnBEjXyn6 .taskTextOutside0,#mermaid-svg-IW1a9lybnBEjXyn6 .taskTextOutside2{fill:black;}#mermaid-svg-IW1a9lybnBEjXyn6 .taskTextOutside1,#mermaid-svg-IW1a9lybnBEjXyn6 .taskTextOutside3{fill:black;}#mermaid-svg-IW1a9lybnBEjXyn6 .active0,#mermaid-svg-IW1a9lybnBEjXyn6 .active1,#mermaid-svg-IW1a9lybnBEjXyn6 .active2,#mermaid-svg-IW1a9lybnBEjXyn6 .active3{fill:#bfc7ff;stroke:#534fbc;}#mermaid-svg-IW1a9lybnBEjXyn6 .activeText0,#mermaid-svg-IW1a9lybnBEjXyn6 .activeText1,#mermaid-svg-IW1a9lybnBEjXyn6 .activeText2,#mermaid-svg-IW1a9lybnBEjXyn6 .activeText3{fill:black!important;}#mermaid-svg-IW1a9lybnBEjXyn6 .done0,#mermaid-svg-IW1a9lybnBEjXyn6 .done1,#mermaid-svg-IW1a9lybnBEjXyn6 .done2,#mermaid-svg-IW1a9lybnBEjXyn6 .done3{stroke:grey;fill:lightgrey;stroke-width:2;}#mermaid-svg-IW1a9lybnBEjXyn6 .doneText0,#mermaid-svg-IW1a9lybnBEjXyn6 .doneText1,#mermaid-svg-IW1a9lybnBEjXyn6 .doneText2,#mermaid-svg-IW1a9lybnBEjXyn6 .doneText3{fill:black!important;}#mermaid-svg-IW1a9lybnBEjXyn6 .crit0,#mermaid-svg-IW1a9lybnBEjXyn6 .crit1,#mermaid-svg-IW1a9lybnBEjXyn6 .crit2,#mermaid-svg-IW1a9lybnBEjXyn6 .crit3{stroke:#ff8888;fill:red;stroke-width:2;}#mermaid-svg-IW1a9lybnBEjXyn6 .activeCrit0,#mermaid-svg-IW1a9lybnBEjXyn6 .activeCrit1,#mermaid-svg-IW1a9lybnBEjXyn6 .activeCrit2,#mermaid-svg-IW1a9lybnBEjXyn6 .activeCrit3{stroke:#ff8888;fill:#bfc7ff;stroke-width:2;}#mermaid-svg-IW1a9lybnBEjXyn6 .doneCrit0,#mermaid-svg-IW1a9lybnBEjXyn6 .doneCrit1,#mermaid-svg-IW1a9lybnBEjXyn6 .doneCrit2,#mermaid-svg-IW1a9lybnBEjXyn6 .doneCrit3{stroke:#ff8888;fill:lightgrey;stroke-width:2;cursor:pointer;shape-rendering:crispEdges;}#mermaid-svg-IW1a9lybnBEjXyn6 .milestone{transform:rotate(45deg) scale(0.8,0.8);}#mermaid-svg-IW1a9lybnBEjXyn6 .milestoneText{font-style:italic;}#mermaid-svg-IW1a9lybnBEjXyn6 .doneCritText0,#mermaid-svg-IW1a9lybnBEjXyn6 .doneCritText1,#mermaid-svg-IW1a9lybnBEjXyn6 .doneCritText2,#mermaid-svg-IW1a9lybnBEjXyn6 .doneCritText3{fill:black!important;}#mermaid-svg-IW1a9lybnBEjXyn6 .activeCritText0,#mermaid-svg-IW1a9lybnBEjXyn6 .activeCritText1,#mermaid-svg-IW1a9lybnBEjXyn6 .activeCritText2,#mermaid-svg-IW1a9lybnBEjXyn6 .activeCritText3{fill:black!important;}#mermaid-svg-IW1a9lybnBEjXyn6 .titleText{text-anchor:middle;font-size:18px;fill:#333;font-family:'trebuchet ms',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-IW1a9lybnBEjXyn6 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid 后续有新的体会再续作反正微服务升级改造也比较简单但是需要对老系统的原来业务非常清晰组件的使用非常清楚才能更好的把我新的微服务的功能设计