【大数据】事件驱动的微服务架构

  • 时间:
  • 浏览:1
  • 来源:大发彩神在线计划—大发彩神计划怎么来的

最近小编2个劲在接微服务转型的咨询Case,许多企业可能开始英语 着手了,但中途发现从各个微服务的数据库中做跨表查询是个问题报告 报告 ,尤其当数据库自动分表存储却说我 。随便说说从数据库设计的下行速率 ,独立的数据库有三种能不到更好地解耦微服务架构,但不难 保证数据的一致性,或者每个微服务治理团队需要维护本人的数据库,例如备份、升级等等。相较而言,共享数据库能不到统一所有微服务的录入标准,不想带来数据一致性问题报告 。

今天你们讨论的都不 你你这个 ,回到你们设计数据库的初衷,可能这样 记录每一笔交易,你们需要2个多数据库来记录数据的当前情形,但现在你们有了大数据平台和分布式的消息总线,你们可能有能力记录每条交易,通过简单的统计算法能够不到得到实时的统计数据,原来们还需要数据库么?



小编认为伴随着微服务的应用思维,微服务的数据思维也应该2个多多质的提升,作为松耦合的服务,微服务具有以下2个多特点:

独立部署

有被委托人的数据架构(Schema)

数据不到通过被委托人的微服务API接口访问

回到最初得话题:可能不到不到将服务的事件全部记录下来,原来们只需要存储事件就行了。



上图是2个多微服务的数据存储模型,首先用户通过服务接口(一般是2个多web图形界面)原来台交互操作;或者前台将操作(比如按钮或文字输入)转化为指令传到数据写入端;写入端检查指令算是符合业务逻辑,或者生成事件(包括时间戳、事件ID,再去掉 原始指令)并以键值对将事件计入事件存储;最后事件存储将键值对事件持久化保存到NoSQL的数据库(比如MongoDB,Cassandra)中,以备读取请求的调用。



在数据读取时,用户同样与UI界面交互,一般UI界面上会预定义许多常用的查询能够不到接收用户的自定义查询;或者请求被转去掉 标准的查询得话/命令;最后分发到NoSQL数据库获取事件的统计信息。

以事件驱动来设计微服务的数据库有2个好处:

更易将领域驱动设计(Domain Driven Design,或DDD)付诸实施

DDD是4004年由著名建模专家Eric Evans提出的:任何软件开发都不 应只关注技术,业务领域才是软件开发更应关注的重点。可能每条事件都被记录下来了,许多业务之间的关联就能一目了然。比如一家医院的库房从数据库看有400箱止痛药和4000箱消炎药,但不关注事件得话永远真不知道400%的消炎药是伴随止痛药一块儿出售的。

降低服务耦合度

当微服务间有调用或依赖关系的却说我 ,某2个多服务的失效会影响到子微服务。例如服务1是2个多订单系统,服务3是客户征信系统,当用户下单时,服务1会检查服务3该用户的征信标志位,或者当服务3的API不可用时就会影响到服务1的下单。



在你你这个 情形下,能不到将服务1的订单事件日志关联到服务3的征信日志,从事件存储中获取该标志位,可能使用消息总线做事件的关联,就全部解耦了应用层面的依赖项。



在实际应用中,2个多单体购物系统能不到拆解为客户、订单、运输、退货、货品目录等多个微服务。每个微服务都与客户信息有关联,当客户系统的微服务有事件记录时,通过侦听(Reader)更新其余微服务本人的关联库就能不到了,原来即便客户系统断了,其余系统也依然能不到从现有关联库中获得客户信息,等客户系统上线了再恢复更新就行了。

打破了读写的性能瓶颈

有SQL经验的你们都不 知道,数据库的读写调优是无法一块儿完成的,在资源限定的情形下,提升读取的性能一定是以牺牲写入性能为代价的。而在事件驱动的数据模型中,写入端会始终匹配读取端的传输下行速率 ,达到最终的一致性,在有消息总线的情形下,事件会缓居于消息总线中。



提高请求并发量限制

同样的,传统数据库在处置高并发时,会将处置不过来的请求任务在应用端排队,或者你们往往能不到就看在每天上下午的高峰时刻,服务响应很快的情形。



而每个事件可能是键值对的形式传输的,这样 预定义的事务日志格式,或者通常情形下数据量非常小,在同样的传输下行速率 和磁盘IO情形下,提升了处置并发请求数的能力。当然你你这个 模式下同样能不到设立多个只读节点以提高数据读取的吞吐量。

繁杂了繁杂信息的传输

这点也是显而易见的,传统底部形态化数据库只接收定义好的字段及字段类型,需要接收新属性不到修改表底部形态,而键值对的录入形式更加灵活。