事务的功能削减
因为在微服务系统中,数据库往往不是一个,因为使用同一个数据库就容易出现数据库事务死锁。
假设用户下单需要经过三个系统:用户系统、订单系统、钱包系统,三个系统共用一个数据库。假设有新手偷懒,在钱包系统中直接查询了订单数据也使用了事务。
于是在用户下单时候,订单系统为了保障库存的扣除启用了订单事务,经过钱包系统时候,扣除余额也 使用了事务。两个系统的事务就造成了死锁,接口直接崩溃。
所以从一开始应该从根本上直接避免这个情况,而且分库优点也有很多。
1. 稳定;多个数据库服务器,防止个体服务造成的数据库崩溃引起的大范围雪崩
2. 性能;数据分为多个数据库,可以根据服务的重要性分到不同的云服务器,自然获得更好的性能
3. 安全;各自项目使用各自的数据库,自然不会出现数据安全问题
单体应用与分布式项目的设计思想。
单体应用优缺点
单体应用最出色的应该就是Java的那套了。优点很多:
1. 代码复用方便
2. 运维系统复杂度低
3. 无服务间的网络开销即性能更好
缺点一样多:
4. 屎山越堆越高
5. 代码越多,复杂性越高,开发人员要求越高
微服务项目优缺点
优点:
1. 由于单个服务的代码量小,所以单个服务的复杂度很低,开发容易,代码优化(重构)方便。
2. 对普通开发人员要求低,对核心开发要求高。
3. 扩展容易、功能复用性高。
缺点:
4. 性能一定会削减,毕竟有网络开销
5. 系统维护复杂度高,有Kubernetes后容易了很多
6. 系统Debug难度高,途径系统太多,没有好的监控系统不好排查问题。需要加入链路追踪增强
7. 系统开发难度对核心开发人员要求高,需要有高级开发带领开发需求,跨服务建设。