Coordination & Service Discovery #
现代应用程序由多个需要协作的独立服务组成,以向终端用户提供价值。为了协作,这些服务通过网络进行通信(参见云原生网络),而为了通信,它们必须首先找到彼此的位置。服务发现就是识别彼此位置的过程。
解决的问题 #
云原生架构具有动态性和流动性,这意味着它们在不断变化。当某个节点上的容器崩溃时,会在另一个节点上启动一个新容器来替换它。或者,当应用程序进行扩展时,副本会分布在整个网络中。没有某个特定服务的固定位置——所有服务的位置都在动态变化。此类工具用于跟踪网络中的服务,以便服务在需要时能够找到彼此。
提供的帮助 #
服务发现工具通过提供一个公共位置来查找和识别各个服务,从而解决了这一问题。此类工具基本上分为两种类型:
- 服务发现引擎(Service discovery engines):类似数据库的工具,用于存储所有服务的信息及其定位信息。
- 名称解析工具(Name resolution tools):接收服务位置请求并返回网络地址信息的工具(例如 CoreDNS)。
提示
在 Kubernetes 中,为了使 Pod 可被访问,引入了一个名为“Service(服务)”的新抽象层。Service为动态变化的Pod组提供稳定地址。
请注意,“Service”在不同的上下文中可能具有不同的含义,这可能会让人感到困惑。通常情况下,“Service”指的是容器和Pod内部的服务。它是应用程序组件或微服务,执行特定功能,例如手机的面部识别算法。
Kubernetes Service是一种抽象,用于帮助Pod之间互相发现和连接。它作为服务(功能性)的入口,表现为一组进程或Pod的集合。在Kubernetes中,当您创建一个Service(抽象)时,实际上是创建了一组Pod,这些Pod共同提供服务(位于一个或多个容器中的功能),并通过Kubernetes Service作为单一端点(入口点entry point)提供访问。
技术基础 #
随着分布式系统的日益普及,传统的 DNS 和负载均衡器常常无法跟上端点信息的变化。为了弥补这些不足,服务发现工具能够快速处理各个应用实例的注册和注销操作。一些工具(如 CoreDNS 和 etcd)是 CNCF 项目,并内置于 Kubernetes 中。其他工具则通过自定义库或工具确保服务高效运行。
Keywords #
- DNS
- Service Discovery 服务发现