指南:如何创建一个有状态的服务

    在这篇文章中,你将了解到如何使用选入(opt-in) 并发和一致性模型来创建一个可以水平扩展的有状态服务。

    这可以把开发人员从困难的状态协调、冲突解决和失败处理中解放出来,允许他们以Dapr的API形式使用这些功能。

    状态存储组件代表Dapr用来与数据库进行通信的资源。 在本指南中,我们将使用Redis作为状态存储引擎。

    See a list of supported state stores here

    当使用运行你的应用程序时,Dapr CLI会自动提供一个状态存储(Redis)并创建相关的YAML。 如果需要切换使用的状态存储引擎,用你选择的文件替换/components下的YAML文件``。

    Kubernetes

    See the instructions here on how to setup different state stores on Kubernetes.

    对于GET类型的请求,Dapr将确保存储引擎在副本间一致地返回最新的数据。 除非在对状态API的请求中另有指定,否则默认为最终一致性。

    下面的例子使用了强一致性:

    下面的例子是用Python编写的,但适用于任何编程语言。

    获取状态

    下面的例子是用Python编写的,但适用于任何编程语言。

    下面的例子是用Python编写的,但适用于任何编程语言。

    如果没有指定选项,last-write 是默认的并发模式。

    Dapr的默认模式是Last-write-wins。

    Dapr使用版本号来确定一个特定的键是否已经更新。 客户端在读取键对应的值时保留版本号,然后在写入和删除等更新过程中使用版本号。 如果版本信息在客户端检索后发生了变化,就会抛出一个错误,这时就需要客户端再次执行读取,以获取最新的版本信息和状态。

    Dapr利用ETags来确定状态的版本号。 ETags标签从状态相关请求中以头返回。

    使用ETags,当出现ETag不匹配时,客户可以通过异常知道资源在上次检查后已经被更新。

    下面的例子展示了如何获得一个ETag,然后使用它来保存状态,然后删除状态:

    下面的例子是用Python编写的,但适用于任何编程语言。

    处理版本不匹配引起的失败