文档章节

电子商务系统的设计与实现(六):账务系统服务化的好处和坏处

FansUnion
 FansUnion
发布于 2015/10/22 10:30
字数 1003
阅读 23
收藏 0
   账务系统服务化,参考了公司Boss的设计。不过,随着思考的深入,发现账务系统服务化也有不少坏处,对一个中小型公司,小技术团队,中小型网站来说。

   坏处
1.开发成本增大。
  服务化,需要新建一个项目。开发调试的时候,必须保证账务系统一直在运行,因此,部署的时候,账务系统也需要单独部署一次。
2.跨系统事务处理起来比较麻烦。
  目前,投标的时候,立即需要支付,即把投标和支付2个跨系统的服务,想作为一个事务。但是,目前又没有分布式事务的基础框架。
因此,折衷的办法是,把账务这种不可回滚的操作,放在最后一个执行,如果失败,就让tender投标回滚。

 但是,我发现投标和支付可以不作为一个事务。我们在电商网站购物的时候,一般都是先购物,生成订单,然后再支付,即从业务上就把某个业务和账务操作分离了,不需要在一个事务中执行。

因此,如果我们非常把账务服务化,对于咱们目前比较简单的业务场景,可以不需要跨系统的事务,在业务层面,把投标和支付分开就好了。

 但是,如果我们非要实现跨系统事务呢。当然是可以实现的。

 据说,支付宝之类的大型互联网公司,有自己的事务框架,单独的事务服务器。一个事务,往往有一个发起方和多个参与方,参与方成功或失败,都会发送“回执通知”请求。根据这些请求,最后保障事务。另外呢,事务也可能不是实时去处理的,可能会把一些要做的事情,缓冲到数据库中。然后再,定时处理这些事情,可能会需要事务。

在实际的购物网站中,跨系统事务是肯定存在的。比如,买家支付完成后,购物平台一方面要通知买家成功支付信息,另一个方面,要通知卖家可以发货了。

好处
1.方便调用接口和协作。
   多个系统之间,通过接口,可以很好地协作。
2.方便多个团队同时开发。
  比如,购物网站,账务系统和主体商城商品可以由2个团队完成。两者的开发,互相不影响。只要把接口定义好,保证接口最后的实现是符合规定的就可以了。

本系统的实际情况
我目前正在做的这个购物系统,规模比较小,开发人员也很少,把账务单独做出一个服务化的系统,感觉太麻烦了。另外,如果需要把账务和一些业务放在一个事务中,事务的实现也更简单。

有一个业务是可以确定的,购物生成订单和支付相分离,是目前比较主流的做法。

感悟
之前都是在中小型公司工作,Web系统的业务相对比较简单,不太清楚淘宝等大公司的技术做法。对于很多业务场景,根本没有考虑过技术实现。还好,这次遇到了之前在支付宝等大公司工作过的boss,从他那里了解到了,很多业务需求和技术思想。至于技术的实现,对于咱们一直搞技术的人来说,不是太难,至少,开源的技术实现已经很多了。
 CSDN2014博客之星评选,帮小雷投一票吧

http://vote.blog.csdn.net/blogstar2014/details?username=fansunion

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

共有 人打赏支持
FansUnion
粉丝 57
博文 858
码字总数 825464
作品 0
丰台
高级程序员
对于账务系统开发的一点儿理解

做支付系统建设也有一段时间了,受累于各种事务性工作,一直没有沉下心好好研究和理解下其中较为核心的部分,账务便是一个。对于开发账务系统的人来说,系统的阅读和学习一些会计知识是必须的...

orpheus
2016/03/07
0
0
反射?切面?怎样对公共参数及行为进行封装

  现在都是微服务化访问,某系统访问另一系统时,总有一些公用参数需要处理,另外还需要对访问情况进行日志打印。   调用的服务是dubbo服务,如何封装这一些公共参数而不是每次调用方法时...

等你归去来
08/09
0
0
全虚拟化和半虚拟化的区别

安装方式: 半虚拟化,支持通过 http ftp nfs 方式进行安装。 全虚拟化,支持通过 iso文件 光驱 网络pxe 安装。 利用方式: 半虚拟化可以直接利用硬件。 是和系统一样虚拟一个或几个系统 完全...

shenlongfuhuo
2014/05/03
0
0
系统架构师-基础到企业应用架构-系统设计规范与原则[上篇]

一、上章回顾 在上篇中我们讲解了几类UML2.0语言新推出的建模图形,总体来说通过这些图形能更详细的将某类信息表达出来。在这里我们简单回顾上篇讲解的内容。 上图中已经简单介绍了上章讲述的...

wbf961127
2017/11/12
0
0
分布式事务主流解决方案优缺点大pk

XA 协议在架构上与 TCC 模型相比,最大的不同是 XA 直接作用于资源层,而后者作用于服务层。 资源层更普适,并且对业务几乎没有侵入,但为了适应各种业务场景使用,需要严格遵循事务 ACID 特...

DBAplus社群
02/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Confluence 6 使用 Fail2Ban 来限制登录尝试

什么是 Fail2Ban? 我们需要在我们网站中防止密码的暴利破解。Fail2Ban 是一个 Python 的应用来查看日志文件,使用的是正则表达式,同时还可以与Shorewall (或者 iptables)直接工作来来启用...

honeymose
5分钟前
0
0
日期和时间API - 读《Java 8实战》

日期与时间 LocalDate 创建一个LocalDate对象并读取其值 // 根据年月日创建日期LocalDate date1 = LocalDate.of(2014, 3, 18);// 读取System.out.println(date1.getYear()); // 2014Sys...

yysue
5分钟前
0
0
8月15日任务

8月15日任务 Memcached命令行 • telnet 127.0.0.1 11211 • set key2 0 30 2 ab STORED get key2 VALUE key2 0 2 ab END 实例: [root@localhost 02]# telnet 127.0.0.1 11211-bash: te......

寰宇01
17分钟前
0
0
LNMP架构(Nginx访问日志、Nginx日志切割、静态文件不记录日志和过期时间)

Nginx访问日志 1.打开配置文件,搜索log_format vim /usr/local/nginx/conf/nginx.conf 2.访问日志常用变量含义 $remote_addr : 客户端IP(公网IP) $http_x_forwarded_for : 代理服务器的IP ...

蛋黄_Yolks
17分钟前
0
0
lombok 不用再写pojo的getset

java实体类不写get/set方法 1、下载地址https://projectlombok.org/download Myeclipse、eclipse安装lombok Lombok是一种Java实用工具,可以帮助开发人员消除Java的冗长,具体看lombok的官网...

木之下
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部