home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / drafts / draft_s_z / draft-vinod-carp-v1-01.txt < prev    next >
Text File  |  1997-10-01  |  15KB  |  435 lines

  1.  
  2. INTERNET-DRAFT                                    J. Cohen, N. Phadnis               
  3. <draft-vinod-carp-v1-01.txt>                   Netscape Communications
  4.                                                     Vinod Valloppillil
  5.                                                  Microsoft Corporation
  6.                                                          Keith W. Ross
  7.                                             University of Pennsylvania
  8.                                                      29 September 1997
  9.                                                     Expires March 1998
  10.  
  11.  
  12.         Cache Array Routing Protocol v1.1
  13.  
  14. Status of this Memo
  15.  
  16.  This document is an Internet-Draft.  Internet-Drafts are working
  17.  documents of the Internet Engineering Task Force (IETF), its areas,
  18.  and its working groups.  Note that other groups may also distribute
  19.  working documents as Internet-Drafts.
  20.  
  21.  Internet-Drafts are draft documents valid for a maximum of six months
  22.  and may be updated, replaced, or obsoleted by other documents at any
  23.  time.  It is inappropriate to use Internet-Drafts as reference
  24.  material or to cite them other than as ``work in progress.''
  25.  
  26.  To learn the current status of any Internet-Draft, please check the
  27.  ``1id-abstracts.txt'' listing contained in the Internet-Drafts Shadow
  28.  Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe),
  29.  munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or
  30.  ftp.isi.edu (US West Coast).
  31.  
  32. Abstract
  33.  
  34.   This draft documents proposed changes to the original version of
  35.   the draft with this same name, to be called 'the Cache Array Routing
  36.   Protocol (CARP) v1.1'  for dividing URL-space among an array of loosely
  37.   coupled proxy  servers.
  38.  
  39.   The modified sections are 3.1 and 3.2.  Aside from those two 
  40.   sections, the drafts remains the same.
  41.  
  42.   An overview of the changes are presented in section 0.
  43.  
  44.   An HTTP client agent (either a proxy server or a client browser)
  45.   which implements CARP v1.1 can allocate and intelligently route
  46.   requests for the correct URLs to any member of the Proxy
  47.   Array.  Due to the resulting sorting of requests through these 
  48.   proxies, duplication of cache contents is eliminated and global
  49.   cache hit rates are improved.
  50.  
  51. Valloppillil                                           [Page 1]
  52.  
  53. INTERNET-DRAFT   Cache Array Routing Protocol v1.1    30 June 1997
  54.  
  55. Table of Contents
  56.  
  57.   0.  Proposed Change Overview........................ +
  58.   1.  Overview........................................ 2
  59.   2.  Proxy Array Membership Table.................... 3
  60.       2.1  Global Information......................... 3
  61.       2.2  Member Information......................... 4
  62.   3.  Routing Function................................ 5
  63.       3.1  Hash Function.............................. 5
  64.       3.2  Hash Combination........................... 6
  65.       3.3  Load Factor................................ 6
  66.       3.4  Route Selection............................ 7
  67.       3.5  Member Failure Routing..................... 7
  68.   4.  Client-Side Implementation...................... 7 
  69.   5.  Versioning...................................... 7
  70.   6.  Security Considerations......................... 7
  71.   7.  Open Issues..................................... 7
  72.   8.  Acknowledgements................................ 7
  73.   9.  References...................................... 8
  74.   10. Author's Information............................ 8
  75.  
  76.  
  77. INTERNET-DRAFT   Cache Array Routing Protocol v1.1        30 June 1997
  78.  
  79. 0. Proposed Change Overview
  80.  
  81.   Change in hash functions
  82.   ------------------------
  83.   The following changes are to make hash functions faster, better
  84.   (resulting in more uniform distribution), and easier to evaluate
  85.   (especially in JavaScript on client side).
  86.  
  87.   1.  Convert a URL to lower case to evaluate hash value to avoid parsing
  88.   the URL. This makes hashing faster at client as well as server side.
  89.  
  90.   2.  Use shift instead of rotate operator. It is four times faster and
  91.   gives more uniform distribution based on our experiments.
  92.  
  93.   3.  Additive multiplication is replaced with a simple multiplication.
  94.   Additive effect can be achieved simply by adding 1 to the multiplier
  95.   constant if required. Since the multiplier constant is anyway a set of
  96.   random bits, adding 1 to it has no effect toward improving distribution.
  97.   
  98.   4.  The second rotate operation in evaluation of member proxy hash
  99.   values as well as resultant hash value is eliminated. It is a relatively
  100.   expensive operation and does not help improve distribution after the
  101.   multiplication.
  102.  
  103.  
  104. 1. Overview
  105.  
  106.   The Cache Array Routing Protocol describes a distributed caching 
  107.   protocol based on
  108.  
  109.     1) a known membership list of loosely coupled proxies and
  110.     2) a hash function for dividing URL space among those proxies
  111.  
  112.   The Proxy Array Membership Table is defined as a plain ASCII text
  113.   file retrieved from an Array Configuration URL.  This document does
  114.   NOT describe how this table is constructed, merely the format of
  115.   the fields used by agents implementing.
  116.  
  117.   The hash function plus routing algorithm defined in this document 
  118.   take member proxies described in the Proxy Array Membership Table 
  119.   and make an on-the-fly determination as to which Proxy Array member 
  120.   should be the proper receptacle for a cached version of a resource 
  121.   keyed by URL.
  122.  
  123.   Downstream agents may then access the cached resource by forwarding
  124.   the proxied HTTP request [5] for that resource to the appropriate 
  125.   member of the Proxy Array.
  126.  
  127. Valloppillil                                           [Page 3]
  128.  
  129. INTERNET-DRAFT   Cache Array Routing Protocol v1.1        30 June 1997
  130.  
  131. 2. Proxy Array Membership Table
  132.  
  133.   The Proxy Array Membership Table is a plain-text ASCII file which
  134.   can be published from a URL.
  135.  
  136.   The format of the table is:
  137.  
  138.   Proxy Array Information/<Version number>
  139.   ArrayEnabled:  <0 | 1>
  140.   ConfigID:  <opaque string>
  141.   ArrayName:  <opaque string>
  142.   ListTTL:  <minutes until next check>
  143.  
  144.   <name> <IP addr> <listening port> <table URL> <agent str> 
  145.   <statetime> <status UP | DOWN> <load factor> <cache size>
  146.  
  147. 2.1 Global Information
  148.  
  149.   These are fields that describe the array itself and are not specific
  150.   to any one member of an array
  151.  
  152.   Global information is terminated in the Proxy Array Membership Table
  153.   by a CR/LF/CR/LF.
  154.  
  155. 2.1.1 Version number
  156.  
  157.   The version number for implementations of this specification is 
  158.   1.0
  159.  
  160. 2.1.2 ArrayEnabled
  161.  
  162.   This field allows proxies to advertise their implementation of CARP i
  163.   v1 even if they are not members of a Proxy Array. 
  164.  
  165. 2.1.3 ConfigID
  166.  
  167.   ConfigID is an opaque number no larger than 32bits similar to an 
  168.   ETag in HTTP 1.1.  It is used to track the current state of an 
  169.   Array table and may be used to match multiple yet independently 
  170.   published copies of the Proxy Array Membership Table.
  171.  
  172. 2.1.4 ArrayName
  173.  
  174.   ArrayName is an opaque string which is used to provide a convenient
  175.   administrative name for a given array.
  176.  
  177. 2.1.5 ListTTL
  178.  
  179.   ListTTL is the number of seconds for which an HTTP client entity 
  180.   should consider the current table image valid.  After ListTTL 
  181.   has expired, that client should retrieve a new copy of 
  182.   the Proxy Array Membership Table.
  183.  
  184. Valloppillil                                           [Page 4]
  185.  
  186. INTERNET-DRAFT   Cache Array Routing Protocol v1.1        30 June 1997
  187.  
  188. 2.2 Member Information
  189.  
  190.   The following fields are published per member in an array and are 
  191.   separated by single spaces.  The end of an array member's record is
  192.   terminated by a CR/LF.
  193.  
  194. 2.2.1 Name
  195.  
  196.   The name of the proxy server.  Typically this is the fully qualified
  197.   DNS name.  Downstream HTTP agents should use resolution of this name 
  198.   to determine how to connect to this proxy. 
  199.  
  200. 2.2.2 IP Addr
  201.  
  202.   The IP address that other proxy servers within this array should use
  203.   to connect to this proxy server.  This is necessary for proxy 
  204.   servers which may be hosted on multi-hommed servers where requests 
  205.   are only accepted by one of the interfaces.
  206.  
  207. 2.2.3 Listening Port
  208.  
  209.   The TCP port number this proxy is expecting requests on.
  210.  
  211. 2.2.4 Table URL
  212.  
  213.   A URL which may be maintained by this proxy server on which a copy
  214.   of the array membership table can be found. 
  215.  
  216. 2.2.5 Agent String
  217.  
  218.   An opaque string identifying the vendor / version of the 
  219.   proxy Server in the Array Membership Table.
  220.  
  221. 2.2.7 Statetime
  222.  
  223.   How long a Proxy Server has been in its current state and has been
  224.   a member of this table.  This is useful for dynamic generation of 
  225.   the Array Membership Table where the host generating the table has
  226.   knowledge of the proxy's operational status.
  227.  
  228. 2.2.8 Status
  229.  
  230.   Status provides a simple text string indicating whether a member
  231.   proxy is currently able to handle requests (UP) or refused a 
  232.   connection when last contacted (DOWN).
  233.  
  234. Valloppillil                                           [Page 5]
  235.  
  236. INTERNET-DRAFT   Cache Array Routing Protocol v1.1        30 June 1997
  237.  
  238. 2.2.9 Load Factor
  239.  
  240.   Load Factor is a relative amount of the total load for an array that
  241.   should be handled by any given member of the array.
  242.  
  243. 2.2.10 Cache Size
  244.  
  245.   Cache size is an informational field that indicates the size of the
  246.   cache held by a particular member of an array. 
  247.  
  248. 3. Routing Function
  249.  
  250.   Once an agent has a Proxy Array Membership Table.  It uses a 
  251.   mathematical hash function to determine which of the members of 
  252.   the array should be the receptacle of a particular URL request.
  253.  
  254.   This routing function involves constructing n "scores" using a hash
  255.   of the request URL plus a hash of each of the n proxies in the Proxy
  256.   Array Membership Table.  
  257.  
  258.   Both the URL and the proxy names are hashed in order to minimize the
  259.   disruption of target routes if a member of the target array can't
  260.   be contacted.
  261.  
  262.   Hashes of the URL and proxy name are constructed using the algorithm
  263.   described in 3.1 and combined using the algorithm described in 3.2.
  264.  
  265. 3.1. Hash Function
  266.  
  267.   The hash function outputs a 32 bit unsigned integers based on a 
  268.   zero-terminated ASCII input string.  Machine names as well as URLs 
  269.   should be converted to lower case for hash evaluation. This makes sense
  270.   because machine names are case insensitive.  
  271.  
  272.   Because irreversibility and strong cryptographic features are 
  273.   unnecessary for this application, a very simple and fast hash 
  274.   function based on the bitwise left shift operator is used.  
  275.   
  276.   For (each char in URL):
  277.         URL_Hash += (URL_Hash << 9) + char ; 
  278.  
  279.   Member proxy hashes are computed in a similar manner:
  280.  
  281.   For (each char in MemberProxyName):
  282.         MemberProxy_Hash +=   (MemberProxy_Hash << 9) + char ; 
  283.  
  284.   Becaues member names are often similar to each other, their hash
  285.   values are further spread across hash space via a multiplication:
  286.  
  287.   MemberProxy_Hash = MemberProxy_Hash * 0x62531965 ;
  288.  
  289.  
  290. Valloppillil                                           [Page 6]
  291.  
  292. INTERNET-DRAFT   Cache Array Routing Protocol v1.1        30 June 1997
  293.  
  294. 3.2. Hash Combination
  295.  
  296.   Hashes are combined by first exclusive or-ing (XOR) the URL hash by 
  297.   the machine name and then multiplying by a constant.
  298.  
  299.   All final and intermediate values are 32 bit unsigned integers.
  300.  
  301.   Combined_Hash = (URL_hash ^ MemberProxy_Hash) ;  
  302.   Combined_Hash = Combined_Hash * 0x62531965 ; 
  303.   
  304. 3.3. Load Factor
  305.  
  306.   Support for array members with differing HTTP processing & caching
  307.   capacity is achieved by multiplying each of the combined hash values
  308.   by a Load Factor Multiplier.
  309.  
  310.   The Load Factor Multiplier for an individual member is calculated by
  311.   taking each member's relative Load Factor and applying the
  312.   following formula:
  313.  
  314.   For each proxy server 1,...,K, the Load Factor Multiplier, X_k, is
  315.   calculated iteratively as follows:
  316.  
  317.   X_1 = arbitrary positive constant
  318.  
  319.   X_k = ([K-k+1] * [P_k - P_{k-1}])/(X_1 * X_2 * ... * X_{k-1})
  320.   X_k += (X_{k-1}^{K-k+1})
  321.   X_k = X_k^{1/(K-k+1)}
  322.  
  323.   where:
  324.  
  325.   X_k = Load Factor Multiplier for proxy k
  326.   K = number of proxies in an array
  327.   P_k = relative percent of the load that proxy k should handle 
  328.  
  329.   This is then combined with the previously computed hashes as
  330.  
  331.   Resultant_value = Combined_Hash * X_k
  332.  
  333.  
  334. Valloppillil                                           [Page 7]
  335.  
  336. INTERNET-DRAFT   Cache Array Routing Protocol v1.1        30 June 1997
  337.  
  338. 3.4. Route Selection
  339.  
  340.   The "score" for a particular combination of URL plus proxy is its
  341.   resultant value. Once the agent determines of the scores of the 
  342.   K proxies, it routes the URL query to the proxy with the hightest 
  343.   score.
  344.  
  345. 3.5. Member Failure Routing
  346.  
  347.   If a proxy can not contact the designated member of a proxy array 
  348.   in order to forward an HTTP request, that proxy should route
  349.   the request to the second highest scoring proxy in the target array.
  350.  
  351. 4. Client-side implementation
  352.  
  353.   CARP can be implemented on client-side HTTP browsers via the 
  354.   use of the Proxy AutoConfig file described in [1] and [2].
  355.  
  356. 5. Versioning
  357.  
  358.   If a downstream proxy receives an Array Membership Table with a 
  359.   greater version # than that proxy is able to parse, it should 
  360.   fall back to simple proxy request routing to any administrator
  361.   defined upstream proxy server.
  362.  
  363. 6. Security Considerations
  364.  
  365.   This draft does not discuss relevant security considerations.
  366.  
  367. 7. Open Issues
  368.  
  369. 8. Acknowledgements
  370.  
  371.   The author would like to thank Brian Smith, Kip Compton, and 
  372.   Kerry Schwartz for their assistance in preparing this document.
  373.  
  374.   Most of the architecture & design of CARP stem from work conducted
  375.   by Brian Smith at Microsoft Corp.
  376.  
  377. Valloppillil                                           [Page 8]
  378.  
  379. INTERNET-DRAFT   Cache Array Routing Protocol v1.1       30 June 1997
  380.  
  381. 9. References
  382.  
  383.   [1] Luotonen, Ari., "Navigator Proxy Auto-Config File Format", 
  384.  Netscape Corporation, http://home.netscape.com/eng/mozilla/2.0/
  385.  relnotes/demo/proxy-live.html, March 1996.
  386.  
  387.   [2] Microsoft Corporation., "Automatic Proxy Configuration", 
  388.  http://www.microsoft.com/ie/ieak/autosys.htm, March 21, 1997.
  389.  
  390.   [3] Wessels, Duane., "Internet Cache Protocol Version 2", http://ds.
  391.  internic.net/internet-drafts/draft-wessels-icp-v2-00.txt, March 21, 
  392.  1997.
  393.  
  394.   [4] Sharp Corporation., "Super Proxy Script", 
  395.  http://naragw.sharp.co.jp/sps/, August 9, 1996.
  396.  
  397.   [5] Fielding, R., et. al, "Hypertext Transfer Protocol -- HTTP/1.1", 
  398.  RFC 2068, UC Irvine, January 1997.
  399.  
  400.   [6] Valloppillil & Cohen, "Hierarchical HTTP Routing Protocol", 
  401.  http://ircache.nlanr.net/Cache/ICP/draft-vinod-icp-traffic-dist-00.txt,
  402.  April 21, 1997.
  403.  
  404. 10.  Author Information
  405.  
  406.     Josh Cohen <josh@netscape.com>
  407.     Nilkanth Phadnis <phadnis@netscape.com>
  408.     Netscape Communications
  409.     501 E. Middlefield Rd
  410.     Mountain View, Ca 94043
  411.  
  412.     Vinod Valloppillil
  413.     Microsoft Corporation
  414.     One Microsoft Way
  415.     Redmond, WA 98052
  416.  
  417.     Phone:  1.206.703.3460
  418.     Email:  VinodV@Microsoft.Com
  419.  
  420.     Keith W. Ross
  421.     University of Pennsylvania
  422.     Department of Systems Engineering
  423.     Philadelphia, PA  19104
  424.  
  425.     Phone:  1.215.898.6069 
  426.     Email:  Ross@UPenn.Edu
  427.  
  428. Expires December 1997
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.