我正在使用Spring Boot开发一系列微服务,并计划将它们部署在Kubernetes上。
一些微服务由将消息写到kafka队列的API和侦听器组成,这些侦听器侦听队列并执行相关操作(例如,写入DB等,构造用于后续处理的消息)。
这些服务在本地运行良好,但是我计划在Kubernetes上运行微服务的多个实例。我正在考虑以下选项:
按原样运行多个实例(即每个微服务充当API和侦听器)。
引入一个FRONTEND,BACKEND环境变量。如果FRONTEND变量为true,则不要配置侦听器进程。如果BACKEND变量为true,则配置侦听器进程。 这样一来,我可以开始扩展所需的前端/后端服务的方式,并受益于在不丢失请求的情况下关闭后端服务。
任何指针,最佳实践或任何其他选择将不胜感激。
答案 0 :(得分:2)
您可以使用环境变量进行描述,或者对使用不同的配置文件/ bean配置构建应用程序并制作两个不同的图像感兴趣。
在两种情况下,您都应该使用两个不同的Kubernetes Deployments,以便可以独立扩展和配置它们。
您可能还对Leader Election pattern感兴趣,在该{{3}}中,您只需要一个活动副本,前提是只有一个副本处理队列中的事件才有意义。也可以根据您的可用性要求仅使用一个副本来解决此问题。