blob: 1c289d1b1c3bd75f16bcbe2afb4c6652e8e6292c [file] [log] [blame]
Willy Tarreaub5495552011-03-01 21:28:51 +01001Medium-long term roadmap - 2011/03/01
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 Tarreau21475e32010-05-23 08:46:08 +020051.5 (ETA 2010/12/31) :
Willy Tarreau1bd53be2011-03-22 14:38:00 +01006 - count number of monitor requests on frontends, that's the only way
7 to explain the possible huge difference between frontend and backend
8 sessions.
9
Willy Tarreaua1525cd2011-03-16 06:54:36 +010010 - ACL to report number of used entries in a table
11
Willy Tarreau21475e32010-05-23 08:46:08 +020012 - server-side HTTP keepalive
Willy Tarreaua1525cd2011-03-16 06:54:36 +010013 => maybe with limitation to only reuse connections that don't depend
14 on layer7 in a first time (just check the target).
willy tarreau814cbc62006-05-13 13:00:29 +020015
Willy Tarreau65ce3912010-11-24 16:21:56 +010016 - POST parameter extraction and size/speed measurement to use in ACLs
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010017
Willy Tarreau21475e32010-05-23 08:46:08 +020018 - return-html code xxx [ file "xxx" | text "xxx" ] if <acl>
willy tarreau1f431b52006-05-21 14:46:15 +020019
Willy Tarreau65ce3912010-11-24 16:21:56 +010020 - return-raw [ file "xxx" | text "xxx" ] if <acl>
21
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010022 - avg connect time, response time, connect errors, response errors in stats
23
Willy Tarreau65ce3912010-11-24 16:21:56 +010024 - add a last activity date for each server (req/resp) that will be
25 displayed in the stats. It will be useful with soft stop.
26
27 - add the ability to only dump response errors to more easily detect
28 anomalies without being polluted with attacks in requests.
29
Willy Tarreau65ce3912010-11-24 16:21:56 +010030 - add support for server-side unix sockets
willy tarreau38d79062006-05-21 14:47:13 +020031
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010032 - have multi-criteria analysers which subscribe to req flags, rsp flags, and
33 stream interface changes. This would result in a single analyser to wait
34 for the end of data transfer in HTTP.
35
Willy Tarreau21475e32010-05-23 08:46:08 +020036 - implement support for "connection freeze" after accept. A list of frozen
37 connections should be maintained so that it is possible to recycle them
38 when new file descriptors are required.
Willy Tarreau1c47f852006-07-09 08:22:27 +020039
Willy Tarreau21475e32010-05-23 08:46:08 +020040 - support for time-ordered priority queues with ability to add an offset
41 based on request matching. Each session will have one ebtree node to be
42 attached to whatever queue the session is waiting in.
Willy Tarreau1c47f852006-07-09 08:22:27 +020043
Willy Tarreau21475e32010-05-23 08:46:08 +020044 - assign a nice priority based on ACLs.
Willy Tarreaubaaee002006-06-26 02:48:02 +020045
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010046 - dontlog if <acl> (front/back)
47
48 - fix "PR--" flags when accessing stats
49
Willy Tarreau21475e32010-05-23 08:46:08 +020050 - pattern extraction is needed for ACLs and stickiness. It would work like
51 this :
Willy Tarreaubaaee002006-06-26 02:48:02 +020052
Willy Tarreau21475e32010-05-23 08:46:08 +020053 acl <name> <pattern> [-i] <values>...
Willy Tarreaubaaee002006-06-26 02:48:02 +020054
Willy Tarreau21475e32010-05-23 08:46:08 +020055 All ACL fetch method currently available would be transformed into pattern
56 extraction methods. That way we could stick on hdr(x-forwarded-for) or use
57 source 0.0.0.0 usesrc <pattern> (such as "hdr_ip(headername)"). Note that
58 ACLs sometimes need iterative matching/extraction.
Willy Tarreaubaaee002006-06-26 02:48:02 +020059
Willy Tarreau21475e32010-05-23 08:46:08 +020060 - add support for complex pattern extraction rules :
Willy Tarreaubaaee002006-06-26 02:48:02 +020061
Willy Tarreau21475e32010-05-23 08:46:08 +020062 pattern = <pattern_term>
63 | '{' pattern_expr '}'
willy tarreau814cbc62006-05-13 13:00:29 +020064
Willy Tarreau21475e32010-05-23 08:46:08 +020065 pattern_expr = <pattern_term> [ <transform> ... ]
willy tarreau814cbc62006-05-13 13:00:29 +020066
Willy Tarreau21475e32010-05-23 08:46:08 +020067 - support loading data sets from files
68 + present/not present (eg: netmasks)
69 - pattern conversion per prefixes. Eg: convert src IP to country.
willy tarreau814cbc62006-05-13 13:00:29 +020070
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010071 - automatically compute fullconn for backends : by default, set it to
72 10% of the sum of the maxconn of all unique frontends which reference
73 it via use_backend, default_backend or that are in the same listen.
74
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010075 - what to do with data after a POST and how to detect some data were
76 received when responding ? In theory we should read everything because
77 the TCP stack does not notify us that the FIN was acked. In practice,
78 reading just before closing should be enough. Right now we simply read
79 whatever comes after the POST.
Willy Tarreaua1525cd2011-03-16 06:54:36 +010080 => switch the connection to a "drain" state, where it monitors its
81 output queue on each I/O and where it can be stolen if fds are
82 missing.
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010083
84 - half-closed timeouts ?
85
86 - add a flag in logs to indicate keep-alive requests ?
willy tarreau814cbc62006-05-13 13:00:29 +020087
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010088 - make it possible to condition a timeout on an ACL
89
90 - forwardfor/originalto except with IPv6
91
92 - have a callback function which would be called after a server is selected,
93 for header post-processing. That would be mainly used to remove then add
94 the server's name or cookie in a header so that the server knows it.
95
96 - remove lots of remaining Alert() calls or ensure that they forward to
97 send_log() after the fork.
98
Willy Tarreau65ce3912010-11-24 16:21:56 +010099 - initcwnd parameter for bind sockets
100
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +0100101DONE:
102 * rename L4 acls as L6 ACLs when some content is involved
103
104 * add new L4 ACL checks immediately after accept, before even allocating the
105 buffers ("connection {accept|reject|delay|freeze} {if|unless}").
106
107 * make new patterns available based on stickiness matching :
108 * number of entries in table for the matched pattern
109 * same after having increased the match counter
110
111 * add support for concurrency match in tables
112 * just like stickiness, but counted per session (or request), increased
Willy Tarreau21475e32010-05-23 08:46:08 +0200113 on first match and decreased at end of request or connection. This
114 requires that the session has a list of matched terms that must be
115 released at the end.
willy tarreau814cbc62006-05-13 13:00:29 +0200116
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +0100117 * http_req_first ACL
118
119 * expirable cookies + "preserve"
120
121 * ECV, LDAPv3 & MySQL checks
122
123 * configurable check buffer size
124
125 * stats + ON/OFF
126
127 * halog: sort by URL
128
129 * "PROXY" protocol
130
Willy Tarreau65ce3912010-11-24 16:21:56 +0100131 * add support for client-side unix sockets
132
133 * hash: rehash non-consistent hashes with chash() for more randomness.
134
Willy Tarreaub5495552011-03-01 21:28:51 +0100135 * add an error ID in captures to ease new error detection for scripts.
136
Willy Tarreaua1525cd2011-03-16 06:54:36 +0100137 * try to remove srv==NULL internally and assign a dummy server to each backend
138 for dispatch, http_proxy and transparent modes. => done differently with the
139 target descriptors. The dummy server code exists in the "dummysrv" branch
140 which will die since it does not make sense anymore.
141
Willy Tarreau65ce3912010-11-24 16:21:56 +0100142
Willy Tarreau21475e32010-05-23 08:46:08 +02001431.6 (will probably change anyway) :
144 - wait on resource (mem, socket, server's conn, server's rate, ...)
willy tarreau814cbc62006-05-13 13:00:29 +0200145
Willy Tarreau21475e32010-05-23 08:46:08 +0200146 - bandwidth limits
willy tarreau814cbc62006-05-13 13:00:29 +0200147
Willy Tarreau21475e32010-05-23 08:46:08 +0200148 - create internal services and make stats, CLI, etc... part of that.
Willy Tarreau1c47f852006-07-09 08:22:27 +0200149
Willy Tarreau21475e32010-05-23 08:46:08 +0200150 - use_server ... if ...
151
152 - buddy servers to build defined lists of failovers. Detect loops during
153 the config check.
154
155 server XXX buddy YYY
156 server YYY # may replace XXX when XXX fails
157
158 - spare servers : servers which are used in LB only when a minimum farm
159 weight threshold is not satisfied anymore. Useful for inter-site LB with
160 local pref by default.
161
Willy Tarreau65ce3912010-11-24 16:21:56 +0100162 - add support for event-triggered epoll, and maybe change all events handling
163 to pass through an event cache to handle temporarily disabled events.
164
165 - evaluate the changes required for multi-process+shared mem or multi-thread
166 +thread-local+fast locking.
Willy Tarreau1c47f852006-07-09 08:22:27 +0200167
Willy Tarreaub5495552011-03-01 21:28:51 +0100168 - ability to kill an arbitrary session from the command line. Put a "kill now"
169 flag in every session which preempts any other processing and wake the
170 session up.
171
172 - ability to decide whether to drain or kill sessions when putting a server
173 to maintenance mode => requires a per-server session list and the change
174 above.
175
Willy Tarreau21475e32010-05-23 08:46:08 +0200176Old, maybe obsolete points
177 - clarify licence by adding a 'MODULE_LICENCE("GPL")' or something equivalent.
178
179 - 3 memory models : failsafe (prealloc), normal (current), optimal (alloc on
180 demand)
181
182 - ability to assign a task priority based on L7 matching
Willy Tarreau1c47f852006-07-09 08:22:27 +0200183
Willy Tarreau21475e32010-05-23 08:46:08 +0200184 - implement support for event-triggerred epoll()
185
186 - verify if it would be worth implementing an epoll_ctl_batch() for Linux
187
188 - option minservers XXX : activates some spare servers when active servers
189 are insufficient
Willy Tarreau1c47f852006-07-09 08:22:27 +0200190
191 - new keyword 'check' : check http xxx, check smtp xxx, check ssl-hello
192