[P2PSIP] comments on draft-maenpaa-p2psip-topologyplugin-00

Bruce Lowekamp <bbl@lowekamp.net> Mon, 17 August 2009 04:26 UTC

Return-Path: <bbl@lowekamp.net>
X-Original-To: p2psip@core3.amsl.com
Delivered-To: p2psip@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 245763A6D4E for <p2psip@core3.amsl.com>; Sun, 16 Aug 2009 21:26:40 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.882
X-Spam-Level:
X-Spam-Status: No, score=-0.882 tagged_above=-999 required=5 tests=[AWL=-0.764, BAYES_20=-0.74, FM_FORGED_GMAIL=0.622]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id AsJ5XftMpjFW for <p2psip@core3.amsl.com>; Sun, 16 Aug 2009 21:26:39 -0700 (PDT)
Received: from mail-fx0-f222.google.com (mail-fx0-f222.google.com [209.85.220.222]) by core3.amsl.com (Postfix) with ESMTP id C6F4D3A6B9D for <p2psip@ietf.org>; Sun, 16 Aug 2009 21:26:38 -0700 (PDT)
Received: by fxm22 with SMTP id 22so2414070fxm.9 for <p2psip@ietf.org>; Sun, 16 Aug 2009 21:26:42 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.103.80.23 with SMTP id h23mr1136201mul.88.1250483202561; Sun, 16 Aug 2009 21:26:42 -0700 (PDT)
Date: Mon, 17 Aug 2009 00:26:42 -0400
Message-ID: <bc023dcd0908162126r26cdbd9el6a2144e748e78402@mail.gmail.com>
From: Bruce Lowekamp <bbl@lowekamp.net>
To: p2psip <p2psip@ietf.org>, draft-maenpaa-p2psip-topologyplugin <draft-maenpaa-p2psip-topologyplugin@tools.ietf.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Subject: [P2PSIP] comments on draft-maenpaa-p2psip-topologyplugin-00
X-BeenThere: p2psip@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Peer-to-Peer SIP working group discussion list <p2psip.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/p2psip>, <mailto:p2psip-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/p2psip>
List-Post: <mailto:p2psip@ietf.org>
List-Help: <mailto:p2psip-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/p2psip>, <mailto:p2psip-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 17 Aug 2009 04:26:40 -0000

I think drafts that discuss alternative/extension overlay algorithms
are a great contribution and appreciate the authors writing this
draft.  Would be really nice to get WG effort behind making some of
these concepts WG items.

Bruce

---------------------

The draft refers to "real world" environments a lot.  This term is
relatively meaningless (or, more precisely, means different things to
each reader).  Define use cases where the draft is necessary or offers
performance improvements and make concrete claims.  Obviously
many/most large-scale overlays with moderate churn perform better with
some of the techniques.  State that or something similar and the
overlay algorithm features that are needed for that/those use case(s).
 Similarly, state the use case that requires load balancing.  The
basic sip usage is probably not one of them given the small size of
registrations.   But an eventual voicemail usage is likely to be a
supporting use case, for example.   Remember that there are real world
use cases where this algorithm behaves more poorly than the default
RELOAD algorithm.  For example, a small-office phone system is a real
world use case.  It's one that is typically ignored by much of the P2P
community, but it is one of the motivating use cases in P2PSIP.

I'm not immediately convinced of the usefulness of the load balancing
concept.  In particular, the load balancing aims to balance out the
uneven load that is the natural result of hashing and uneven peer
spacing.  However, for many use cases load imbalance seems to be more
a function of resource size distribution rather than uneven mapping.
For example, a file sharing usage might have several orders of
magnitude variation in resource size, whereas uneven mapping is a
factor of O(log(N)).  To me, it's much more important to solve the
large file problem by dividing large files among multiple locations.
Once that is done, using virtual servers to balance mapping and
account for device capacity becomes more pressing.  While I can see
that an optimal chunking might be usage-specific, I can also see a lot
of use of it as a general service.  The security mechanisms remain a
challenge there.

How does one run UpdateAlphaDelta when using an enrollment server/CA
for certificates?  I don't see this addressed anywhere.

There are obvious important benefits to using periodic stabilization
in certain circumstances.  However, the way the virtual server load
balancing is specified appears to me to be produce at least an order
of magnitude more traffic in response to peer changes than a reactive
stabilization algorithm.  For example, in the event of a finger table
entry failure, the peer Leaves all of its virtual server locations
(with associated resource transfers), identifies a new set of virtual
server IDs, then reJoins at the new addresses and transfers resources.
 By comparison, reactive stabilization sends a few Updates when a
neighbor fails.

In the UpdateReq and a few other places, the sender asserts their ids
in a message structure.  Those need to be obtained from a certificate,
not from the message body.

There are some reactive elements to the periodic stabilization
algorithm.  For example, on successor failure, the peer walks its
successor list pulling from each.  A reactive pull rather than a
reactive push is still a reactive algorithm.

Section 6 uses almost entirely SHOULD rather than MUST.  I am fairly
sure that an implementation that did not implement any of the SHOULDs
would fail to work entirely.  I suspect that almost all SHOULDs should
be MUST.  It's helpful to indicate what a reason might be for not
implementing a SHOULD when SHOULD is appropriate.  (Henning can make
this argument with a lot more passion, if necessary.)

I really like the effort on adaptive stabilization.   One factor to
consider, though, is whether keepalives of some sort (possibly NAT
binding keepalives) need to be sent more often than necessary based on
peer failure, and those keepalives might as well be a basic Update.
Sort of a complex question based on the cost of a STUN keepalive vs
p2p layer, but I think it's an interesting question.



The next two comments are aimed at making the text clearer.  First, I
should be clear that I'm not going to claim I've never done these in
writing text (and I think there are still parts of the base draft that
need to have these applied).

A lot of the text merges analysis/justification with normative text.
Implementers don't care about the analysis, and even for those who do
it makes it harder to find the normative text.  Separate these where
possible, ideally into separate sections, but at least separate
paragraphs.

A number of aspects of the algorithm are of the form (this is not a
real extract):
- when y fails, send a probe to ID t for a new entry
- when receiving response for ID t from peer q, send an Attach to q
- once the Attach completes, send an Update to q
While this is great in descriptive text, the implementation is
entirely different since the implementation has to be asynchronous.
And while IETF isn't about implementation, there are a lot of protocol
correctness issues left exposed here (what happens if a better peer
than q is identified in between sending the Attach and it
completing?).  Better to write normative text that specifies a single
reaction when an event happens.  For example, you might write that
when a better finger table entry is identified, an Attach is sent to
it.  Specified entirely separately (and possibly somewhere else),
finger table and neighborhood entries are updated when an Attach
completes for a better match than the current entry.  This also avoids
missing stating obvious things everywhere, like in 6.4 where it isn't
entirely clear that an Attach needs to be completed before updating
the neighbor list.