大家在做多个应用集成的时候是采用共享数据库直接操作表还是通过应用程序接口?

2014-02-16 17:00:23 +08:00
 wodemyworld
例如两个应用,一个用户管理UM,一个考勤管理CM;
把CM集成到UM,可以两个应用共享一个数据库,然后就可以访问互相之间的表了,直接在表里操作;
另一种,是CM通过UM程序的开放api来进行通信,进行业务操作,即把所有操作告之给UM,然后再由UM来操作自己的数据库表们,但这一种方式有一个缺点,就是需要保证数据一致性的时候,由于无法直接访问对方数据库,因此无法对相应表进行join(或者进行事务操作),那么就得向UM发起多个请求来进行一个应用程序级的“事务”(当然在应用程序级也要自己去实现加锁),开发代价有点太大了。

请问下各位,你们在做多个应用集成的时候,涉及数据时,你们是如何做的?

学习下~:)
3416 次点击
所在节点    Python
10 条回复
mactaew
2014-02-16 18:47:12 +08:00
做一套通用的操作api,两个系统都调用这个来进行操作。
wodemyworld
2014-02-16 19:24:21 +08:00
@mactaew 那像CM这种模块,他是依赖于UM的,那么在CM中需要缓存UM中的用户信息么,那么如果UM中删除某用户,而CM又在做某种对用户信息的纪录,那么他们之间的缓存也是要做同步的吧,毕竟数据的一致性要保证的
saharabear
2014-02-16 19:25:02 +08:00
都用。

如果是一套程序的多个子程序,那么可以用统一的数据处理接口来操作同一个数据库。

如果是不同程序的多个程序,那么可以用API的方式。
saharabear
2014-02-16 19:25:40 +08:00
@wodemyworld 你的系统是单向依赖还是双向依赖?如果是单向依赖,把“用户”当成资源,加上OAuth再做集成就OK了。
seeker
2014-02-16 20:10:01 +08:00
好问题!

我在做的人力资本管理系统的薪酬模块,也是都用.
数据库是一个数据库,应用程序靠自觉不update别人的表,但是可以join,比如一些基本的信息,用户名,用户信息,组织架构之类的.
如果要更新别人的数据,调用别的模块的procedure,或者webservice.

给楼主参考,不知道楼下盆友们是怎么做的。
mactaew
2014-02-16 21:22:21 +08:00
@wodemyworld 两个模块对应操作的都是数据库的记录,为什么需要缓存呢?如果没有缓存的话,就是说所有模块对用户进行操作的时候都是对应操作同一条记录才对吧,应该没有一致性的问题的吧。不妨说说为什么要做缓存吧。
wodemyworld
2014-02-16 22:36:18 +08:00
@mactaew 还是拿那个例子来说吧,如果采用api的形式,CM本身访问访问不到UM的表,只能通过api来获取,但获取到的用户信息需要保存到CM里做缓存,不可能是个请求就得去访问UM,如果那样的话性能很成问题,所以在CM方做缓存是有必要的
wodemyworld
2014-02-16 22:59:26 +08:00
@seeker 恩,你属于第一种方式,目前也还是在探讨如果其他应用集成到公用模块上来的话,基于对方的“不可信”,不能贸然直接给对方访问自己的数据表(例如很多字段是保密性的内容,顶多给他个部分字段的view)。
目前考虑引入共享的内存缓存了(如redis)。。。。

@saharabear
多数是单向,一方面用户作为资源,另一方面但资源改动,也会影响到对方应用;Oauth只是方式,问题是数据怎么存储能让性能不会有太大损耗
saharabear
2014-02-16 23:27:06 +08:00
@wodemyworld 用共享内存缓存呗。
mactaew
2014-02-17 01:10:21 +08:00
@wodemyworld 个人是认为一个企业的考勤系统对数据库的读写量应该不至于形成性能瓶颈的。如果真的有高并发读写的话,用内存级缓存就ok了。至于一致性问题,觉得可以是这样:用(带权限控制的)api来进行(缓存)数据读写,然后用定时守护进程(使用缓存数据)对数据库进行事务提交来更新数据。

即由内存缓存,权限控制的api和时钟守护进程构成一个中间件来完成功能模块和数据库之间的沟通。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/100462

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX