当有数千个 SRS 实例时如何配置同事

How to configure the coworkers when there is thousands of SRS instance

来自wiki,同事的意思是“集群中其他源服务器的HTTP API”。在我们的源集群中,我是这样配置的:

vhost __defaultVhost__ {
    # The config for cluster.
    cluster {
        # The cluster mode, local or remote.
        #       local: It's an origin server, serve streams itself.
        #       remote: It's an edge server, fetch or push stream to origin server.
        # default: local
        mode            local;

        # For origin(mode local) cluster, turn on the cluster.
        # @remark Origin cluster only supports RTMP, use Edge to transmux RTMP to FLV.
        # default: off
        # TODO: FIXME: Support reload.
        origin_cluster      on;

        # For origin (mode local) cluster, the co-worker's HTTP APIs.
        # This origin will connect to co-workers and communicate with them.
        # please read: https://github.com/ossrs/srs/wiki/v3_EN_OriginCluster
        # TODO: FIXME: Support reload.
        coworkers           192.168.1.101:1985 192.168.1.102:1985 192.168.1.103:1985 192.168.1.XXX:1985;
    }
}

如果集群中有几千台SRS服务器,每台SRS服务器都应该配置很多其他源SRS服务器,对吗?

这会影响查询 http api 以在哪个 SRS 服务器中找到正确流的性能吗?如果流是同事中的最后一个,我认为它会有明显的延迟。

所以我想知道,是否有其他最佳工程实践来优化这个问题?

对于OriginCluster,一组origin作为一个集群为Edge server提供服务,像这样:

OriginA+OriginB+OriginN ----RTMP(302)---> Edge server ---RTMP/FLV--> Client

那么这是如何工作的:

  1. Edge 将通过配置访问部分 Origin 服务器。
  2. 如果流不在连接的源服务器上,它会向 Edge 响应 RTMP 302 以重定向到 RIGHT 源服务器。
  3. Edge 连接到 RIGHT 源服务器到 pull/push 流。

源服务器在配置中使用coworkers,找出具有RTMP流的RIGHT服务器。 coworkers实际上是一个服务发现,是一个HTTP服务器地址。

coworkers是一个HTTP服务器端点(ip+端口),它可以是SRS,或者任何提供相同HTTP的HTTP服务器API:

/api/v1/clusters

Response:
{
    code: 0
    data: {
        origin: {
            ip: 'xxx.xxx.xxx.xxx',
            port: xxx
        }
    }
}

Please search /api/v1/clusters about the latest cluster protocol, it might be different.

如果你有很多流和源服务器,你不应该使用 SRS 服务器作为 coworkers,相反你应该通过 Go 或 Nodejs 创建一个 API 服务器,只需要实现这个API 并使用 API:

配置每个源服务器
vhost __defaultVhost__ {
    cluster {
        mode            local;
        origin_cluster      on;

        # Config for your API server.
        coworkers           192.168.1.101:80;
    }
}

Maybe your API server got one or two address for fault-tolerance.

您的 API 服务器如何知道流?请使用HTTP回调,也很简单