使用缓存和队列,微服务如何拆分和设计?

我们觉得微服务拆分和设计最重要的是实现微服务自治,如果使用缓存和队列,来解决调用性能、异步调用、服务响应时间不一等问题是个不错的主意,但该在哪个层次使用缓存?哪里使用队列(采用队列增加了层级和链路,也就增加了延时)?服务熔断如何保证其他服务不受影响?……在使用这些措施时,对微服务的拆分和设计又有哪些要求?数据一致性如何保证?……

参与8

2同行回答

尘世随缘尘世随缘技术总监上海某互联网金融公司
在高并发的场景下,缓存、队列,异步是必备的技术手段,在哪里使用缓存,这个没有一个标准的方案,但是有个约定的前提,谁提供谁负责(谁提供的服务,谁来保障服务的高可用)。这里给下我的建议:1、一切皆缓存,所有的地方都可以用缓存,如果担心因为缓存更新策略问题带来的数据不一致,那么可以...显示全部

在高并发的场景下,缓存、队列,异步是必备的技术手段,在哪里使用缓存,这个没有一个标准的方案,但是有个约定的前提,谁提供谁负责(谁提供的服务,谁来保障服务的高可用)。这里给下我的建议:

1、一切皆缓存,所有的地方都可以用缓存,如果担心因为缓存更新策略问题带来的数据不一致,那么可以使用版本号来控制数据的新鲜度。

2、哪里使用队列:用户提交一个请求后,不需要立刻返回接口给客户端,就可以使用队列来增加吞吐量,比如用户注册后送积分,没有必要立刻增加积分,而是通过队列来实现异步

3、服务熔断:是按事先约定的接口返回值来应答(非核心接口),所以不存在影响其他服务。

收起
互联网服务 · 2019-07-08
dean25dean25课题专家组软件架构设计师民生银行
微服务并不是一定要使用队列和缓存,还是要看应用的性质和类型,一些对于消息丢失或者死信很敏感的应用,比如银行的核心交易系统,就需要对通常队列的使用方式做一定改造,死信也需要处理,因为这可能对应着一笔真正的交易。从我们的实际经验看来,管理类的,非交易类的应用比较适合使用...显示全部

微服务并不是一定要使用队列和缓存,还是要看应用的性质和类型,一些对于消息丢失或者死信很敏感的应用,比如银行的核心交易系统,就需要对通常队列的使用方式做一定改造,死信也需要处理,因为这可能对应着一笔真正的交易。

从我们的实际经验看来,管理类的,非交易类的应用比较适合使用采用消息队列。实时交易类的用RPC或者Rest API可能会更好。

一个服务熔断了,依赖这个服务的其它服务肯定会受影响,但是没有依赖关系的服务应该不受影响。这也是熔断的意义所在,避免问题蔓延。

在拆分时,建议不要为了拆分而拆分,还是应该遵循高内聚、低耦合的原则。只要确实需要拆分,才做拆分。否则,微服务太多,会带来很大的管理开销。

收起
银行 · 2019-07-11

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2019-07-08
  • 关注会员:3 人
  • 问题浏览:3962
  • 最近回答:2019-07-11
  • X社区推广