首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三件事能让你的微服务更具有弹性

三件事能让你的微服务更具有弹性

作者头像
物流IT圈
发布2019-12-05 17:07:03
5010
发布2019-12-05 17:07:03
举报
文章被收录于专栏:物流IT圈物流IT圈

建立一个分布式微服务系统的优点是能够应对承受故障发生以及弹性使用网络资源,弹性的定义很简单,如果传统的monolith发生故障,里面的一切就不能运行了,而微服务则是将其分离成很多小组件,每个组件微服务失败故障不会影响其他。

为了真正测试这种弹性情况,Netflix使用“chaos monkey” 或类似 “混沌chaos” 策略:引入扰动到系统中目地是为了证明系统的弹性真的能面对失败。

把大块头切分成更小的碎片可以给你弹性系统的品质,但是没有一些超前想法则不行,我们将它们切分得越小,就更需要协调组合它们,或者它们依赖“下游downstream”服务数据, 函数等等. 如果这些下游服务失败了,我们的服务怎么办?

承诺和错误反馈

承诺理论(Promise theory)首先由Mark Burgess引入, 是为了描述IT系统彼此交互,系统之间或许并不如我们所希望那样有预期行为,一个服务提供发送内容需要做某事,但是也许它不是确定肯定做这个事情,这如同人与人之间交互一样,我们可以将微服务看成是独立的匿名代理,我们越尊重这种自主性,越需要了解这些系统自愿打算提供一些的服务有时会无法实现。

在微服务架构中更加要注重这种承诺理论,如果交互服务中有一个不可用怎么办?有没有回馈告诉我们?许多时候,这种反馈常常是被业务人员发现,解决方法无非是返回失败响应,或选择一个不同备份服务,总之,需要积极面对出乎意料的错误。

因此在微服务者,需要考虑多个服务调用时如果一个服务发生问题怎么办,解决这个问题方法引入:Apache Camel和Netflix Hystrix。

消费合约Consumer contracts

服务作为内容提供者进行了承诺和错误反馈,那么作为服务的消费者怎么办?

服务方提供一个合约形式,比如是描述请求和预期响应的文档或XML之类schema,消费者会确认这些文档,按照服务者同意的这份合约实现自己内部的数据模型。消费者也许与服务交互,进行序列化或反序列化转换,这时如果服务改变了合约,比如增加了新的字段内容,那么消费者这种转换过程就被迫中断,因为我们注重服务的自主性,因此这种情况出现肯定不好,我们需要将服务的变动不会对其他关系者造成脉冲扰动。

一个解决方案是基于“将保守留在服务发送方,将自由留在服务接受方”,我们只要做刚刚足够的响应验证,然后立即取出我们需要的数据,而不是试图做完整的数据验证。这意味着我们转换逻辑足够聪明到能在数据模型变化时也能工作。此外,如果我们能够捕捉到消费者真正关心的部分,将这一信息循环反馈给服务提供商,以帮助他们理解服务消费者在他们改变服务时会导致什么变化后果。这种方式称为消费驱动合约。

幂等消费者

幂等消费者就是能够在服务发生问题时,不断重试,多次重试不会对业务状态有任何影响,比如新增操作不是幂等,因为多次新增操作后业务会多一些状态。幂等消费者对应着幂等服务dempotent services.

以上三点建议可以帮助你建立弹性的微服务,虽然他们不是唯一需要考虑的设计原则。还有其他需要考虑的事情包括隔离、舱壁bulkhead模式、负载平衡、服务发现、apologies,最终一致性等等。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 驼马精英 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 承诺和错误反馈
  • 消费合约Consumer contracts
  • 幂等消费者
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档