中心思想:
如果分布式数据库可以做到ACID,那么就不会有微服务了。谁也不愿意去研究微服务。
所有的东西像硬币一样都具有两面性。(莫比乌斯环除外)
看技术也是一样的,首先要知道这个技术为什么要出现,解决了什么问题。然后就是他带来了什么问题,你需要知道怎么去处理这些问题。
- 新技术
- 好处是什么
- 带来的什么麻烦
- 能解决的麻烦,需要找到适合你的解决方案
- 不能解决麻烦,你能不能承受这些问题。
第一代:单体服务
- 好处:简单
- 坏处:不能拓展
第二代:复杂均衡
- 好处:应用服务可以横向扩展
- 坏处:需要解决session同步
- 引出的技术
- session共享
- redis
- 引出的技术
- 还有的问题,就是数据库是单体的,数据库的压力不能释放
第三代:读写分离
- 好处:把数据库的压力释放了一部分。
- 坏处:增加的编码的难度,需要使用不同的数据源处理
- 还有什么问题:
- 读写分离会造成读取数据的延时,
- 多服务器的时候造成出现问题概率的变大
第四代:横向分表(把一张表的数据,拆分成多个库的表,例如:历史记录可以按月拆分,或者按照hash值拆分)
- 好处:可以消除单个数据库的限制。增加了并行计算的效率。
- 坏处:统计数据时,需要增加中间层去做数据合并。
第五代:纵向拆分(微服务时代)
- 好处:可以处理大量的数据。
- 坏处:就是原来用数据库处理的事务,需要各个应用自己处理,还需要做事务补偿。大大增加了编码的复杂程度。
- 分布式事务
- 服务的熔断、降级
- 事务补偿
- 服务治理。。。。
上面是我理解的服务的演进过程,我认为还是需要根据优缺点取舍设计方案,而不是要去用什么技术。