Configuration¶
Here is an example config file:
addrlist:
- localhost:4443
- localhost:4444
- localhost:4445
filter: True
incoming-proxy:
host: localhost
port: 2099
protocol: ssl
diff-class: "rddr_diff_builtins.RddrHttpDiff"
enforcing: True
outgoing-proxies:
1.2.3.4:3036:
host: localhost
ports:
- 30001
- 30002
- 30003
diff-class: "rddr_diff_builtins.RddrJsonDiff"
protocol: tcp
enforcing: True
5.6.7.8:443:
host: localhost
ports:
- 40001
- 40002
- 40003
diff-class: "rddr_diff_builtins.RddrByteDiff"
protocol: ssl
enforcing: True
verbosity: "DEBUG"
And here is what each of these options configures:
- addrlist
Addresses (host:port) of the N application variants we want to proxy. If you are doing filtering (i.e. filter is True), make sure the addresses of the two instances comprising your filter pair appear first in this list.
- filter
Specify whether or not to filter non-deterministic noise. This requires you to deploy two identical application instances. This is known as the filter pair. You must list the filter pair instances as the first two entries in addrlist.
- incoming-proxy
Configuration of the single proxy for incoming requests to the N variants
- host
Host of incoming proxy
- port
Port of incoming proxy
- protocol
The transport protocol to use for this proxy. One of
tcp,ssl.- diff-class
Python class to import for filtering non-deterministic noise. This class must implement the functions
diff_trafficandmodify_traffic. RDDR ships with four such classes:rddr_diff_builtins.RddrHttpDiff,rddr_diff_builtins.RddrJsonDiff,rddr_diff_builtins.RddrByteDiff, andrddr_diff_builtins.RddrPostgresDiff,- enforcing
When the N variants’ responses to a request differ (after filtering non-deterministic noise),
enforcingdetermines whether or not the server will forward the merged response to the client.enforcing = Truewill block the response.
- outgoing-proxies
Configure one outgoing proxy per backend service that the N variants make requests to.
- <dest 1>
This proxy will forward traffic to this destination. Specify the destination as in
addrlist: host:port- host
The hostname or IP which the proxy will bind to.
- ports
The list of ports which the proxy will bind to. Each port should accept connections from one of the N instances. The first port in the list corresponds to the first instance in addrlist, the second port with the second instance, and so on. Update the N variants to send their requests to the bound host and the port associated with them. Proxy will bind to <host>:<port_1>, …, <host>:<port_N>.
- protocol
The transport protocol to use for this proxy. One of
tcp,ssl.- diff-class
Python class to import for filtering non-deterministic noise.
- enforcing
If the N variants differ in their outgoing requests (after filtering non-deterministic noise),
enforcingdetermines whether or not the server will forward the merged response to the client.enforcing = Truewill block the request.
…
- verbosity
Verbosity level. One of
INFO,DEBUG,WARNING,ERROR.
This RDDR deployment can be visualized as:
Block diagram of the above configuration¶