当有数千个 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
那么这是如何工作的:
- Edge 将通过配置访问部分 Origin 服务器。
- 如果流不在连接的源服务器上,它会向 Edge 响应 RTMP 302 以重定向到 RIGHT 源服务器。
- 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回调,也很简单
来自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
那么这是如何工作的:
- Edge 将通过配置访问部分 Origin 服务器。
- 如果流不在连接的源服务器上,它会向 Edge 响应 RTMP 302 以重定向到 RIGHT 源服务器。
- 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回调,也很简单