Re: [alto] ALTO service query spanning multiple domains (ECS)

"Y. Richard Yang" <yry@cs.yale.edu> Tue, 13 September 2022 17:47 UTC

Return-Path: <yang.r.yang@gmail.com>
X-Original-To: alto@ietfa.amsl.com
Delivered-To: alto@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 13F85C14CF13 for <alto@ietfa.amsl.com>; Tue, 13 Sep 2022 10:47:25 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.406
X-Spam-Level:
X-Spam-Status: No, score=-1.406 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.248, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, HTML_MESSAGE=0.001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=no autolearn_force=no
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id h4TKONwB0bcw for <alto@ietfa.amsl.com>; Tue, 13 Sep 2022 10:47:19 -0700 (PDT)
Received: from mail-oa1-f41.google.com (mail-oa1-f41.google.com [209.85.160.41]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id AB232C14CE22 for <alto@ietf.org>; Tue, 13 Sep 2022 10:46:56 -0700 (PDT)
Received: by mail-oa1-f41.google.com with SMTP id 586e51a60fabf-1225219ee46so34199136fac.2 for <alto@ietf.org>; Tue, 13 Sep 2022 10:46:56 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date; bh=ML7QkmryZb+H4oCAk04e5jRJMZn7KturJJ0qd3Q/bUQ=; b=mgH7NvMg6yEnE6EBRzaNn/7T7AkujmFN6DRZsGA46NwmrQEiLLDrglZjWOuMOS+5MZ 2oJXj8pORbl+sd1WXQu7YQAIPeGUIpafPRQ7u4/9QOgmBK7qLbAVkLmdC9HQySUqsXtE s0J3Q0DfLyzr/zRpoyX99ADoZUwncv5bDi4uYGQ4Q8UfiCJhorEAW8RreMVXN7N55iOg IlQQwSh75VbYmcCLu7B9HHkvuovAYmj3lNgSS1M1fQADKfkuI74YOxRlwJE+4HkMGIqz sU8gdbJqNRed8SMhnifW5HoW0ghhLhd6LWd47WNMgcMe/cq0U8TCZS1fRUpfTSLuGg3Y Px6g==
X-Gm-Message-State: ACgBeo1zZAuSAA3dZzm9LQ76oaCRihRGpo1VuKE91j6Qoa1fmkvYtMFH F3DJDrC8uyyTxVANVezeKd7yLkMxKVFlay4Td80KVTHLsUg=
X-Google-Smtp-Source: AA6agR6Sgg9m49msmAxUekJA+tKMF7T9vC3f/DQawc7838JD7sK8KkrOd84GcDjsrdqeiRmCkyKrmbW/LVoc5MTgH5Y=
X-Received: by 2002:a05:6808:1149:b0:34f:a5d0:1c86 with SMTP id u9-20020a056808114900b0034fa5d01c86mr210188oiu.37.1663091214894; Tue, 13 Sep 2022 10:46:54 -0700 (PDT)
MIME-Version: 1.0
References: <CANUuoLq5ma=y4ke91B6CPcX4roEzBWsc1J8JrvgKrKtB0jzoOQ@mail.gmail.com>
In-Reply-To: <CANUuoLq5ma=y4ke91B6CPcX4roEzBWsc1J8JrvgKrKtB0jzoOQ@mail.gmail.com>
From: "Y. Richard Yang" <yry@cs.yale.edu>
Date: Tue, 13 Sep 2022 13:46:43 -0400
Message-ID: <CANUuoLqRnzgktnMoizWGDzDYdURTK_WAheFHCev2rsPRp81whA@mail.gmail.com>
To: IETF ALTO <alto@ietf.org>
Content-Type: multipart/alternative; boundary="00000000000017c99005e8929942"
Archived-At: <https://mailarchive.ietf.org/arch/msg/alto/Peb51BdektEnN3vGDDBDMywdeWk>
Subject: Re: [alto] ALTO service query spanning multiple domains (ECS)
X-BeenThere: alto@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: "Application-Layer Traffic Optimization \(alto\) WG mailing list" <alto.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/alto>, <mailto:alto-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/alto/>
List-Post: <mailto:alto@ietf.org>
List-Help: <mailto:alto-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/alto>, <mailto:alto-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 13 Sep 2022 17:47:25 -0000

Hi all,

There were quite extensive discussions, on the reactive/on-demand,
multi-domain design below, during the weekly meeting early this morning and
here is a brief summary of the key points.

- The design can be decomposed into two components: routing composition and
cost metric composition, from single domains to multiple domains:
   (metricVal, egressIP) = alto-server.query(ingressIP, srcIP, dstIP,
metric)
   =>
   egressIP = query(ingressIP, pkt-attributes)  // Q1
   metricVal = query(ingressIP, pkt-attributes, metric) //Q2

- It turns out that there can be at least multiple potential design points:
  For Q1: It can have two designs:
     - D1.1 It can be that Q1 is out of scope for ALTO, for example, by
using a routing system to conduct the query
     - D1.2 It can be a new service/metric type in ALTO

  For Q2: it also can have two designs:
     - D2.1 using the current RFC7285 for Q2, with specifying ingressIP as
src, in the ECS query
       This design is good if a network is destination-based routing
     - D2.2 We add an extension to ALTO ECS, to include general packet (and
pseudo packet) attributes

  For the extension design path, it can help to
      (1) convey the matching requirements in the IRD (for example, what
packet attributes to be included)
      (2) return indicates the equivalent classes (matching masks).

The design team will proceed with the simple designs first to push forward
the deployment, but will document the proceeding.

Cheers,
Richard



On Mon, Sep 12, 2022 at 10:50 PM Y. Richard Yang <yry@cs.yale.edu> wrote:

> Hi all,
>
> During the weekly meeting last week, we went over the details when
> deploying ALTO in a multi-domain setting, say the FTS/Rucio setting
> supporting the TCN deployment [1]. Below is the endpoint cost service (ECS)
> case, and it was suggested that we post it to the WG mailing list to update
> the WG and get potential feedback.
>
> Problem: An ALTO client queries the endpoint cost from srcIP to dstIP for
> a given performance metric (e.g., latency). Consider the case that the
> srcIP and dstIP belong to different networks, with the whole layer-3 path
> as the list [ip[0], ip[1], ..., ip[N]], where ip[0] = srcIP and ip[N] =
> dstIP. Define Net(ip) as the function that maps an IP address to the
> network that owns the IP---ignore the complexity such as anycast since the
> deployment does not have this case. Then Net(srcIP) != Net(dstIP), if it is
> multi-domain. Consider the initial deployment that we have only an ALTO
> server for each network; that is, it provides ALTO service for only
> Net(srcIP) == Net(dstIP). Then, there is not a single ALTO server that can
> provide the answer.
>
> Basic solution (one src-dst flow): Map the list [ip[0], ..., ip[N]] to a
> list of segments, where each segment starts with an IP address, and ends
> with the first IP address in the sequence that leaves the network of the
> start IP address. Hence, the basic query framework at an aggreation ALTO
> client:
> - alto-ecs(srcIP, dstIP, metric)
>   metrics = EMPTY
>   ingressIP = srcIP
>   do {
>       alto-server = server-discovery(ingressIP)
>       (metricVal, egressIP) = alto-server.query(ingressIP, srcIP, dstIP,
> metric)
>       metrics.add(metricVal)
>       ingressIP = egressIP
>   } while (egressIP != dstIP)
>
> The preceding assumes a procedure that collects segment attributes, and it
> can be a single pass composition using a metric-dependent function (e.g.,
> latency is addition, and bw is min).
>
> Multi-flow queries: ALTO ECS supports the querying of multiple src-dst
> pairs. A simple solution is to query each src-dst pair one-by-one. Such a
> query is necessary because the routing can be dependent on packet
> attributes (srcIP, dstIP) and a pseudo packet attribute (ingressIP), and
> the ALTO client cannot reuse the results. To allow reuse (both in
> multi-flow queries and caching of past queries), it helps that the ALTO
> server indicates equivalent classes, which Kai and Jensen investigated.
>
> A revision of the protocol using caching and equivalent class is:
> alto-server-cache: indexed by ALTO server, <attribute, mask> pairs
> - alto-ecs(srcIP, dstIP, metric)
>   metrics = EMPTY
>   ingressIP = srcIP
>   do {
>       alto-server = server-discovery(ingressIP)
>       if (alto-server-cache.match(alto-server, ingressIP, srcIP, dstIP)
>          use cache results
>       else
>          (metricVal, egressIP; ingressIPMask, srcIPMask, dstIPMask)
>                  = alto-server.query(ingressIP, srcIP, dstIP, metric)
>          alto-server-cache.add(alto-server, <ingressIP, ingressIPMask>,
>                     <srcIP, srcIPMask>, <dstIP, dstIPMask>
>       metrics.add(metricVal)
>       ingressIP = egressIP
>   } while (egressIP != dstIP)
>
> The mask design is a special case. For the general case, the most flexible
> equivalent class may be using predicates (e.g., supporting identifying the
> lower entries of longest prefix matching). It is an issue that can benefit
> from more benchmarking, or if there are any related pointers, the team will
> appreciate the pointers.
>
> In the next email, Kai and Jensen will post a slightly different design
> supporting a map oriented service.
>
> Cheers,
>
> [1] Transport control networking: optimizing efficiency and control of
> data transport for data-intensive networks,
> https://dl.acm.org/doi/abs/10.1145/3538401.3548550
>