?? 如何将“分布式”、“服务化”技术在开发ERP中实战应用 - 傲鹏ERP狗亚体育app地址管理软件 狗亚体育app地址,亚博2018电脑版,yabo亚博优惠

如何将“分布式”、“服务化”技术在开发ERP中实战应用

来源:傲鹏ERP 发布时间:2019-01-05 10:13:17 点击:14311次 作者:傲鹏erp文工


自主开发ERP狗亚体育app地址,狗亚体育app地址主要功能模块无非是订单管理、商品管理、生产采购、仓库管理、物流管理、财务管理等等。作为一个管理狗亚体育app地址,大家的一般开发习惯就是使用.Net或Java技术,建立一个单块(单进程)架构的应用,只有一个SQLServer或MySql数据库。然后在项目文件中分一下各个模块,三层结构方式组织代码编写开发。最后测试,交付上线。开始因为数据量不大,狗亚体育app地址性能还不错,各种列表查询,报表查询,Excel数据导出功能等用的都很流畅。但是随着公司业务发展,订单量日积月累,后期各种业务部门的报表查询、数据导出需求不断增多,我们渐渐就感觉狗亚体育app地址运行越来越慢。起初解决想法优化数据库。我们可能的一种尝试就是将数据库单独放置到一个服务器,实现数据库和应用程序分离,或者是建立各种数据库表索引,优化程序代码等方法。经过这样优化,狗亚体育app地址某些功能可能性能的确大大提高,但是我们还是发现某些功能列表的数据查询导出依然很慢,或者随着数据量继续积累,原来较快的列表导出功能,也愈来愈变得缓慢了。有人会说拆分。但ERP狗亚体育app地址并发量不高,主要是业务复杂,各种业务耦合度远高于那些互联网应用,数据查询逻辑要远比互联网狗亚体育app地址复杂,一个列表页查询出来的数据,往往需要关联4、5张表才能得到结果。有些报表类的甚至更多。加上各种业务操作事务性、数据一致性要求很高,无法拆分。

解决方法是采用互联网思维我们不要去做一个大一统的狗亚体育app地址了。把他们一个个小狗亚体育app地址。然后通过狗亚体育app地址接口让这些小狗亚体育app地址相互通信。这样来组成一个大狗亚体育app地址,具体来说就是“分布式”、“服务化”的互联网思维。让狗亚体育app地址在架构设计上就是一个先天支持高度可扩展的狗亚体育app地址。

怎么做呢?具体来说就是要将订单管理、商品管理、生产采购、仓库管理、物流管理、财务管理拆分成一个个子狗亚体育app地址。这些子狗亚体育app地址可以单独设计开发,对外暴露出各种其他子狗亚体育app地址需求的数据接口即可。每个子狗亚体育app地址都有单独的数据库。甚至这些子狗亚体育app地址可以交由不同的团队去开发和维护,使用不同的技术体系,使用不同的数据库。而不是再像以前那样,都集成在同一个大而全的狗亚体育app地址中,一个大而全的数据库。他有什么优点呢?

1、解决狗亚体育app地址的性能问题:

以往数据库实例只有一个,没法扩展出多个实例,以便在性能受限的情况下依靠增加数据库实例来达到负载均衡。也许有人会说可以使用读写分离方案,但是因为ERP狗亚体育app地址的特点,这个方案很多时候不现实。比如说操作库存的时候,你不能从读库里读库存,然后在写库里写入库存。因为主从复制会有时效性,写入的库存并不能马上写入从库。这样的场景在ERP中也有多处。何况写库不能扩展,只能有一个。而新设计方案是写库是分离的,每个子狗亚体育app地址有自己的数据库。

2、更新非常方便:

各个子狗亚体育app地址以后台微服务的方式存在。前台一个单独的web项目,这个web项目调用后台这些子狗亚体育app地址的服务接口。这样的设计,在某个业务子狗亚体育app地址需要更新的时候,可以单独更新。不用像以前那种单进程架构时,一个小更新需要整个狗亚体育app地址重启,导致用户会话也丢失,用户需要新登录。而现在的这种设计就不会有这个问题。

狗亚体育app地址整体设计

狗亚体育app地址物理部署视图


如何在开发ERP中使用“分布式”、“服务化”技术

详细设计

拆分应用层

拆分应用层,是践行“微服务”架构的理念。将原来大而全的单进程架构按照业务模块拆分成可独立部署的应用程序,以此来达到平滑狗亚体育app地址更新、升级、方便负载扩展的目的。具体来说,技术上可以使用restfull风格的接口,也可以使用像java中dubbo框架方式来简化开发复杂度。ERPWeb端或其他移动端也是一个单独的应用充当表现层。非常薄,只是简单的接受参数,调取后台其他各种微服务程序的接口获取所需展示的数据。微服务充当业务逻辑层,每个微服务都是可独立部署上线的程序,对外提供数据访问接口。

微服务可以使用流行的各种RPC框架,比如dubbo,可以支持多种调用协议Http、TCP等,这些框架使得编码比较容易,框架封装底层数据通信细节,使得客户端执行远程方法如同执行本地方法一样简单。

dubbo微服务架构,还支持服务治理,负载均衡等功能。这样不仅可以提高狗亚体育app地址的可用性,还能动态提升狗亚体育app地址应用层的性能。比如仓库管理中入库业务非常繁忙,占用非常多的CPU和内存资源,我们可以另外加一台机器,单独再部署一个仓库管理服务上去。这样使得整个狗亚体育app地址,有两个仓库管理服务在同时工作,平衡负载。而这一切都是在服务注册中心,比如Zookeeper下自动完成的。

微服务结构,天生很好的支持狗亚体育app地址更新升级操作。比如财务模块有个新需求需要上线,我们只需要替换财务模块的服务重启即可。这对已经登录狗亚体育app地址的用户来说,没有多少影响,不用重新登陆狗亚体育app地址,其他模块服务使用也不受影响。

拆分数据层

数据库瓶颈是ERP狗亚体育app地址的永久之伤。大量复杂的数据查询表连接逻辑充斥着整个狗亚体育app地址。数据库垂直拆分成功的关键就是如何重新设计狗亚体育app地址数据层各个模块相互耦合的问题。能解决这个问题,永久之伤便可以解决了。

我们先来看一个典型数据层模块耦合问题。需求是展示物料库存,列表字段:物料编号、物料名称、品类、仓库、数量

物料表:


如何在开发ERP中使用“分布式”、“服务化”技术

库存表:


如何在开发ERP中使用“分布式”、“服务化”技术

品类和仓库表省略。。。

很显然,传统一个数据库中,我们只需要简单的join操作,即可关联这两张表,外加关联品类和仓库表即可查询出我们所要的数据。但是现在我们的架构中,物料表和商品表不在同一个数据库实例中,我们不能使用join操作了,那我们该怎么实现需求呢?

新的架构,只允许我们通过对方的服务接口来获取数据,不能直接关联对方服务的私有数据库。至少从架构上,服务化角度来说不能直接访问对方服务的数据库。这种情况下,假设web模块子狗亚体育app地址调用仓库子狗亚体育app地址来获取数据,则我们需要在仓库模块中创建一个service方法来装配这些数据。然后返回给web子狗亚体育app地址。如下图所示,仓库管理方法首先获取本地库存表的物料编码、和仓库表的仓库名称字段信息,并且分页完后最终准备返回20条数据到Web模块前,将这20条数据中的物料ID作为参数请求商品模块子狗亚体育app地址,商品子狗亚体育app地址返回这20个物料ID相关的商品信息给到仓库管理模块,然后仓库管理模块重新组装上列表所需的物料名称和品类两个字段数据,实现最终要返回给Web子狗亚体育app地址的数据。


如何在开发ERP中使用“分布式”、“服务化”技术

也许你会说,这太麻烦了,这种方法的性能肯定没有直接join来的高,解决不了性能问题。咋看起来好像是这么回事,但是仔细考虑看看,在狗亚体育app地址并发量低、数据量小、业务不算繁忙的环境下,的确性能还不如传统一个数据中join方式来的快速。但我们想想以后吧!我们现在的架构设计是将一个数据库拆成多个数据库,每个数据库可以运行在单独的服务器上去,这样以后就能负载数据库的压力了。整体来说这样才能不会让数据库成为未来业务繁忙时候的性能瓶颈了。想想都觉得让人兴奋不已,是不是?

这时候有人又会问,那以后狗亚体育app地址数据量、业务更大了,连你这个拆分成几个数据库还不够用怎么办呢?我的方法是,可以基于拆分的数据库,单独每个库可以做读写分离、使用缓存等。甚至可以继续拆分下去,将子狗亚体育app地址再次拆分成多个孙子狗亚体育app地址。视业务模块繁忙程度而定。

报表狗亚体育app地址

有人又会问,有些列表查询逻辑非常复杂,关联十多张表,如果按上述方法拆分数据,那简直是灾难啊!是的,你说的没有错。这种情况下我的方案是将这种更加复杂的报表级别的数据查询展示需求,可以单独做个报表狗亚体育app地址。报表数据库设计采用数据仓库方式。为了更高的读取性能,我们可以将数据库表设计成很多冗余字段方式也就是反范式设计,以及建立非常多的组合索引。

这种狗亚体育app地址成功的关键就是数据和主ERP狗亚体育app地址业务库的同步问题了。一般可以写一个定时同步程序,将ERP主业务狗亚体育app地址的数据经过帅选、转化等方式直接生成报表视图所需的最终或中间数据,简化关联查询。报表狗亚体育app地址也可以采用微服务架构设计。如下图所示:


如何在开发ERP中使用“分布式”、“服务化”技术

如果报表所需的数据要求实时的,我们可以让ERP狗亚体育app地址业务操作时,触发同步数据的请求,实时同步至报表库。

分布式事务

也许有人又又问了,ERP狗亚体育app地址很多操作都要求事务性,你拆分狗亚体育app地址后怎么实现事务性,保障数据一致性呢?

这个问题很好,也是我决定写这篇文章前思考的最后一个问题。在微服务架构中,实现夸服务的事务并不容易,至少不像本地应用使用本地数据库事务那样方便,性能高效,数据一致性好。

也许你听过分布式事务这个概念。有两种情景,一种是一个应用中使用多个数据库,为保障数据一致性,需要使用分布式事务。还有一种情况就是针对我们这个架构而言的。微服务环境下的分布式事务,具体来说打个比方。采购入库这个操作设计在仓库管理服务中。入库后,需要更新采购子狗亚体育app地址中的采购单中的入库数量。这个过程要求数据一致性,也就是采购单入库成功后写入了库存表中的数量,同时要更新采购单表中的入库数量。我们不能直接在仓库服务中去访问采购服务中的数据库,必须通过采购服务提供的服务接口才行。如果这样,我们怎么能保证数据一致性呢?因为很有可能库存表写入成功,但调取采购服务写入采购单数据时失败了。可能是网络问题原因导致的,这样数据就不一致了。

在分布式事务技术中,有实现最终一致性这么一说,意思就是只要我能保证两边数据最终实现了一致性就行,不一定要使用事务。这样说来就有方案了。如仓库子狗亚体育app地址在处理采购入库时需要增加入库单数据和更新库存数据等多个表。这多个表都在仓库子狗亚体育app地址中,我们可以使用一个本地事务来保证仓库子狗亚体育app地址中的表数据一致性。然后调用采购子狗亚体育app地址更新采购单里的入库数量。为了防止这个过程突然中断导致调用失败,我们考虑增加一个消息队列中间件如ActiveMQ。如果接口返回失败我们就往MQ里写入这个处理请求,等到采购子狗亚体育app地址恢复正常后,MQ通知采购子狗亚体育app地址处理这个更新操作。由于消息消费掉以后不会再有通知了,采购子狗亚体育app地址处理过程中发生异常导致更新失败,需要将问题写入本地的日志库,以便通知管理员做后续补偿处理。就这样通过各种办法来达到数据的最终一致性即可。虽然听上去有点坑,但这就是解决方案。没有其他更好的了。或者更新失败后重新调用仓库子狗亚体育app地址回滚入库单和库存数据,达到最终一致性!如图所示:


如何在开发ERP中使用“分布式”、“服务化”技术

更多erp相关,请点击百度搜索:ERP

傲鹏ERP狗亚体育app地址二维码

常见问答

  • 你们的erp可以智能制造?

    要上我们的MES狗亚体育app地址,更多详情请与顾问联系

  • 你们实施erp一般是多久?

    这个要你看购买多少模块,一般都要三个月以上,主要要看你们的基础资料的准备的情况的,管理规划,标准化程度的公司实施就很快的,三个月都能上线

  • 你们ERP是怎么收费的?

    我们收费是模块+用户许可+服务人天,费用从几万到百万,根据客户具体需求具体情况具体分析,可联系顾问沟通13822145811 文工

  • 我们怎样判断用什么ERP狗亚体育app地址才是是最适合自身企业的?

    在选型过程中首先要知道自己要什么,这个需求要清楚,这是最核心的。然后自己预算多少钱,erp从几万到几千万,适合自己的就是最好的

  • 上了你们的erp,库存是不是就准了?

    那不一定,要看你录入的数据是否准确,如果能保证录的数据是准确的,库存也准了

  • erp狗亚体育app地址可以自学不?

    我们的傲鹏普及版可以的,我们提供了视频,在线文档,还提供了二个并发,你可以下载学习并使用

相关评论

  • 来自[广州客户]的点评

    我们是上市公司,也是用的傲鹏的erp,从10年开始,用了好多年了,唯一不足的不能集团模式,不能做到一个帐套多个公司的

  • 来自[中山客户]的点评

    傲鹏中山也有服务人员,那个小个子的李工很厉害,问题到哪都能解决,晚上找他他也在

  • 来自[广州客户]的点评

    傲鹏erp的灵活性很强,可以自定义sql和界面等等

  • 来自[湖南客户]的点评

    我们用了深圳傲鹏的erp,总体不错,服务到位,小bug还是有

  • 来自[佛山客户]的点评

    傲鹏的销售弱,直男,但顾问就不错了,很贴心的帮助我们

  • 来自[广州客户]的点评

    我们选型时,找了很多家,他们都是代理商来做,只有傲鹏是分公司来实施的,我们的公司有些行业特性,需要二次开发,傲鹏在集成这块是不错的,打通了crm 商城,价格也不贵

上一篇:已经没有了下一篇:已经没有了

erp狗亚体育app地址开发相关文章