~ubuntu-branches/debian/stretch/haproxy/stretch

« back to all changes in this revision

Viewing changes to ROADMAP

  • Committer: Package Import Robot
  • Author(s): Apollon Oikonomopoulos
  • Date: 2014-06-20 11:05:17 UTC
  • mfrom: (1.1.15) (15.1.12 experimental)
  • Revision ID: package-import@ubuntu.com-20140620110517-u6q5p9kyy2f3ozw9
Tags: 1.5.0-1
* New upstream stable series. Notable changes since the 1.4 series:
  + Native SSL support on both sides with SNI/NPN/ALPN and OCSP stapling.
  + IPv6 and UNIX sockets are supported everywhere
  + End-to-end HTTP keep-alive for better support of NTLM and improved
    efficiency in static farms
  + HTTP/1.1 response compression (deflate, gzip) to save bandwidth
  + PROXY protocol versions 1 and 2 on both sides
  + Data sampling on everything in request or response, including payload
  + ACLs can use any matching method with any input sample
  + Maps and dynamic ACLs updatable from the CLI
  + Stick-tables support counters to track activity on any input sample
  + Custom format for logs, unique-id, header rewriting, and redirects
  + Improved health checks (SSL, scripted TCP, check agent, ...)
  + Much more scalable configuration supports hundreds of thousands of
    backends and certificates without sweating

* Upload to unstable, merge all 1.5 work from experimental. Most important
  packaging changes since 1.4.25-1 include:
  + systemd support.
  + A more sane default config file.
  + Zero-downtime upgrades between 1.5 releases by gracefully reloading
    HAProxy during upgrades.
  + HTML documentation shipped in the haproxy-doc package.
  + kqueue support for kfreebsd.

* Packaging changes since 1.5~dev26-2:
  + Drop patches merged upstream:
    o Fix-reference-location-in-manpage.patch
    o 0001-BUILD-stats-workaround-stupid-and-bogus-Werror-forma.patch
  + d/watch: look for stable 1.5 releases
  + systemd: respect CONFIG and EXTRAOPTS when specified in
    /etc/default/haproxy.
  + initscript: test the configuration before start or reload.
  + initscript: remove the ENABLED flag and logic.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
'+' = done, '-' = todo, '*' = done except doc
2
 
 
3
 
1.2.12 :
4
 
 + weighted RR/SH
5
 
 
6
 
1.2.13 :
7
 
 + maxconn
8
 
 + queueing
9
 
 
10
 
1.2.14 :
11
 
 + HTML status page
12
 
 
13
 
        stats enable
14
 
        stats uri /?stats  
15
 
        stats realm w.ods.org\ statistics
16
 
        stats auth user1:pass1
17
 
        stats auth user2:pass2
18
 
        stats auth user3:pass3
19
 
        stats scope <px_id> | '.'
20
 
 
21
 
 + allow server-less proxies (for stats)
22
 
 
23
 
 - separate timeout controls
24
 
 
25
 
 + option 'abortonclose' : if the session is queued or being connecting
26
 
   to the server, and the client sends a shutdown(), then decide to abort
27
 
   the session early because in most situations, this will be caused by
28
 
   a client hitting the 'Stop' button, so there's no reason to overload
29
 
   the servers with unservable requests. However, this is not HTTP compliant
30
 
   and might cause little trouble to some very specific clients used to
31
 
   close immediately after sending the request (no support for KA, which ones?)
32
 
 
33
 
 + minconn : makes the server's maxconn dynamic, which will be computed as a
34
 
   ratio of the proxy's sessions :
35
 
     srv->effective_maxconn =
36
 
          max(srv->maxconn * px->nbsess / px->maxconn, srv->minconn)
37
 
 
38
 
1.2.15 :
39
 
 + monitor-uri : specify an URI for which we will always return 'HTTP/1.0 200'
40
 
   and never forward nor log it.
41
 
 
42
 
 + option ssl-hello-chk : send SSLv3 client hello messages to check the servers
43
 
 
44
 
1.3 :
45
 
 - remove unused STATTIME
46
 
 
47
 
 - reference all the include files that must be created, possibly under subdirs :
48
 
 
49
 
   - acl.h      => more general ACL work
50
 
   - appcook.h  => appsession-related cookies
51
 
   - backend.h  => back-end part of the PR_O_* + backend definitions
52
 
   - buffers.h  => buffer management relying on memory.h
53
 
   - capture.h  => header and cookie capture
54
 
   - cfgparse.h => configuration parser
55
 
   - checks.h   => health checks
56
 
   - clireq.h   => the client side "request" part of the current sessions.
57
 
   - compat.h   => compatibility with other OSes (TCP_NODELAY, ...)
58
 
   - config.h   => config parameters, renamed CONFIG_HAP_*, includes defaults.h
59
 
   - controls.h => SN_CACHEABLE, ...
60
 
   - cookies.h  => definitions related to cookie management + SN_SCK_*
61
 
   - defaults.h => many default values, might disappear soon after cleanup
62
 
   - frontend.h => front-end part of the PR_O_* + client definitions + listeners
63
 
   - global.h   => shared global variables
64
 
   - http.h     => HTTP state definitions and transitions
65
 
   - httperr.{hc} => HTTP return codes
66
 
   - libtask.h  => task scheduler
67
 
   - libtime.h  => time-related definitions
68
 
   - loadbal.h  => load balancing algorithms
69
 
   - log.h      => log definitions
70
 
   - memory.h   => pools
71
 
   - polling.h  => definitions of select(), poll(), INTBITS, ...
72
 
   - queue.h    => queue management
73
 
   - regex.h    => filtering
74
 
   - servers.h  => servers definitions (SRV_*, states, ...)
75
 
   - fd.h       => FD_ST* (add FD_DGRAM), RES_*, socket states, etc...
76
 
   - srvreq.h   => the server side "request" part of the current sessions.
77
 
   - standard.h => general purpose macros and defines (eg: MIN/MAX, ...)
78
 
   - startup.h  => MODE_*
79
 
   - tuning.h   => platform-specific tuning parameters
80
 
 
81
 
 
82
 
 - clarify licence by adding a 'MODULE_LICENCE("GPL")' or something equivalent.
83
 
 
84
 
 - handle half-closed connections better (cli/srv would not distinguish
85
 
   DATA/SHUTR/SHUTW, it would be a session flag which would tell shutr/shutw).
86
 
   Check how it got changed in httpterm.
87
 
 
88
 
 - 3 memory models : failsafe (prealloc), normal (current), optimal (alloc on
89
 
   demand)
90
 
 
91
 
 - wait queues replaced for priority-based trees
92
 
 
93
 
 - ability to assign a prio based on L7 matching
94
 
 
95
 
 - prio-based O(1) scheduler
96
 
 
97
 
 - maxconn reserve for VIP/admins
98
 
 
99
 
 - verify if it would be worth implementing an epoll_ctl_batch() for Linux
100
 
 
101
 
 - balance LC/WLC (patch available)
102
 
 
103
 
 - option minservers XXX : activates some backup servers when active servers
104
 
   are insufficient
105
 
 
106
 
 - monitor minservers XXX : monitor-net and monitor-uri could report a failure
107
 
   when the number of active servers is below this threshold.
108
 
 
109
 
 - option smtp-chk : use SMTP health checks (avoid logs if possible)
110
 
 
111
 
 - new keyword 'check' : check http xxx, check smtp xxx, check ssl-hello
112
 
 
 
1
Medium-long term roadmap - 2014/06/19
 
2
 
 
3
Legend: '+' = done, '-' = todo, '*' = done except doc
 
4
 
 
5
1.6 or later :
 
6
  - POST parameter extraction and size/speed measurement to use in ACLs
 
7
 
 
8
  - return-html code xxx [ file "xxx" | text "xxx" ] if <acl>
 
9
 
 
10
  - return-raw  [ file "xxx" | text "xxx" ] if <acl>
 
11
 
 
12
  - avg connect time, response time, connect errors, response errors in stats
 
13
 
 
14
  - add the ability to only dump response errors to more easily detect
 
15
    anomalies without being polluted with attacks in requests.
 
16
 
 
17
  - have multi-criteria analysers which subscribe to req flags, rsp flags, and
 
18
    stream interface changes. This would result in a single analyser to wait
 
19
    for the end of data transfer in HTTP.
 
20
 
 
21
  - implement support for "connection freeze" after accept. A list of frozen
 
22
    connections should be maintained so that it is possible to recycle them
 
23
    when new file descriptors are required.
 
24
 
 
25
  - support for time-ordered priority queues with ability to add an offset
 
26
    based on request matching. Each session will have one ebtree node to be
 
27
    attached to whatever queue the session is waiting in.
 
28
 
 
29
  - add a flag in logs to indicate keep-alive requests ?
 
30
 
 
31
  - make it possible to condition a timeout on an ACL (dynamic timeouts)
 
32
 
 
33
  - forwardfor/originalto except with IPv6
 
34
 
 
35
  - remove lots of remaining Alert() calls or ensure that they forward to
 
36
    send_log() after the fork.
 
37
 
 
38
  - tcp-request session
 
39
 
 
40
  - tcp-request session expect-proxy {L4|L5} if ...
 
41
 
 
42
  - http-request track-sc* to avoid having the ugly "if !HTTP" in tcp-request
 
43
 
 
44
  - wait on resource (time, mem, CPU, socket, buffers, server's conn, server's rate, ...)
 
45
 
 
46
  - bandwidth limits
 
47
 
 
48
  - create internal services and make stats, CLI, etc... part of that.
 
49
 
 
50
  - buddy servers to build defined lists of failovers. Detect loops during
 
51
    the config check.
 
52
 
 
53
          server XXX buddy YYY
 
54
          server YYY    # may replace XXX when XXX fails
 
55
 
 
56
  - spare servers : servers which are used in LB only when a minimum farm
 
57
    weight threshold is not satisfied anymore. Useful for inter-site LB with
 
58
    local pref by default.
 
59
 
 
60
  - add support for event-triggered epoll, and maybe change all events handling
 
61
    to pass through an event cache to handle temporarily disabled events.
 
62
 
 
63
  - evaluate the changes required for multi-process+shared mem or multi-thread
 
64
    +thread-local+fast locking.
 
65
 
 
66
  - ability to decide whether to drain or kill sessions when putting a server
 
67
    to maintenance mode => requires a per-server session list and the change
 
68
    above.
 
69
 
 
70
Old, maybe obsolete points :
 
71
  - clarify licence by adding a 'MODULE_LICENCE("GPL")' or something equivalent.
 
72
 
 
73
  - 3 memory models : failsafe (prealloc), normal (current), optimal (alloc on
 
74
    demand)
 
75
 
 
76
  - implement support for event-triggerred epoll()
 
77
 
 
78
  - verify if it would be worth implementing an epoll_ctl_batch() for Linux
 
79
 
 
80
  - option minservers XXX : activates some spare servers when active servers
 
81
    are insufficient
 
82
 
 
83
  - new keyword 'check' : check http xxx, check smtp xxx, check ssl-hello
 
84
 
 
85
  - initcwnd parameter for bind sockets : needed in kernel first
 
86
 
 
87
  - have a callback function which would be called after a server is selected,
 
88
    for header post-processing. That would be mainly used to remove then add
 
89
    the server's name or cookie in a header so that the server knows it.
 
90
 
 
91
Unsorted :
 
92
  - outgoing log load-balancing (round-robin or hash among multiple servers)
 
93
 
 
94
  - internal socket for "server XXX frontend:name"
 
95
 
 
96
  - HTTP/2.0
 
97
 
 
98
  - DNS requests on health checks
 
99
 
 
100
  - XML inspection (content-switching for SOAP requests)
 
101
 
 
102
  - sync all stick-tables data, not just serverid.
 
103
 
 
104
  - request, session and user variables
 
105
 
 
106
  - random cookie generator
 
107
 
 
108
  - external checker
 
109
 
 
110
  - fastcgi to servers
 
111
 
 
112
  - hot config reload
 
113
 
 
114
  - RAM-based cache for small files
 
115
 
 
116
  - RHI - BGP
 
117
 
 
118
  - telnet/SSH cli
 
119
 
 
120
  - dynamic memory allocation
 
121
 
 
122
  - dynamic weights based on check response headers and traffic response time
 
123
 
 
124
  - various kernel-level acceleration (multi-accept, ssplice, epoll2...)