blob: 510181ba2955c0308750c65480dfaae3ed432af1 [file] [log] [blame]
Willy Tarreau941aac02014-05-10 13:34:32 +02001Medium-long term roadmap - 2014/05/10
willy tarreau814cbc62006-05-13 13:00:29 +02002
Willy Tarreau21475e32010-05-23 08:46:08 +02003Legend: '+' = done, '-' = todo, '*' = done except doc
willy tarreau814cbc62006-05-13 13:00:29 +02004
Willy Tarreau5f0eee72013-06-17 14:51:38 +020051.5 (ETA 2013/12/31) :
Willy Tarreau65ce3912010-11-24 16:21:56 +01006 - POST parameter extraction and size/speed measurement to use in ACLs
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +01007
Willy Tarreau21475e32010-05-23 08:46:08 +02008 - return-html code xxx [ file "xxx" | text "xxx" ] if <acl>
willy tarreau1f431b52006-05-21 14:46:15 +02009
Willy Tarreau65ce3912010-11-24 16:21:56 +010010 - return-raw [ file "xxx" | text "xxx" ] if <acl>
11
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010012 - avg connect time, response time, connect errors, response errors in stats
13
Willy Tarreau65ce3912010-11-24 16:21:56 +010014 - add the ability to only dump response errors to more easily detect
15 anomalies without being polluted with attacks in requests.
16
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010017 - 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
Willy Tarreau21475e32010-05-23 08:46:08 +020021 - 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.
Willy Tarreau1c47f852006-07-09 08:22:27 +020024
Willy Tarreau21475e32010-05-23 08:46:08 +020025 - 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.
Willy Tarreau1c47f852006-07-09 08:22:27 +020028
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010029 - add a flag in logs to indicate keep-alive requests ?
willy tarreau814cbc62006-05-13 13:00:29 +020030
Willy Tarreau5f0eee72013-06-17 14:51:38 +020031 - make it possible to condition a timeout on an ACL (dynamic timeouts)
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010032
33 - forwardfor/originalto except with IPv6
34
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010035 - remove lots of remaining Alert() calls or ensure that they forward to
36 send_log() after the fork.
37
Willy Tarreau5f0eee72013-06-17 14:51:38 +020038 - tcp-request session
39
Willy Tarreau3c212372013-12-17 00:35:27 +010040 - tcp-request session expect-proxy {L4|L5} if ...
Willy Tarreau5f0eee72013-06-17 14:51:38 +020041
Willy Tarreau3c212372013-12-17 00:35:27 +010042 - http-request track-sc* to avoid having the ugly "if !HTTP" in tcp-request
Willy Tarreau5f0eee72013-06-17 14:51:38 +020043
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010044DONE:
Willy Tarreau941aac02014-05-10 13:34:32 +020045 * half-closed timeouts ?
46
47 * add support for server-side unix sockets
48
Willy Tarreau3c212372013-12-17 00:35:27 +010049 * server-side HTTP keepalive
50 => maybe with limitation to only reuse connections that don't depend
51 on layer7 in a first time (just check the target).
52
53 * add support for complex pattern extraction rules :
54
55 pattern = <pattern_term>
56 | '{' pattern_expr '}'
57
58 pattern_expr = <pattern_term> [ <transform> ... ]
59 => changed to <sample>[,<conv>]*
60
61 * support loading data sets from files
62 * present/not present (eg: netmasks)
63 * pattern conversion per prefixes. Eg: convert src IP to country.
64 => maps
65
66 * what to do with data after a POST and how to detect some data were
67 received when responding ? In theory we should read everything because
68 the TCP stack does not notify us that the FIN was acked. In practice,
69 reading just before closing should be enough. Right now we simply read
70 whatever comes after the POST.
71 => switch the connection to a "drain" state, where it monitors its
72 output queue on each I/O and where it can be stolen if fds are
73 missing.
74
75 * tcp-request {connection|session} expect-proxy {L4|L5} if ...
76
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010077 * rename L4 acls as L6 ACLs when some content is involved
78
79 * add new L4 ACL checks immediately after accept, before even allocating the
80 buffers ("connection {accept|reject|delay|freeze} {if|unless}").
81
82 * make new patterns available based on stickiness matching :
83 * number of entries in table for the matched pattern
84 * same after having increased the match counter
85
86 * add support for concurrency match in tables
87 * just like stickiness, but counted per session (or request), increased
Willy Tarreau21475e32010-05-23 08:46:08 +020088 on first match and decreased at end of request or connection. This
89 requires that the session has a list of matched terms that must be
90 released at the end.
willy tarreau814cbc62006-05-13 13:00:29 +020091
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010092 * http_req_first ACL
93
94 * expirable cookies + "preserve"
95
96 * ECV, LDAPv3 & MySQL checks
97
98 * configurable check buffer size
99
100 * stats + ON/OFF
101
102 * halog: sort by URL
103
104 * "PROXY" protocol
105
Willy Tarreau65ce3912010-11-24 16:21:56 +0100106 * add support for client-side unix sockets
107
108 * hash: rehash non-consistent hashes with chash() for more randomness.
109
Willy Tarreaub5495552011-03-01 21:28:51 +0100110 * add an error ID in captures to ease new error detection for scripts.
111
Willy Tarreaua1525cd2011-03-16 06:54:36 +0100112 * try to remove srv==NULL internally and assign a dummy server to each backend
113 for dispatch, http_proxy and transparent modes. => done differently with the
114 target descriptors. The dummy server code exists in the "dummysrv" branch
115 which will die since it does not make sense anymore.
116
Willy Tarreaube2e1d32011-03-29 01:00:12 +0200117 * ACL to report number of used entries in a table
118
Willy Tarreaubf8f6812011-09-10 23:40:59 +0200119 * automatically compute fullconn for backends : by default, set it to
120 10% of the sum of the maxconn of all unique frontends which reference
121 it via use_backend, default_backend or that are in the same listen.
122
123 * count number of monitor requests on frontends, that's the only way
124 to explain the possible huge difference between frontend and backend
125 sessions.
126
Willy Tarreau5f0eee72013-06-17 14:51:38 +0200127 * assign a nice priority based on ACLs.
128
129 * set-log-level if <acl> (front/back)
130
131 * fix "PR--" flags when accessing stats
132
133 * merged ACL/fetches
134
135 * use_server ... if ...
136
137 * ability to kill an arbitrary session from the command line. Put a "kill now"
138 flag in every session which preempts any other processing and wake the
139 session up.
Willy Tarreau65ce3912010-11-24 16:21:56 +0100140
Willy Tarreau85ac9422014-04-23 01:44:32 +0200141 * add a last activity date for each server (req/resp) that will be
142 displayed in the stats. It will be useful with soft stop.
143
144 * compression : to be fixed
145
146 * ACL feeding via the UNIX socket
147
148 * lookup tables (eg: map IP to country)
149
Willy Tarreau21475e32010-05-23 08:46:08 +02001501.6 (will probably change anyway) :
Willy Tarreau5f0eee72013-06-17 14:51:38 +0200151 - wait on resource (time, mem, CPU, socket, buffers, server's conn, server's rate, ...)
willy tarreau814cbc62006-05-13 13:00:29 +0200152
Willy Tarreau21475e32010-05-23 08:46:08 +0200153 - bandwidth limits
willy tarreau814cbc62006-05-13 13:00:29 +0200154
Willy Tarreau21475e32010-05-23 08:46:08 +0200155 - create internal services and make stats, CLI, etc... part of that.
Willy Tarreau1c47f852006-07-09 08:22:27 +0200156
Willy Tarreau21475e32010-05-23 08:46:08 +0200157 - buddy servers to build defined lists of failovers. Detect loops during
158 the config check.
159
160 server XXX buddy YYY
161 server YYY # may replace XXX when XXX fails
162
163 - spare servers : servers which are used in LB only when a minimum farm
164 weight threshold is not satisfied anymore. Useful for inter-site LB with
165 local pref by default.
166
Willy Tarreau65ce3912010-11-24 16:21:56 +0100167 - add support for event-triggered epoll, and maybe change all events handling
168 to pass through an event cache to handle temporarily disabled events.
169
170 - evaluate the changes required for multi-process+shared mem or multi-thread
171 +thread-local+fast locking.
Willy Tarreau1c47f852006-07-09 08:22:27 +0200172
Willy Tarreaub5495552011-03-01 21:28:51 +0100173 - ability to decide whether to drain or kill sessions when putting a server
174 to maintenance mode => requires a per-server session list and the change
175 above.
176
Willy Tarreau21475e32010-05-23 08:46:08 +0200177Old, maybe obsolete points
178 - clarify licence by adding a 'MODULE_LICENCE("GPL")' or something equivalent.
179
180 - 3 memory models : failsafe (prealloc), normal (current), optimal (alloc on
181 demand)
182
Willy Tarreau21475e32010-05-23 08:46:08 +0200183 - implement support for event-triggerred epoll()
184
185 - verify if it would be worth implementing an epoll_ctl_batch() for Linux
186
187 - option minservers XXX : activates some spare servers when active servers
188 are insufficient
Willy Tarreau1c47f852006-07-09 08:22:27 +0200189
190 - new keyword 'check' : check http xxx, check smtp xxx, check ssl-hello
191
Willy Tarreaubf8f6812011-09-10 23:40:59 +0200192 - initcwnd parameter for bind sockets : needed in kernel first
Willy Tarreau5f0eee72013-06-17 14:51:38 +0200193
Willy Tarreau941aac02014-05-10 13:34:32 +0200194 - have a callback function which would be called after a server is selected,
195 for header post-processing. That would be mainly used to remove then add
196 the server's name or cookie in a header so that the server knows it.
197
Willy Tarreau5f0eee72013-06-17 14:51:38 +0200198Unsorted :
199 - outgoing log load-balancing (round-robin or hash among multiple servers)
200 - internal socket for "server XXX frontend:name"
Willy Tarreau5f0eee72013-06-17 14:51:38 +0200201 - HTTP/2.0
202 - DNS requests on health checks
203 - XML inspection (content-switching for SOAP requests)
Willy Tarreau5f0eee72013-06-17 14:51:38 +0200204 - sync all stick-tables data, not just serverid.
205 - request, session and user variables
206 - random cookie generator
207 - external checker
208 - fastcgi to servers
209 - hot config reload
210 - RAM-based cache for small files
211 - RHI - BGP
212 - telnet/SSH cli
213 - dynamic memory allocation
214 - dynamic weights based on check response headers and traffic response time
215 - various kernel-level acceleration (multi-accept, ssplice, epoll2...)
216 - "show stats detail" with a different output format and encoding of quotes