Spring应用程序可以依赖Kubernetes及其部署的功能来提供所需的云服务,从而在Kubernete上实现高效开发。这包括消息队列、数据库、持久性存储和缓存等服务。
服务注册表
微服务架构通常意味着在私有云、混合云或公共云中动态扩展单个服务,在这些云中,主机的数量和地址通常无法预先预测或静态配置。在Kubernetes中,服务复制和扩展是一项核心功能。这意味着客户端不需要保留缓存,也不需要考虑服务注册表本身的故障。例如,Netflix Ribbon(通常与Spring应用程序一起使用)可以声明性地配置为使用Kubernetes而不是服务注册表,而无需更改任何代码。
负载平衡
对于Spring应用程序中对无状态服务的客户端调用,高可用性(HA)转化为需要从服务注册表中查找服务,并在可用实例之间进行负载平衡。Kubernetes提供了一个服务调用将被负载平衡并重定向到适当实例的地址。在Kubernetes集群,服务名称解析为此群集IP地址,并可用于访问负载平衡器。对于来自外部的呼叫和不希望通过路由器的呼叫,可以为服务配置外部IP地址。
容错性
微服务的高度分布式特性意味着随着此类远程调用数量的增加,远程调用失败的风险更高。从历史上看,像断路器一样实现容错模式的负担已经落在了开发人员身上。然而,像这样的项目Istio公司实现了服务网可以减轻此负担,并对集群中运行的Spring服务提供更大的操作控制。
外部化配置
外部化的配置管理解决方案可以为配置文件、命令行参数和环境变量的典型组合提供一种优雅的替代方案,这些配置文件、指令行参数以及环境变量用于使应用程序更具可移植性,并减少对外部更改的响应。Kubernetes配置地图可以用于存储细粒度信息,如单个属性,或粗粒度信息,如整个配置文件或JSON blob。它们提供了使用配置数据注入容器的机制,使配置与使用@ConfigProperty等注释的Spring应用程序分开,但可以访问这些应用程序。
分布式跟踪和应用程序指标
尽管它有很多优点微服务体系结构可能很难进行分析和故障排除。每个业务请求都会在各个层上生成对单个服务的多个调用,以及在各个服务之间产生多个调用。分布式跟踪将所有单个服务调用联系在一起,并通过唯一生成的ID将它们与业务请求关联。此外,度量使Spring应用程序能够公开应用程序级数据,从而能够对应用程序的状态进行细粒度检查。跟踪工具,如耶格尔,与指标堆栈相结合普罗米修斯和格拉瓦纳为监测和排除Kubernetes上Spring应用程序的故障奠定了坚实的基础。