SeedLink 设计用于实时数据传输。SeedLink 客户端可以只访问相对小的实时数据。另外,SeedLink 不具备查询台站数据库或仪器灵敏度的功能,不支持完全的 SEED。ArcLink 配合 SeedLink 将提供上述功能。ArcLink 协议类似于 SeedLink:基于 TCP 并使用简单 ASCII 码指令。不像 SeedLink,数据可能不会立即发送,大概延迟几分钟甚至几小时。
SeisComP3 实现的 ArcLink 服务不支持直接访问数据存档,但该工作可交给 请求处理器(request handler)
。在 ArcLink 配置文件中,用户可以定义最小或最大数量的请求处理器。ArcLink 服务根据需要会动态创建和销毁请求处理器。还可以为每种请求类型设置最大数量的请求处理器,允许其并行运行。在同一时间可以仅处理一个请求。
ArcLink 协议本身没有强行限制数据类型,但 SeisComP3 提供 5 种请求类型:
ArcLink 服务器和请求处理器通过消息系统访问数据库中的台站信息。为满足路由请求,需要台站编目信息。ArcLink 服务器需要一个绑定列表,包含网络/台站/位置/通道代码。并且为实现受限网络的访问控制,ArcLink 服务器需要一个电子邮件地址(或标识符)。
路由
路由信息是一个不同 ArcLink 服务器的地址列表(形如 host:port),在 ArcLink 模块绑定中配置。
访问
访问信息是一个允许访问波形数据的电子邮件地址(或通用标识符),在 arclink-access 模块绑定中配置。
在 ArcLink 绑定内,可以定义一套规则,用于生成路由信息。默认的生成算法是每个台站一个路由入口,可更改为每个网络一个路由。
使用 scconfig 工具可以生成 ArcLink 绑定,或者在etc/key
文件夹中生成配置文件。
主要的文件有:
etc/key/station_NET_STATION
etc/key/arclink/profile_NAME
etc/key/arclink/station_NET_STATION
要检测当前系统中定义的路由,使用 dump_db 工具:
转储路由简单如下:
% dump_db --routing routing.xml
创建的routing.xml
文件包含转储的路由信息。在一个干净系统中,生成的 XML 文件只包含一个空的最高节点:
<?xml version="1.0" encoding="utf-8"?>
<ns0:routing xmlns:ns0="http://geofon.gfz-potsdam.de/ns/Routing/1.0/" />
在已定义路由的系统中,最高节点将在 route 节点中增加路由信息。ns0
前缀是 XML 命名空间标识符。
<ns0:routing xmlns:ns0="http://geofon.gfz-potsdam.de/ns/Routing/1.0/">
<ns0:route locationCode="" networkCode="GE"
publicID="Route#20120830110313.459068.338"
stationCode="" streamCode="">
<ns0:arclink address="localhost:18001" end="" priority="1"
start="1980-01-01T00:00:00.0000Z" />
<ns0:seedlink address="localhost:18000" priority="1" />
</ns0:route>
</ns0:routing>
基于输入的信息,使用编目生成最后的路由条目。
生成算法试图:
首先在etc/key/arclink
创建一个属性文件(如 profile_default):
routes = myserver
routes.myserver.arclink.address = myserver.localdomain.com:18001
routes.myserver.seedlink.address = myserver.localdomain.com:18000
第一行标识配置块名称:
routes = myServer
下面定义路由参数:
routes.myserver.arclink.address = myserver.localdomain.com:18001
routes.myserver.seedlink.address = myserver.localdomain.com:18000
接着,需要将这些属性赋给一个台站集,添加下列行至每个台站文件:
arclink:default
假设载入全部 GE 编目,要将这些属性应用至所有的台站。
运行 seiscomp update-config 命令并转储路由为 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<ns0:routing xmlns:ns0="http://geofon.gfz-potsdam.de/ns/Routing/1.0/">
<ns0:route locationCode="" networkCode="GE" publicID="Route#20120903140518.433791.386" stationCode="LID" streamCode="">
<ns0:arclink address="myserver.localdomain.com:18001" end="" priority="1" start="1980-01-01T00:00:00.0000Z" />
</ns0:route>
<ns0:route locationCode="" networkCode="GE" publicID="Route#20120903140518.431556.367" stationCode="NAI" streamCode="">
<ns0:arclink address="myserver.localdomain.com:18001" end="" priority="1" start="1980-01-01T00:00:00.0000Z" />
</ns0:route>
<ns0:route locationCode="" networkCode="GE" publicID="Route#20120903140518.439729.423" stationCode="GSI" streamCode="">
<ns0:arclink address="myserver.localdomain.com:18001" end="" priority="1" start="1980-01-01T00:00:00.0000Z" />
<ns0:seedlink address="myserver.localdomain.com:18000" priority="1" />
</ns0:route>
<ns0:route locationCode="" networkCode="GE" publicID="Route#20120903140518.42973.351" stationCode="WLF" streamCode="">
<ns0:arclink address="myserver.localdomain.com:18001" end="" priority="1" start="1980-01-01T00:00:00.0000Z" />
<ns0:seedlink address="myserver.localdomain.com:18000" priority="1" />
</ns0:route>
. . .
</ns0:routing>
结果 XML 很简单,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<ns0:routing xmlns:ns0="http://geofon.gfz-potsdam.de/ns/Routing/1.0/">
<ns0:route locationCode="" networkCode="GE" publicID="Route#20120903141058.546879.441" stationCode="" streamCode="">
<ns0:arclink address="myserver.localdomain.com:18001" end="" priority="1" start="1980-01-01T00:00:00.0000Z" />
<ns0:seedlink address="myserver.localdomain.com:18000" priority="1" />
</ns0:route>
</ns0:routing>