平台倡导分布数据库,最简单的分库逻辑是按业务领域,例如人力资源系统一个库,客户关系管理一个库(举个例子而已,在平台正式的系统中,人力资源系统又细分为核心库、绩效管理库、薪资管理库等)。一个微服务对应单个数据源。
看过很多项目,号称是微服务架构,但是多个微服务实际上联的是同一个库;各个微服务之间实际上不相互调用,需要取数据时,直接从对应表里拿数据,从而导致有大量的重复代码(公用的表对应的实体类、数据访问层、甚至服务层)。平台不倡导这种模式。
但是万事不能绝对,有种场合必须使用多数据源。例如涉及到数据同步、数据传输的应用,就需要多数据源。平台的后台服务框架支持多数据源,只配置一个数据源时为单数据源;配置多个时就是多个。
一套架构即可以支持单数据源,也可以支持多数据源,听上去很容易,实际做起来很难很复杂。平台的技术体系是JPA+Hibernate,单数据源时很简单,根本不需要了解太多底层,事实上很多程序都不清楚底层是如何运作的。多数据源配置就很复杂,按照网上的教程配置好后,不出意外的是不能用。网上大部分东西都是你抄我,我抄你,是不是真正自己试过,我持怀疑态度。好不容易调通了,但是怎么兼容单数据源和多数据源又是问题。一个一个错误的消除,最终OK了。
平台上大部分技术都通过开源获得的,例如druid、nacos、springcloud、feign等等,平台自身的价值如何体现?其实这个问题很好理解,例如国产大飞机C919的零部件都是外购的,那C919的价值何在?系统集成不是件简单的事情。