SeisComP3 文档

arclink

描述

SeedLink 设计用于实时数据传输。SeedLink 客户端可以只访问相对小的实时数据。另外,SeedLink 不具备查询台站数据库或仪器灵敏度的功能,不支持完全的 SEED。ArcLink 配合 SeedLink 将提供上述功能。ArcLink 协议类似于 SeedLink:基于 TCP 并使用简单 ASCII 码指令。不像 SeedLink,数据可能不会立即发送,大概延迟几分钟甚至几小时。

SeisComP3 实现的 ArcLink 服务不支持直接访问数据存档,但该工作可交给 请求处理器(request handler)。在 ArcLink 配置文件中,用户可以定义最小或最大数量的请求处理器。ArcLink 服务根据需要会动态创建和销毁请求处理器。还可以为每种请求类型设置最大数量的请求处理器,允许其并行运行。在同一时间可以仅处理一个请求。

ArcLink 协议本身没有强行限制数据类型,但 SeisComP3 提供 5 种请求类型:

  • Waveform - 地震波形数据,Mini-SEED 或完全的 SEED 格式
  • Response - 台站元数据信息,无数据 SEED 格式
  • Inventory - 台站元数据信息,ArcLink XML 格式
  • Routing - 路由信息, ArcLink 路由 XML 格式
  • Qc - 质量控制信息,XML 格式

路由和访问控制

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 工具:

  1. 转储全部编目信息至 XML 格式
  2. 转储路由信息至 XML 格式

转储路由简单如下:

% 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>

定义路由

基于输入的信息,使用编目生成最后的路由条目。

生成算法试图:

  • 在既定有效的网络作业时间内,定义一个路由条目。
  • 生成的路由包含网络代码集
  • 生成的路由包含开始时间集
  • 生成的路由包含优先级
  • SeedLink 路由地址仅归属于当前操作的台站

第一个示例

首先在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>