SpringCloud核心问题
在微服务架构中一个非常棘手的问题是:一个实体类在不同系统中是否唯一?
方案一
-
一个实体类在多个系统中存在
-
优点:
这样可以极大的降低进程之间通讯的频率 -
缺点:
每次更新数据结构都需要在所有引用了被更新字段的程序中进行更新,这会造成一个项目的更新引发多个项目都需要全部重启。当然,如果更新的表字段不影响当前进程的业务,可以先更新项目(开发测试环境)中的实体类,待下次系统上线再一并更新线上系统。再者,这种方案在项目体积日益庞大必须分库时,需在各个系统中从底层分解,带来的工作量的巨大且完全没有必要的。
-
方案二
-
一个实体类在多个系统中唯一,在客户端创建VO接收来自服务端的对象
-
优点:
如果更新的字段影响当前进程的业务,只需要更新客户端的VO及唯一的服务端实体类,如果更新的字段不影响当前进程的业务,则只需更新唯一的服务端实体类。且不影响分库 -
缺点:
增加进程之间通讯的频率,增加团队之间协作的成本
-
总结
笔者认为,以上方案一是不可取的,对项目维护极其不利。方案二虽然增加了通讯的开销,也增加了团队之间的协作成本,但能用得起这种大型架构的公司其数据量和规模可想而知,也是各大厂在使用的方案。