You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
DOC-5241 Cassandra Native Protocol v5 support (#230)
* v5 support
* Apply suggestions from code review
* sme review
* sme review pt 2
* remaining SME questions
* Update modules/ROOT/pages/manage-proxy-instances.adoc
Copy file name to clipboardExpand all lines: modules/ROOT/pages/connect-clients-to-proxy.adoc
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -179,7 +179,7 @@ The following sample client applications demonstrate how to use the Java driver
179
179
180
180
See your driver's documentation for code samples that are specific to your chosen driver, including cluster connection examples and statement execution examples.
181
181
182
-
You can use the provided sample client applications, in addition to your own client applications, to validate that your {product-proxy} deployment is orchestrating read and write requests as expected between the origin cluster, target cluster, and your client applications.
182
+
You can use the provided sample client applications, in addition to your own client applications, to validate that your {product-proxy} deployment orchestrates read and write requests as expected between the origin cluster, target cluster, and client applications.
183
183
184
184
{product-demo}::
185
185
https://github.com/alicel/zdm-demo-client/[{product-demo}] is a minimal Java web application which provides a simple, stripped-down example of an application built to work with {product-proxy}.
Copy file name to clipboardExpand all lines: modules/ROOT/pages/deploy-proxy-monitoring.adoc
+13-5Lines changed: 13 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -27,9 +27,9 @@ ubuntu@52772568517c:~$
27
27
28
28
. List (`ls`) the contents of the Ansible Control Host Docker container, and then find the `zdm-proxy-automation` directory.
29
29
30
-
. Change (`cd`) to the `zdm-proxy-automation/ansible` directory.
30
+
. Change (`cd`) to the `zdm-proxy-automation/ansible/vars` directory.
31
31
32
-
. List the contents of the `ansible` directory, and then find the following YAML configuration files:
32
+
. List the contents of the `vars` directory, and then find the following YAML configuration files:
33
33
+
34
34
* `zdm_proxy_container_config.yml`: Internal configuration for the proxy container itself.
35
35
* `zdm_proxy_cluster_config.yml`: Configuration properties to connect {product-proxy} to the origin and target clusters.
@@ -228,7 +228,13 @@ For more information, see xref:ROOT:manage-proxy-instances.adoc[].
228
228
Typically the advanced configuration variables don't need to be changed.
229
229
Only modify the variables in `zdm_proxy_advanced_config.yml` if you have a specific use case that requires changing them.
230
230
231
-
If the following advanced configuration variables need to be changed, only do so _before_ deploying {product-proxy}:
231
+
[IMPORTANT]
232
+
====
233
+
The following advanced configuration variables are immutable.
234
+
If you need to change these variables, {company} recommends that you do so _before_ deploying {product-proxy}.
235
+
Future changes require you to recreate your entire {product-proxy} deployment.
236
+
For more information, see xref:ROOT:manage-proxy-instances.adoc#change-immutable-configuration-variables[Change immutable configuration variables].
237
+
====
232
238
233
239
Multi-datacenter clusters::
234
240
For xref:ROOT:deployment-infrastructure.adoc#multiple-datacenter-clusters[multi-datacenter origin clusters], specify the name of the datacenter that {product-proxy} should consider local.
@@ -241,8 +247,8 @@ For information about downloading a region-specific {scb-short}, see xref:astra-
241
247
242
248
[#ports]
243
249
Ports::
244
-
Each {product-proxy} instance listens on port 9042 by default, like a regular {cass-short} cluster.
245
-
This can be overridden by setting `zdm_proxy_listen_port` to a different value.
250
+
Each {product-proxy} instance listens on port 9042 by default, like a default {cass-short} cluster.
251
+
You can override this by setting `zdm_proxy_listen_port` to your preferred port.
246
252
This can be useful if the origin nodes listen on a port that is not 9042 and you want to configure {product-proxy} to listen on that same port to avoid changing the port in your client application configuration.
247
253
+
248
254
{product-proxy} exposes metrics on port 14001 by default.
@@ -467,6 +473,8 @@ If you want to enable TLS after the initial deployment, you must rerun the deplo
467
473
After modifying all necessary configuration variables, you are ready to deploy your {product-proxy} instances.
468
474
469
475
. From your shell connected to the Control Host, make sure you are in the `ansible` directory at `/home/ubuntu/zdm-proxy-automation/ansible`.
476
+
+
477
+
If you are in the `vars` directory, then you must go up one level to the `ansible` directory.
Copy file name to clipboardExpand all lines: modules/ROOT/pages/feasibility-checklists.adoc
+94-4Lines changed: 94 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,13 +8,98 @@ You might need to adjust your data model or application logic to ensure compatib
8
8
9
9
If you cannot meet these requirements, particularly the cluster and schema compatibility requirements, see xref:ROOT:components.adoc[] for alternative migration tools and strategies.
If `v5` is requested, the proxy handles protocol negotiation so that the client application properly downgrades the protocol version to `v4`.
17
-
This means that you can use {product-proxy} with any client application that uses a driver version supporting protocol version `v5`, as long as the application doesn't use `v5`-specific functionality.
16
+
When a specific protocol version is requested, {product-proxy} handles protocol negotiation to ensure the requested version is supported by both clusters.
17
+
For example, to use protocol `V5` with {product-proxy}, both the origin and target clusters must support `V5`, such as {hcd-short} or open source {cass-reg} 4.0 or later.
18
+
Otherwise, a lower protocol version must be used.
19
+
20
+
If the requested version isn't mutually supported, then {product-proxy} can force the client application to downgrade to a mutually supported protocol version.
21
+
If automatic forced downgrade isn't possible, then the connection fails, and you must modify your client application to request a different protocol version.
22
+
23
+
.Determine your client application's supported and negotiated protocol versions
24
+
[%collapsible]
25
+
====
26
+
Outside of a migration scenario (without {product-proxy}), the supported protocol versions depend on your origin cluster's version and client application's driver version.
27
+
28
+
Generally, when connecting to a cluster, the driver requests the highest protocol version that it supports.
29
+
If the cluster supports that version, then the connection uses that version.
30
+
If the cluster doesn't support that version, then the driver progressively requests lower versions until it finds a mutually supported version.
31
+
32
+
For example, if the cluster and driver both support `V5`, then your client application uses `V5` automatically unless you explicitly disable `V5` in your driver configuration.
33
+
34
+
If you upgrade your cluster, driver, or both to a version with a higher mutually supported protocol version, then the driver automatically starts using the higher version unless you explicitly disable it in your driver configuration.
35
+
36
+
When you introduce {product-proxy}, the target cluster is integrated into the protocol negotiation process to ensure that the negotiated protocol version is supported by the origin cluster, target cluster, and driver.
37
+
====
38
+
39
+
=== Considerations and requirements for `V5`
40
+
41
+
Required {product-proxy} version::
42
+
Official support for `V5` requires {product-proxy} version 2.4.0 or later.
43
+
44
+
Use cases requiring `V5`::
45
+
You are required to use `V5` only if your client application uses `V5`-specific functionality.
46
+
47
+
Potential performance impact between `V5` and earlier versions::
48
+
Protocol `V5` has improved integrity checks compared to earlier versions.
49
+
This can cause slight performance degradation when your client application begins to use `V5` after using an earlier version.
50
+
+
51
+
{company} performance tests showed potential throughput reductions ranging from 0 to 15 percent.
52
+
This performance impact can occur with and without {product-proxy}.
53
+
+
54
+
[TIP]
55
+
====
56
+
If your client application already uses `V5`, it is likely that you already adjusted to any potential performance impact, and the protocol version will have little or no impact on performance during your migration.
57
+
====
58
+
+
59
+
If you plan to upgrade to a `V5`-compatible driver before or during your migration, then the potential performance impact depends on which clusters support `V5`:
60
+
+
61
+
--
62
+
* **Neither cluster supports `V5`**: You won't notice any protocol-related performance impact before or during the migration because the driver and {product-proxy} cannot negotiate `V5` in this scenario.
63
+
64
+
* **Only the target cluster supports `V5`**: You won't notice any protocol-related performance impact during the migration because {product-proxy} must negotiate a protocol version that is supported by both clusters.
65
+
If the origin cluster doesn't support `V5`, then {product-proxy} cannot negotiate `V5` during the migration, and the driver cannot negotiate `V5` before the migration.
66
+
+
67
+
However, you might experience a protocol-related performance impact at the end of the migration when you connect your client application directly to the target cluster.
68
+
This phase removes {product-proxy} and the origin cluster from the protocol negotiation, allowing the driver to negotiate directly with the target cluster.
69
+
If the target cluster supports `V5`, the driver can use `V5` automatically.
70
+
71
+
* **Both clusters support `V5`**: Unless you <<disallow-or-explicitly-downgrade-the-protocol-version,block `V5`>>, you might experience performance impacts because the driver and {product-proxy} can use `V5` automatically in this scenario.
72
+
Consider upgrading the driver before or after the migration so you can isolate the impact of that change without the added complexity of the migration.
73
+
As a best practice for any significant version upgrade, run performance tests in lower environments to evaluate the potential impact before making the change in production.
=== Disallow or explicitly downgrade the protocol version
78
+
79
+
You can restrict protocol versions in the driver and {product-proxy} configuration:
80
+
81
+
Driver configuration::
82
+
You can explicitly downgrade the protocol version in your client application's driver configuration.
83
+
Make sure the enforced protocol version is supported by both clusters.
84
+
+
85
+
Use this option if you need to enforce the protocol version outside of the migration.
86
+
For example:
87
+
+
88
+
* Both clusters and the driver support `V5` but you don't want to use `V5`: Configure the protocol version in the driver before the migration if you haven't done so already.
89
+
* The origin cluster _doesn't_ support `V5` and you want to ensure `V5` isn't used automatically after the migration: Configure the protocol version in the driver at any point before the end of the migration when you connect your client application directly to the target cluster.
90
+
* You observe unacceptable performance degradation when using `V5` before the migration (without {product-proxy}):
91
+
Either mitigate the performance issues before the migration, or configure the protocol version in the driver before the migration.
92
+
93
+
{product-proxy} configuration::
94
+
You can use the `xref:ROOT:manage-proxy-instances.adoc#blocked-protocol-versions[blocked_protocol_versions]` configuration variable to block specific protocol versions at the proxy level.
95
+
Make sure at least one mutually supported protocol version isn't blocked.
96
+
+
97
+
This option applies _only_ while {product-proxy} is in use.
98
+
It _doesn't_ persist after the migration.
99
+
+
100
+
Use this option if you observe unacceptable performance degradation when {product-proxy} is active _and_ it negotiates `V5`.
101
+
If unacceptable performance degradation occurs _without_ {product-proxy}, then configure the protocol version in the driver instead.
102
+
However, be aware that {product-proxy} itself can have a performance impact, regardless of the protocol version.
18
103
19
104
=== Thrift isn't supported by {product-proxy}
20
105
@@ -160,6 +245,11 @@ For more information, see xref:datastax-drivers:developing:query-idempotence.ado
160
245
[#client-compression]
161
246
== Client compression
162
247
248
+
[IMPORTANT]
249
+
====
250
+
LZ4 and Snappy compression algorithms require {product-proxy} version 2.4.0 or later.
251
+
====
252
+
163
253
The binary protocol used by {astra}, {dse-short}, {hcd-short}, and open-source {cass-short} supports optional compression of transport-level requests and responses that reduces network traffic at the cost of CPU overhead.
164
254
165
255
When establishing connections from client applications, {product-proxy} responds with a list of compression algorithms supported by both clusters.
0 commit comments