分布式弹力设计之服务状态

今天我们来谈一谈服务的状态,服务的状态指的是请求是否与不同的服务实例相关。分为两种,有状态和无状态。

无状态服务重要特征是同一个输入对于每个服务实例都会有确定的相同的输出,它要求服务要么是没有存数据只有算法,要么是所有节点的数据均相同。

举个例子,例如电商系统有多个服务实例,用户登陆认证后,向购物车中加入商品和查询购物车中有哪些商品,对于这两个操作无论分配到那个具体的服务实例,都可以保证得到的数据是一致的。

无状态服务的优点?

方便横向扩展,运维简单,可以很容易地增减节点

如何实现无状态服务?

1 服务不保存数据,服务只提供算法和逻辑,那么自然就不会有状态,例如有个压缩文件的服务,他有多个实例,无论调用那个实例我们均可以得到压缩的结果。

2 服务保存请求相关的数据,同时这些数据在所有节点均相同,一般是通过引入第三方的存储,多个服务实例,依赖同一个第三方服务。这样也可以实现服务的无状态。


有状态的服务更加的常见,同一服务的不同实例所拥有的数据不一样,同样说到登陆这个场景,有状态的服务是这样的,用户一的登陆状态可能只保存在服务A中,当请求分配到服务B时,用户是未登陆的状态。那么有状态的服务就必须要保证,每个请求都能准确的落到拥有它状态的那个节点上。常用的做法用一致性hash算法,来实现请求的分配。


有状态服务的优点

1 本地保存着数据,在处理时会减少网络开销。

2 模型简单,可用性和一致性容易保证。

有状态服务如何保证请求落到同一实例上?

1 简单的hash取模,或者一致性hash

2 长连接


有状态与无状态最本质的区别在于,节点的数据是否是全量数据,无状态的服务每个节点的数据均是全量。有状态的服务则不是。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,317评论 6 13
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,950评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,281评论 19 139
  • 先做个记录~深深地感到,爱情没有工作重要
    柚子粒阅读 194评论 0 0
  • 清晨,丘吉尔同西班牙军队一同前进。开始走了好几天,一路风平浪静。后来几天里,随着逼近敌人的阵地,与反叛者便有了交锋...
    Joyce小熊阅读 219评论 0 0