创建有状态微服务的最佳方法(实践)是什么?

what are the best approaches (practices) to create stateful microservices?

我需要创建一个食品订购服务,使用微服务、可扩展、集群、几个步骤来订购。需要在步骤/请求之间存储用户数据。

保存状态和用户数据的方法是什么?存储在数据库中?缓存?共享内存? 有没有最佳实践的教程?

(我将使用 spring / spring 引导和模块)

任何您不能丢失的东西(通常是业务数据)都会进入数据库,并且可以并行缓存在内存中的数据库中,例如具有内置缓存逐出算法的 Redis。

任何东西如果丢失了也没什么大不了的(通常是与业务数据没有直接关联的技术性东西)只能放在内存数据库中。

由于您使用的是 Spring,因此您可以将 Redis 之类的东西与 Spring Data Redis 一起使用。如果 Redis 服务器出现故障,已经有 Spring 解决方案(例如 this)回退到 api 调用以从数据库中获取数据。您还可以 运行 Redis Sentinel 后面的多个 Redis 实例来提供故障转移。 Redis Cluster 提供了一种 运行 Redis 安装方式,其中数据自动在多个 Redis 节点之间进行分片。也可以配置Redis每天一次左右将数据持久化到文件系统中,备份缓存数据,用于容灾。

如果您正在寻找完全托管的服务,AWS 提供 "Step Functions" 来满足您的状态要求:https://whosebug.com/questions/tagged/aws-step-functions