加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 建站 > 正文

微服务的数据库设计

发布时间:2019-10-25 12:37:15 所属栏目:建站 来源:JAVA架构师之路
导读:副标题#e# 【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 单独的数据库: 微服务设计的一个关键是数据库设计,基本原则是每个服务都有自己单独的数据库,而且只有微服务本身可以访问这个数据库。它是基于下面三个原因。 优化服务接口:

Saga的原理看起来很简单,但要想正确的实施还是有一定难度的。它的核心问题在于对错误的处理,要把它完全讲明白需要另写一遍文章,我现在只讲一下要点。网络环境是不可靠的,正在执行的命令可能很长时间都没有返回结果,这时,第一,你要设定一个超时。第二,因为你不知道没有返回值的原因是,已经完成了命令但网络出了问题,还是没完成就牺牲了,因此不知道是否要执行补偿操作。这时正确的做法是重试原命令,直到得到完成确认,然后再执行补偿操作。但这对命令有一个要求,那就是这个操作必须是幂等的(Idempotent),也就是说它可以执行多次,但最终结果还是一样的。

另外,有些操作的补偿操作比较容易生成,例如付款操作,你只要把钱款退回就可以了。但有些操作,像发邮件,完成之后就没有办法回到之前的状态了,这时就只能再发一个邮件更正以前的信息。因此补偿操作不一定非要返回到原来的状态,而是抵消掉原来操作产生的效果。

微服务的拆分:

我们原来的程序大多数都是单体程序,但现在要把它拆分成微服务,应该怎样做才能降低对现有应用的影响呢?

微服务的数据库设计

我们用上面的图来做例子。它共有两个程序,一个是“Styling app”,另一个是“Warehouse app”,它们共享图中下面的数据库,库里有三张表,“core client”,“core sku”,“core item”。

微服务的数据库设计

假设我们要拆分出来一个微服务叫“client-service”,它需要访问“core client”表。第一步,我们先把程序从原来的代码里拆分出来,变成一个服务. 数据库不动,这个服务仍然指向原来的数据库。其他程序不再直接访问这个服务管理的表,而是通过服务调用或另建共享表来获取数据。

微服务的数据库设计

第二步,再把服务的数据库表拆分出来,这时微服务就拥有它自己的数据库了,而不再需要原来的共享数据库了。这时就成了一个真正意义上的的微服务。

上面只讲了拆分一个微服务,如果有多个需要拆分,则需一个一个按照上面讲的方法依次进行。

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读