服务发现和负载均衡

服务发现

脉冲云的应用都运行于容器中,各个应用容器都有自己的网络栈和IP,彼此通过名称互相访问。

例如,存在两个应用,nodejs 和 mysql,nodejs应用连接数据库时,并不需要知道mysql容器的IP地址,而是直接通过 mysql 当做主机名就可以访问了。

在脉冲云维护的容器网络中,内置了DNS解析服务,可以通过应用名称解析出应用对应的服务地址,这个机制就叫服务发现。

负载均衡

同一个应用,可以运行多个副本,比如我们有三个应用: MongoDB + Nodejs + Nginx,但是将 Nodejs 应用启动10个副本,那么每一个副本都会分配一个IP,nginx访问 nodejs 时,会将流量自动平均分发到10个Nodejs应用副本上,实现负载均衡。

这个负载均衡机制是内置的,你只需要关心应用的副本数量即可,并不需要做任何的额外设置。

服务IP

上文所述,通过解析 nodejs DNS就可以访问到NodeJS 应用,但是如果 Nodejs 存在10个副本,那么DNS解析的结果是哪一个副本的IP呢?

其实,哪个都不是,而是一个独立的、虚拟的IP,我们称之为 服务IP

我们会给开放了端口的应用分配一个服务IP,网段是 240.240.0.0/12,由于这个网段是IP协议的保留网段,所以不会和任何主机IP冲突。

nginx请求Nodejs应用时候,会连接nodejs的服务IP,比如 240.240.56.186,然后,系统会将发往此IP的流量重定向到应用副本的容器IP,比如 192.168.32.x,在重定向时,系统进行了负载均衡的实现。

由于系统只重定向了TCP和UDP流量,并未实现其他协议,所以你直接 ping nodejs 是ping不通的,因为 ping 命令是基于ICMP协议的。

results matching ""

    No results matching ""