1
mactaew 2014-02-16 18:47:12 +08:00 via Android
做一套通用的操作api,两个系统都调用这个来进行操作。
|
2
wodemyworld OP @mactaew 那像CM这种模块,他是依赖于UM的,那么在CM中需要缓存UM中的用户信息么,那么如果UM中删除某用户,而CM又在做某种对用户信息的纪录,那么他们之间的缓存也是要做同步的吧,毕竟数据的一致性要保证的
|
3
saharabear 2014-02-16 19:25:02 +08:00
都用。
如果是一套程序的多个子程序,那么可以用统一的数据处理接口来操作同一个数据库。 如果是不同程序的多个程序,那么可以用API的方式。 |
4
saharabear 2014-02-16 19:25:40 +08:00
@wodemyworld 你的系统是单向依赖还是双向依赖?如果是单向依赖,把“用户”当成资源,加上OAuth再做集成就OK了。
|
5
seeker 2014-02-16 20:10:01 +08:00
好问题!
我在做的人力资本管理系统的薪酬模块,也是都用. 数据库是一个数据库,应用程序靠自觉不update别人的表,但是可以join,比如一些基本的信息,用户名,用户信息,组织架构之类的. 如果要更新别人的数据,调用别的模块的procedure,或者webservice. 给楼主参考,不知道楼下盆友们是怎么做的。 |
6
mactaew 2014-02-16 21:22:21 +08:00 via Android
@wodemyworld 两个模块对应操作的都是数据库的记录,为什么需要缓存呢?如果没有缓存的话,就是说所有模块对用户进行操作的时候都是对应操作同一条记录才对吧,应该没有一致性的问题的吧。不妨说说为什么要做缓存吧。
|
7
wodemyworld OP @mactaew 还是拿那个例子来说吧,如果采用api的形式,CM本身访问访问不到UM的表,只能通过api来获取,但获取到的用户信息需要保存到CM里做缓存,不可能是个请求就得去访问UM,如果那样的话性能很成问题,所以在CM方做缓存是有必要的
|
8
wodemyworld OP @seeker 恩,你属于第一种方式,目前也还是在探讨如果其他应用集成到公用模块上来的话,基于对方的“不可信”,不能贸然直接给对方访问自己的数据表(例如很多字段是保密性的内容,顶多给他个部分字段的view)。
目前考虑引入共享的内存缓存了(如redis)。。。。 @saharabear 多数是单向,一方面用户作为资源,另一方面但资源改动,也会影响到对方应用;Oauth只是方式,问题是数据怎么存储能让性能不会有太大损耗 |
9
saharabear 2014-02-16 23:27:06 +08:00
@wodemyworld 用共享内存缓存呗。
|
10
mactaew 2014-02-17 01:10:21 +08:00 via Android 1
@wodemyworld 个人是认为一个企业的考勤系统对数据库的读写量应该不至于形成性能瓶颈的。如果真的有高并发读写的话,用内存级缓存就ok了。至于一致性问题,觉得可以是这样:用(带权限控制的)api来进行(缓存)数据读写,然后用定时守护进程(使用缓存数据)对数据库进行事务提交来更新数据。
即由内存缓存,权限控制的api和时钟守护进程构成一个中间件来完成功能模块和数据库之间的沟通。 |