细数到今天,拆分系统已经断断续续进行了一个月了,希望在这里整理一下,对接下来的拆分工作有益。
这里记录一下在实际工作中总结的几条原则吧,主要是达到各系统间低耦合,系统内部高内聚。
- db不能跨系统访问。自己的db自己管理,简单好维护,降低各系统间的数据耦合度。需要做成这样很多以前的联合查询都得改造。
- 各子系统要封装得足够好。所有子系统通过自己的api项目向其它子系统提供数据服务,这些api项目打包成jar包供其它子系统使用,以降低业务耦合性。
- 子系统不缓存其它子系统的数据。因为只要缓存其它子系统的数据就可能会造成数据不一致,但是这样严格做起来有一定的难度(系统间调用耗时)。所以有的时候为了性能考虑会缓存少量关键数据。比如说一个用户小李注册后,他的基本信息存在用户系统。他又申请成为了特约投稿人,那他特约投稿人的信息就存在投稿系统。如果业务系统有很多对用户不同身份而进行不同的操作,就可以把小李是特约投稿人的身份存在用户系统里,而不用每次都到投稿系统查询。
- 缓存距离用户越近越好。顾名思义就是将变动比较少的数据缓存放到http服务器上,这样可以达到最快的响应。变动比较大的数据在前端用js来请求并渲染,充分利用浏览器的性能来提高用户体验,分担服务器的压力。
- 如果数据必须不能丢失,拉比推更安全。首先拉有序列,只要有序列就可以通过记录最后一条回执来保证之前的都已获取,而不用像推送那样来记录每一条记录的回执;其次,推送需要有回执才能证明对方已经接收到,如果拉的话由自己来记录自己拿到第几条,不需要有回执这一步了。
先写这些吧,以后发现再补充。