blob: efcadefa1de94aa14235951337263eca31f890fd [file] [log] [blame]
Willy Tarreau21475e32010-05-23 08:46:08 +02001Medium-long term roadmap - 2010/04/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 Tarreau21475e32010-05-23 08:46:08 +020051.5 (ETA 2010/12/31) :
6 - server-side HTTP keepalive
willy tarreau814cbc62006-05-13 13:00:29 +02007
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +01008 - POST parameter extraction
9
Willy Tarreau21475e32010-05-23 08:46:08 +020010 - return-html code xxx [ file "xxx" | text "xxx" ] if <acl>
willy tarreau1f431b52006-05-21 14:46:15 +020011
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010012 - avg connect time, response time, connect errors, response errors in stats
13
Willy Tarreau21475e32010-05-23 08:46:08 +020014 - return-raw [ file "xxx" | text "xxx" ] if <acl>
willy tarreau814cbc62006-05-13 13:00:29 +020015
Willy Tarreau21475e32010-05-23 08:46:08 +020016 - add support for client-side and server-side unix sockets
willy tarreau38d79062006-05-21 14:47:13 +020017
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010018 - have multi-criteria analysers which subscribe to req flags, rsp flags, and
19 stream interface changes. This would result in a single analyser to wait
20 for the end of data transfer in HTTP.
21
Willy Tarreau21475e32010-05-23 08:46:08 +020022 - try to remove srv==NULL internally and assign a dummy server to each backend
23 for dispatch, http_proxy and transparent modes.
willy tarreau814cbc62006-05-13 13:00:29 +020024
Willy Tarreau21475e32010-05-23 08:46:08 +020025 - implement support for "connection freeze" after accept. A list of frozen
26 connections should be maintained so that it is possible to recycle them
27 when new file descriptors are required.
Willy Tarreau1c47f852006-07-09 08:22:27 +020028
Willy Tarreau21475e32010-05-23 08:46:08 +020029 - support for time-ordered priority queues with ability to add an offset
30 based on request matching. Each session will have one ebtree node to be
31 attached to whatever queue the session is waiting in.
Willy Tarreau1c47f852006-07-09 08:22:27 +020032
Willy Tarreau21475e32010-05-23 08:46:08 +020033 - assign a nice priority based on ACLs.
Willy Tarreaubaaee002006-06-26 02:48:02 +020034
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010035 - dontlog if <acl> (front/back)
36
37 - fix "PR--" flags when accessing stats
38
Willy Tarreau21475e32010-05-23 08:46:08 +020039 - pattern extraction is needed for ACLs and stickiness. It would work like
40 this :
Willy Tarreaubaaee002006-06-26 02:48:02 +020041
Willy Tarreau21475e32010-05-23 08:46:08 +020042 acl <name> <pattern> [-i] <values>...
Willy Tarreaubaaee002006-06-26 02:48:02 +020043
Willy Tarreau21475e32010-05-23 08:46:08 +020044 All ACL fetch method currently available would be transformed into pattern
45 extraction methods. That way we could stick on hdr(x-forwarded-for) or use
46 source 0.0.0.0 usesrc <pattern> (such as "hdr_ip(headername)"). Note that
47 ACLs sometimes need iterative matching/extraction.
Willy Tarreaubaaee002006-06-26 02:48:02 +020048
Willy Tarreau21475e32010-05-23 08:46:08 +020049 - add support for complex pattern extraction rules :
Willy Tarreaubaaee002006-06-26 02:48:02 +020050
Willy Tarreau21475e32010-05-23 08:46:08 +020051 pattern = <pattern_term>
52 | '{' pattern_expr '}'
willy tarreau814cbc62006-05-13 13:00:29 +020053
Willy Tarreau21475e32010-05-23 08:46:08 +020054 pattern_expr = <pattern_term> [ <transform> ... ]
willy tarreau814cbc62006-05-13 13:00:29 +020055
Willy Tarreau21475e32010-05-23 08:46:08 +020056 - support loading data sets from files
57 + present/not present (eg: netmasks)
58 - pattern conversion per prefixes. Eg: convert src IP to country.
willy tarreau814cbc62006-05-13 13:00:29 +020059
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010060 - add a last activity date for each server (req/resp) that will be
61 displayed in the stats. It will be useful with soft stop.
62
63 - add the ability to only dump response errors to more easily detect
64 anomalies without being polluted with attacks in requests.
65
66 - add an error ID in captures to ease new error detection for scripts.
67
68 - automatically compute fullconn for backends : by default, set it to
69 10% of the sum of the maxconn of all unique frontends which reference
70 it via use_backend, default_backend or that are in the same listen.
71
72 - hash: rehash non-consistent hashes with chash() for more randomness.
73
74 - what to do with data after a POST and how to detect some data were
75 received when responding ? In theory we should read everything because
76 the TCP stack does not notify us that the FIN was acked. In practice,
77 reading just before closing should be enough. Right now we simply read
78 whatever comes after the POST.
79
80 - half-closed timeouts ?
81
82 - add a flag in logs to indicate keep-alive requests ?
willy tarreau814cbc62006-05-13 13:00:29 +020083
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +010084 - make it possible to condition a timeout on an ACL
85
86 - forwardfor/originalto except with IPv6
87
88 - have a callback function which would be called after a server is selected,
89 for header post-processing. That would be mainly used to remove then add
90 the server's name or cookie in a header so that the server knows it.
91
92 - remove lots of remaining Alert() calls or ensure that they forward to
93 send_log() after the fork.
94
95DONE:
96 * rename L4 acls as L6 ACLs when some content is involved
97
98 * add new L4 ACL checks immediately after accept, before even allocating the
99 buffers ("connection {accept|reject|delay|freeze} {if|unless}").
100
101 * make new patterns available based on stickiness matching :
102 * number of entries in table for the matched pattern
103 * same after having increased the match counter
104
105 * add support for concurrency match in tables
106 * just like stickiness, but counted per session (or request), increased
Willy Tarreau21475e32010-05-23 08:46:08 +0200107 on first match and decreased at end of request or connection. This
108 requires that the session has a list of matched terms that must be
109 released at the end.
willy tarreau814cbc62006-05-13 13:00:29 +0200110
Willy Tarreau0a6b1fd2010-11-14 14:23:22 +0100111 * http_req_first ACL
112
113 * expirable cookies + "preserve"
114
115 * ECV, LDAPv3 & MySQL checks
116
117 * configurable check buffer size
118
119 * stats + ON/OFF
120
121 * halog: sort by URL
122
123 * "PROXY" protocol
124
Willy Tarreau21475e32010-05-23 08:46:08 +02001251.6 (will probably change anyway) :
126 - wait on resource (mem, socket, server's conn, server's rate, ...)
willy tarreau814cbc62006-05-13 13:00:29 +0200127
Willy Tarreau21475e32010-05-23 08:46:08 +0200128 - bandwidth limits
willy tarreau814cbc62006-05-13 13:00:29 +0200129
Willy Tarreau21475e32010-05-23 08:46:08 +0200130 - create internal services and make stats, CLI, etc... part of that.
Willy Tarreau1c47f852006-07-09 08:22:27 +0200131
Willy Tarreau21475e32010-05-23 08:46:08 +0200132 - use_server ... if ...
133
134 - buddy servers to build defined lists of failovers. Detect loops during
135 the config check.
136
137 server XXX buddy YYY
138 server YYY # may replace XXX when XXX fails
139
140 - spare servers : servers which are used in LB only when a minimum farm
141 weight threshold is not satisfied anymore. Useful for inter-site LB with
142 local pref by default.
143
Willy Tarreau1c47f852006-07-09 08:22:27 +0200144
Willy Tarreau21475e32010-05-23 08:46:08 +0200145Old, maybe obsolete points
146 - clarify licence by adding a 'MODULE_LICENCE("GPL")' or something equivalent.
147
148 - 3 memory models : failsafe (prealloc), normal (current), optimal (alloc on
149 demand)
150
151 - ability to assign a task priority based on L7 matching
Willy Tarreau1c47f852006-07-09 08:22:27 +0200152
Willy Tarreau21475e32010-05-23 08:46:08 +0200153 - implement support for event-triggerred epoll()
154
155 - verify if it would be worth implementing an epoll_ctl_batch() for Linux
156
157 - option minservers XXX : activates some spare servers when active servers
158 are insufficient
Willy Tarreau1c47f852006-07-09 08:22:27 +0200159
160 - new keyword 'check' : check http xxx, check smtp xxx, check ssl-hello
161