服务的状态

67 阅读1分钟

无状态的服务 Stateless

无状态的服务被当作分布式服务设计的最佳实践和铁律。因为无状态的服务对于扩展性和运维太方便。没有状态的服务,可以随意地增加和减少结点,同样可以随意地搬迁。而且,无状态的服务可以大幅度降低代码的复杂度以及 Bug 数,因为没有状态,所以也没有明显的“副作用”。

为了做出无状态的服务,通常需要把状态保存到其他的地方。比如,不太重要的数据可以放到 Redis 中,重要的数据可以放到 MySQL 中,或是像 ZooKeeper/Etcd 这样的高可用的强一致性的存储中,或是分布式文件系统中。

为了做成无状态的服务,会导致这些服务需要耦合第三方有状态的存储服务。一方面是有依赖,另一方面也增加了网络开销,导致服务的响应时间也会变慢。

有状态的服务 Stateful

有状态的服务好处:

  • 数据本地化(Data Locality) 。一方面状态和数据是本机保存,这方面不但有更低的延时,而且对于数据密集型的应用来说,这会更快。
  • 更高的可用性和更强的一致性。也就是 CAP 原理中的 A 和 C。

此文章为3月Day21学习笔记,内容来源于极客时间《左耳听风》,强烈推荐该课程!