在互联网应用中,同一业务库通常会有很多依赖,比如58速运的订单依赖的业务系统有司机系统,用户系统,结算,优配系统,多个后台系统……。这么多系统依赖它,都会对数据进行查询和修改操作,那么引申出下面问题:
1.多个系统对数据修改,出现数据写冲突怎么办?
2.数据量的增长,查询越来越成为瓶颈,要分库分表怎么办?
3.要加查询实时缓存,多个系统对数据更改,感觉越来越复杂。
上述问题,问题1,有人说通过加分布式锁或者乐观锁。缺点:每个系统都加锁导致系统间锁的耦合越来越多,一个锁出了问题,改动可能涉及到多个系统修改,改动复杂度高。
问题2,业务系统和数据库耦合得多,导致数据的迁移不能灵活应对。
问题3,如果我要对主键查询做缓存,像实时更新缓存,加一个缓存key,每个系统修改数据都要对缓存key做过期处理,同样增加了系统对key的耦合。
那么有没有一种方式可以解决上述问题,屏蔽业务系统对数据操作的复杂性。我们需要把业务系统和数据库脱离耦合。假设我们抽取出数据服务层,上层业务系统不关心对数据的存取和操作,只需要调接口。对数据的操作锁,缓存数据操作数据分片路由都交给数据服务层去做。