Re: [alto] 答复: Design issue on path vector

Jensen Zhang <jingxuan.n.zhang@gmail.com> Wed, 22 March 2017 16:17 UTC

Return-Path: <jingxuan.n.zhang@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 48525129B08; Wed, 22 Mar 2017 09:17:08 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.7
X-Spam-Level:
X-Spam-Status: No, score=-2.7 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id G0Y2g55g1i3U; Wed, 22 Mar 2017 09:17:00 -0700 (PDT)
Received: from mail-oi0-x232.google.com (mail-oi0-x232.google.com [IPv6:2607:f8b0:4003:c06::232]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id E7B56129A3F; Wed, 22 Mar 2017 09:16:44 -0700 (PDT)
Received: by mail-oi0-x232.google.com with SMTP id r203so48239209oib.3; Wed, 22 Mar 2017 09:16:44 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=W123V22aIlTwIylkukOccAeNS6TvmU7FXLoIXWNRK1E=; b=AUn8ozjkLo9lSW4hvFJxhc+pF1BJjRNdZr17qUR34Ah6Ewke4tQGZQVSEwmWPk7K/n B73IHgcmsZEqirxso4v2NPcjFHGd0dHccjp3nvRigFLAaARwy87Omi0kz+cmcE/XTry2 Fg/oMLrhKVZ+8nxD8yAmu59mhIiCdi/gWjbkZcbNNszbgj4VyNaBpvJNIHwnXQHphV/u USRlN3WhVmTDFruh8bNkzCbTgcp+L+FeGTTYN9f1bxorMpMgtNfhTmweQcMDCb+FREMH ZAW+kcPk+LgwtmOKn/sNXHZ+NiLhl5LLg1EE2sn3aM1fYyf9eKjZLJxnl+ejXTGyyY+0 tL+Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=W123V22aIlTwIylkukOccAeNS6TvmU7FXLoIXWNRK1E=; b=lFtGtY5/ooMsps10m5Pq94/6AdsQfJoe9oHV8JCTdH4fejCvfa1rHaP7Q9mmkVyr5g aH+3m1slei3+Duuc8XWgCk+wRyZCDsWPPw/pyNJh21kPGhTKrvCheBTi7nbJTKYWJFmO 7AkW0YSNKOY16Nhv0jXZUZpyoldYBqyTTPD/nWimTE58dki4AEFXJdONC+fhArMTa2q9 EaPHd8uGRkRAc4xBQhu2t8L+Je6pCYGPQSe9Ho26k/fsXCTIzEuzf2Uj6/Bwg6kAFm75 4DHLO2MduQ4NEp4KzQ4ObAsb21BYolz5ddOp1HdLMVRnzCujHtpUZDBgH3FZzo9lRRqb V0vw==
X-Gm-Message-State: AFeK/H3mYf3pXl8mlXNKIZcF0xRxxVemtKcfgYfuUeJF6OOOg8MrA0pOXTKGH2j/nHwTFxEVz0N8KHHg6AWEkg==
X-Received: by 10.202.54.4 with SMTP id d4mr23428430oia.45.1490199404130; Wed, 22 Mar 2017 09:16:44 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.157.13.230 with HTTP; Wed, 22 Mar 2017 09:16:43 -0700 (PDT)
In-Reply-To: <TY1PR04MB06560DFCD6E8F98C6E3DA15CB53C0@TY1PR04MB0656.apcprd04.prod.outlook.com>
References: <TY1PR04MB065600AD703BAEC14FC7D27DB53D0@TY1PR04MB0656.apcprd04.prod.outlook.com> <KL1PR0302MB26290AAB2597036E65942201A83C0@KL1PR0302MB2629.apcprd03.prod.outlook.com> <CAAbpuyqphmvXfDkFLz+Yo1F4c2ACFHezEjKCTnS8rjZn-nfiQA@mail.gmail.com> <TY1PR04MB06560DFCD6E8F98C6E3DA15CB53C0@TY1PR04MB0656.apcprd04.prod.outlook.com>
From: Jensen Zhang <jingxuan.n.zhang@gmail.com>
Date: Thu, 23 Mar 2017 00:16:43 +0800
Message-ID: <CAAbpuyoPoXY=YuxcAz5FhEK2_Zz5ZsXoz+_nNMghpy=ATGagWw@mail.gmail.com>
To: Chan Dawn <dawn_chen_f@hotmail.com>
Cc: "xinwang2014@hotmail.com" <xinwang2014@hotmail.com>, "alto@ietf.org" <alto@ietf.org>, "draft-yang-alto-path-vector@ietf.org" <draft-yang-alto-path-vector@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/alto/aP5dUQD_ee4H6BB4b6qcvbaPdvo>
Subject: Re: [alto] 答复: Design issue on path vector
X-BeenThere: alto@ietf.org
X-Mailman-Version: 2.1.22
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: Wed, 22 Mar 2017 16:17:08 -0000

I'm thinking about whether the design can be simpler. Here is another
design to solve the dynamic nep-map issue:

We do not extend any scheme but make every path-vector queries share
the same nep-map resource.

Here is an example nep-map resource in the IRD. It is a filtered
property map as the same define in [0].

This resource supports the "availbw" and "delay" property types.
Initially, this resource may be empty with no abstract network
elements.

  "default-nep-map": {
     "uri": "http://alto.example.com/propmap/nepmap/default",
     "media-type": "application/alto-propmap+json",
     "accepts": "application/alto-propmapfilter+json",
     "capabilities": {
       "domain-types": ["ane"],
       "prop-types": ["availbw", "delay"]
   }

The ECS resource uses "default-nep-map" as the dependent resource.
(Just like the naive design.)

  “pv-endpoint-cost-map”: {
    “uri”: “http://alto.example.com/lookup/endpointcost”,
    “media-type”: “application/alto-endpointcostmap+json”,
    “capabilities”: { “cost-type-names”: [“pv"] },
    “uses”: [“default-nep-map"]
  }

Each query will share the same dependent resource. But the ane names
in different responses MUST be different. There are two different
queries for the same ECS resource.

ECS Response of Query1:

  {
    "meta": {
      "cost-type": {
        "cost-mode": "path-vector",
        "cost-metric": "ane",
      },
      "dependent-vtags": [
        {"resource-id": "default-nep-map",
         "vtag": "[TBD]",}
      ]
    },
    "endpoint-cost-map": {
      "ipv4:192.168.1.101": { "ipv4:192.168.1.201": ["ane:QabcdL0001",
"ane:QabcdL0002"] },
      ...
    }
  }

After the above query, "ane:QabcdL0001" and "ane:QabcdL0002" will be
added into the "default-nep-map".

ECS Response of Query2:

{
  "meta": //The same meta
  "endpoint-cost-map": {
    "ipv4:192.168.1.102": { "ipv4:192.168.1.202": ["ane:QabdeL0001",
"ane:QabdeL0002"] },
    ...
  }
}

And after this query, "ane:QabcdL0001" and "ane:QabcdL0002" will be
added into the "default-nep-map".

You may notice that they use different prefixes ("Qabcd" and "Qabde")
of ane names to ensure there is no same ane name in different
responses. The ALTO server can also adopt other ways to ensure the ane
names are query-specific (which means the ane names in responses of
different queries are not conflict).

Any thoughts?

[0] https://www.ietf.org/id/draft-roome-alto-unified-props-new-00.txt

Jensen

On Wed, Mar 22, 2017 at 9:06 PM, Chan Dawn <dawn_chen_f@hotmail.com> wrote:
> Hi Xin,
>
> Thanks for your comments and I agree with Jensen.
>
> Besides, I would like to point out that if the property map doesn't support
> some property types, all of its network elements is not able to have that
> property. So, in your example,
>
>>"property-map": {
>>          "ne:ne12": { "availbw": "90", "delay": "unknown" },
>>          "ne:ne23": { "availbw": "80", "delay": "15" },
>>          "ne:ne34": { "availbw": "70", "delay": "25" }
>>  }
>
> If property "delay" is not supported, all the network elements shall not
> have the "delay" property, not only the netwrok element "ne:ne12".
>
>
> Another thing is that if the property for a specific network element is not
> available, the property map will return value "null" for that property.
>
>
> Best Regards,
>
> Dawn
>
>
>
> ________________________________
> 发件人: Jensen Zhang <jingxuan.n.zhang@gmail.com>
> 发送时间: 2017年3月22日 14:35
> 收件人: xin wang
> 抄送: Chan Dawn; alto@ietf.org; draft-yang-alto-path-vector@ietf.org
> 主题: Re: Design issue on path vector
>
> Hi Dawn,
>
> Thanks for starting this discussion.
>
> Hi Xin,
>
> Thanks for your comments. See inline.
>
> Jensen
>
>
> On Wed, Mar 22, 2017 at 12:32 PM, xin wang <xinwang2014@hotmail.com> wrote:
>> Hi Dawn,
>>
>>
>> If I am wrong please correct me. For the second issue, the resource id
>> could
>> be reflected in the hash code of the uri field. I think you are missing
>> that
>> in your ECS example.
>
> I think "uri" and "resource-id" are very different. How can we reflect
> the "resource-id" in the "uri"? Do you want to introduce the extra
> semantics into the "uri"?
>
>> For the first issue, in my understanding, since network
>> elements are dynamically generated after the computation of path-vector, I
>> think it is hard to determine element property types before the
>> computation.
>> This may depend on whether we support "unknown" in the response of network
>> element property map, i.e.,
>>
>> "property-map": {
>>          "ne:ne12": { "availbw": "90", "delay": "unknown" },
>>          "ne:ne23": { "availbw": "80", "delay": "15" },
>>          "ne:ne34": { "availbw": "70", "delay": "25" }
>>  }
>
> Please notice that "prop-types" is a capability of "prop-map". If this
> "prop-map" does not support "delay", it will be determined before you
> send any query. And you even cannot query "delay" to this "prop-map".
> "unknown" does not solve this issue.
>
> I think what we are discussing is that if the ALTO server provides a
> "path-vector" FCM resource, it should inform the client which
> "prop-types" will be supported by the generated "prop-map" at an
> earlier stage. If you provide this information in the response of FCM
> rather than the IRD entry of it, the client may have to send a useless
> FCM query before it gets this information.
>
>>
>>
>> Best,
>> Xin
>>
>> ________________________________
>> From: alto <alto-bounces@ietf.org> on behalf of Chan Dawn
>> <dawn_chen_f@hotmail.com>
>> Sent: Tuesday, March 21, 2017 13:02
>> To: alto@ietf.org; draft-yang-alto-path-vector@ietf.org
>> Subject: [alto] Design issue on path vector
>>
>>
>> Hi all,
>>
>>
>> I'd like to start a discussion for path-vector design and push it as an
>> acceptable specification. Following is my thought:
>>
>>
>> We have agreed on delivering path-vector + abstract network elements
>> design
>> for net graph representation since IETF 96. This design specifies the cost
>> value as a path vector which is a JSONArray of network elements and puts
>> the
>> network element properties into a nep-map. Considering to reference the
>> nep-map from another resource (we propose to use unified-prop-map), below
>> is
>> a naive design:
>>
>>
>>
>> An example of IRD:
>>
>>
>> “pv-endpoint-cost-map”: {
>>
>>     “uri”: “http://alto.example.com/lookup/endpointcost”,
>>
>>     “media-type”: “application/alto-endpointcostmap+json”,
>>
>>     “capabilities” : {
>>
>>       “cost-type-names”: [“pv"]
>>
>>     },
>>
>>     “uses”: [“default-nep-map"]
>>
>> }
>>
>>
>> An example of ECS response:
>>
>>
>> “meta”: {
>>
>>   “dependent-vtags”: [
>>
>>     { “resource-id”: “default-nep-map”, “tag”: “<sha256>” }
>>
>>   ],
>>
>>   “cost-type”: {“cost-mode”: “path-vector”, “cost-metric”: “ane”}
>>
>> },
>>
>> “endpoint-cost-map”: ...
>>
>>
>> However, the problem is how to reference the filtered property map that we
>> use for clients to retrieve the properties of the corresponding network
>> elements. In the above example, the referenced network element property
>> map
>> is added in the “uses” field. However, here is the trouble:
>>
>>
>> Since the network elements are abstract, the network element property map
>> is
>> dynamically generated when the client sends a path-vector query. So, to
>> add
>> the refrenced network element property map in the “uses” field of a
>> resource
>> is not possible because the resource id in the “uses” field is somehow
>> static, it already exists before queried.
>>
>>
>> To solve this problem, we proposed the following design in
>> draft-yang-alto-path-vector-04:
>>
>>
>> An example of ECS response:
>>
>>
>> “meta”: {
>>
>>   …
>>
>>   "nep-map": {
>>
>>            "uri": "http://alto.example.com/propmap/lookup/nep-map",
>>
>>            "media-type": "application/alto-prompmap+json",
>>
>>            "accepts": "application/alto-propmapparams+json",
>>
>>            "capabilities": {
>>
>>              "domain-types": [“ane"],
>>
>>              "prop-types": ["availbw"]
>>
>>            }
>>
>>          }
>>
>> },
>>
>> “endpoint-cost-map”: ...
>>
>>
>> But we found two issues in this design:
>>
>>
>> 1. How to present the supported properties of the network elements in the
>> IRDResourceEntry of a resource? In this example, the nep-map can only
>> provide the “availbw” property. If the client needs the “delay” property
>> of
>> the returned network elements, it cannot get this knowledge that the
>> dependent nep-map of this ECS resource does not provide this property
>> before
>> it sends the query. So the client will send a useless query.
>>
>> 2. This design does not provide a resource-id for the nep-map, so the
>> server
>> cannot provide an incremental update service for the nep-map.
>>
>>
>> We found the fundamental problem is caused by the dynamic resource. In the
>> previous ALTO extensions, all the resources can be defined by the static
>> IRD
>> Resource Entries. But in this case, we have to handle the dependency
>> relationship between FCM/ECS and a dynamic property map resource. So we
>> propose the following design to solve this problem:
>>
>>
>> 1. Add a new attribute in the IRDResrouceEntry:
>>
>>
>> object {
>>
>>     JSONString               uri;
>>
>>     JSONString               media-type;
>>
>>     [JSONString              accepts;]
>>
>>     [Capabilities            capabilities;]
>>
>>     [ResourceID              uses<0..*>;]
>>
>>     [ImmediateResourceEntry  immediate-uses<0..*>;]
>>
>> } IRDResourceEntry;
>>
>>
>> object {
>>
>>     JSONString      media-type;
>>
>>     [JSONString     accepts;]
>>
>>     [Capabilities   capabilities;]
>>
>>     [ResourceID     uses<0..*>;]
>>
>> } ImmediateResourceEntry;
>>
>>
>> 2. Add a new attribute in the meta of FCM/ECS response:
>>
>>
>> object {
>>
>>     [JSONString               vtag;]
>>
>>     [VersionTag               dependent-vtags<1..*>;]
>>
>>     [ImmediateVersionTag      immediate-dependent-vtags<1..*>;]
>>
>> } ResponseMeta;
>>
>>
>> object {
>>
>>     ResourceID       resource-id;
>>
>>     JSONString       vtag;
>>
>>     [JSONNumber      time-out;]
>>
>> } ImmediateVersionTag;
>>
>>
>> Here is an example:
>>
>>
>> IRD:
>>
>>
>>     "pv-endpoint-cost-map": {
>>
>>       "uri": "http://alto.example.com/lookup/endpointcost",
>>
>>       "media-type": "application/alto-endpointcost+json",
>>
>>       "accepts": "application/alto-endpointcostparams+json",
>>
>>       "immediate-uses": [
>>
>>         {
>>
>>           "media-type": "application/alto-propmap+json",
>>
>>           "accepts": "application/alto-propmapparams+json",
>>
>>           "capabilities": { "domain-types": ["ane"],
>>
>>                             "prop-types": ["availbw", "delay"] }
>>
>>       ],
>>
>>       "capabilities": {
>>
>>         "cost-type-names": ["pv-ane", "num-routingcost", "num-hopcount"],
>>
>>         "cost-constraints": true
>>
>>       }
>>
>>     },
>>
>>
>> Response:
>>
>>
>>   {
>>
>>     "meta": {
>>
>>       "cost-type": {
>>
>>         "cost-mode": "path-vector",
>>
>>         "cost-metric": "ane",
>>
>>       },
>>
>>       "immediate-dependent-vtags": [
>>
>>         {"resource-id": "nep-map-<sha256>",
>>
>>          "vtag": "<sha256>",
>>
>>          "time-out": 180}
>>
>>       ]
>>
>>     },
>>
>>     "endpoint-cost-map": {
>>
>>       ...
>>
>>     }
>>
>>   }
>>
>>
>> Shall we push this design into the pv draft? Any feedback from others?
>>
>>
>> Thanks a lot!
>>
>> Dawn