Internet DRAFT - draft-asveren-dispatch-http-overload-control
draft-asveren-dispatch-http-overload-control
DISPATCH T. Asveren
Internet-Draft Ribbon
Intended status: Standards Track April 13, 2018
Expires: October 15, 2018
HTTP Overload Control Mechanism
draft-asveren-dispatch-http-overload-control-00
Abstract
This document specifies a generic overload control mechanism for
HTTP/HTTPS applications.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on October 15, 2018.
Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Asveren Expires October 15, 2018 [Page 1]
Internet-Draft HTTP Overload Control April 2018
Table of Contents
1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Requirements Language . . . . . . . . . . . . . . . . . . . . 3
3. Overload Control Mechanism . . . . . . . . . . . . . . . . . 3
3.1. Algorithm . . . . . . . . . . . . . . . . . . . . . . . . 3
3.2. Capability Negotiation . . . . . . . . . . . . . . . . . 3
3.3. Overload-Control Header . . . . . . . . . . . . . . . . . 4
3.4. Procedures at the Client . . . . . . . . . . . . . . . . 4
3.5. Procedures at the Server . . . . . . . . . . . . . . . . 5
3.6. Procedures at the Proxy . . . . . . . . . . . . . . . . . 5
4. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 5
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5
6. Security Considerations . . . . . . . . . . . . . . . . . . . 5
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 5
8. Appendix A: Example Message Flow . . . . . . . . . . . . . . 6
9. Informative References . . . . . . . . . . . . . . . . . . . 6
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 7
1. Overview
HTTP is used between clients and servers for request/response based
interaction in the context of many different applications. Some of
these applications have tight timing requirements for receiving a
response. For example, a signing request done toward a Signing
Server in the context of STIR RFC 8224 [RFC8224] usually is
associated with a real time session setup procedure which needs to
complete in a given time frame. For such applications it is
imperative to consider the actual load on a server to meet the timing
requirements. Current HTTP overload control relies on using 503 with
a Retry-After header indicating for how long no request should be
sent to a server. This, although sufficient for certain
applications, does not always provide satisfactory results as it
allows only binary control of the load following a step function
pattern. TCP congestion window does not address this issue either as
it does not allow an application direct control and is impacted by
network conditions like latency, jitter, packet loss. Therefor there
is a need for a mechanism which can address the overload control
needs of HTTP applications in general for which existing mechanisms
are not sufficient. Similar phenomena is observed for other
protocols as well. For example, for SIP the issue is addressed by
defining a specific mechanism in RFC 7339 [RFC7339]. Therefore This
document specifies a generic overload control mechanism for HTTP/
HTTPS applications.
The notion of applying different drop probabilities for separate
categories is supported as well. A category is an abstract construct
as far as this specification is concerned. It pertains to different
Asveren Expires October 15, 2018 [Page 2]
Internet-Draft HTTP Overload Control April 2018
policy characteristics and is meaningful in the context of an
application. It, for example, may refer to different priority levels
for requests, e.g. regular, emergency, government agency.
2. Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119.
3. Overload Control Mechanism
3.1. Algorithm
The overload control algorithm described in this document relies on
the concept of dropping a request with a certain probability on the
client which otherwise would bee sent to a particular server.
This approach is favored considering that neither the number of
clients sending requests to a server nor the volume of requests from
a client is known a priori at a given point in time and can change
dynamically. This dynamic nature makes any alternative approach
which would utilize a quota based control on a per client basis
unviable. An efficient solution should act in a as fair as possible
way on the aggregate of requests received by a server from all
clients.
3.2. Capability Negotiation
A client supporting this specification SHOULD add a Pragma header to
a request for which overload control is applicable with the value
"overload-control". A client MAY choose to send this Pragma header
only for the first or some requests to the server.
Example:
Pragma: overload-control
A server supporting this specification MUST interpret presence of the
Pragma header with the value "overload-control" as an indication that
client supports this specification and SHOULD follow server related
semantics defined in this specification. Receipt of a single such
request SHOULD be interpreted as the client supporting the overload
control mechanism.
A server not supporting this specification ignores a Pragma header
with the value "overload-control".
Asveren Expires October 15, 2018 [Page 3]
Internet-Draft HTTP Overload Control April 2018
A server MAY assume that a client supports this specification even if
no Pragma header with the value "overload-control" is received.
3.3. Overload-Control Header
A new entity header named "Overload-Control" is defined and used in
HTTP responses.
It is used to carry information about drop probability for messages
in a specified category.
TBD: A parameter indicating validity time will be added.
Example:
Overload-Control: oc=1, odp=30; oc=2, odp=45; oc, odp=60
o Drop category1 requests with a probability of 30%
o Drop category2 requests with a probability of 45%
o Drop category3 requests with a probability of 60%
Drop probability indicated by an Overload-Control header without a
category parameter applies to all categories.
3.4. Procedures at the Client
A client supporting this specification SHOULD drop a request which
would be sent to a server based on the probability value received in
Overload-Control header received in the latest response. This SHOULD
be done as follows:
Create a local table for all categories. All categories initial drop
probability is "0".
When an Overload-Control header is received:
o Update the drop percentage for the category in the local table.
o Drop a request based on the probability value for its category in
the local table.
A client MUST interpret and honor a Retry-After header according to
existing HTTP standard even if it supports and uses overload conytol
mechanism specified in this document.
Asveren Expires October 15, 2018 [Page 4]
Internet-Draft HTTP Overload Control April 2018
3.5. Procedures at the Server
A server supporting this specification SHOULD determine its own
overload state. How this is done is implementation dependent and not
subject to standardization in the context of this document.
A server SHOULD add an Overload-Control header indicating the
category and the drop probability of requests to a response if its
overload state changes. The mapping between actual overload state
and drop probability is implementation dependent.
3.6. Procedures at the Proxy
There is no specific functionality required from a Proxy in the
context of this specification. Proxies will transparently pass
Pragma headers in requests and Overload-Control headers in responses.
4. Formal Syntax
The syntax of the Overload-Control header is described as follows:
Overload-Control = "Overload-Control" HCOLON 1*(*(overload-category)1(overload-drop-probability))
overload-category = "oc COMMA" EQUAL overload-category-value
overload-category-value = 1*ALPHA
overload-drop-probability = "odp" EQUAL overload-drop-probability-value
overload-drop-probability-value = 1DIGIT/2DIGIT/"100"
5. IANA Considerations
Overload-Control is defined as an "entity" header and does not need
to be registered in IANA "Permanent Header Field Names" Registry
List.
TBD: May change based on input from experts
6. Security Considerations
HTTPS SHOULD be used between client and server if overload control
mechanism is used. This is needed to prevent attackers to change the
drop probability used by clients to a value other than the one
intended by the server.
7. Acknowledgements
Asveren Expires October 15, 2018 [Page 5]
Internet-Draft HTTP Overload Control April 2018
8. Appendix A: Example Message Flow
Client-1 Client-2 Server
| | |
Sends all requests | |
| | |
| | |
|-------Request(category1)--------------->|
| | |
| | |
|<------Response--------------------------|
| | |
| | |
| | Overload condition changes
| | It is decided to drop
| | 50% of category1 requests
| | |
| | |
|-------Request-------------------------->|
| | |
|<-Response(Overload-Control: oc=1;odp=50)|
| | |
Drops category1 requests | |
with a 50% probability | |
Sends all category2 requests |
| | |
| | |
| Sends all requests |
| | |
| |--Request--------------->|
| | |
| |<-Response(Overload-Control: oc=1;odp=50)
| | |
| Drops category1 requests |
| with a 50% probability |
| Sends all category2 requests |
| | |
| | |
| | |
9. Informative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
Asveren Expires October 15, 2018 [Page 6]
Internet-Draft HTTP Overload Control April 2018
[RFC7339] Gurbani, V., Ed., Hilt, V., and H. Schulzrinne, "Session
Initiation Protocol (SIP) Overload Control", RFC 7339,
DOI 10.17487/RFC7339, September 2014,
<https://www.rfc-editor.org/info/rfc7339>.
Author's Address
Tolga Asveren
Ribbon Communications
Freehold, NJ 07728
USA
Email: tasveren@rbbn.com
Asveren Expires October 15, 2018 [Page 7]