Hi, 

Our query engine is using calcite as parser/optimizer and enumerable as runtime 
if needed to federate different storage engines. We are trying to enable JDBC 
access to our query engine. Everything works smoothly when we only have one 
calcite/avatica server.

However, JDBC calls will fail if we run multiple instances of calcite/avatica 
servers behind a generic load-balancer. Given that JDBC server is not 
stateless, this problem was not a surprise. I searched around and here are the 
two options suggested by phoenix developers 
(https://community.hortonworks.com/articles/9377/deploying-the-phoenix-query-server-in-production-e.html
 
<https://community.hortonworks.com/articles/9377/deploying-the-phoenix-query-server-in-production-e.html>):
1. sticky sessions: make the router to always route a client to a given server. 
2. client-driven routing: implementing Avarice’s protocol which passes an 
identifier to the load balancer to control how the request is routed to the 
backend servers.

Before we rush into any implementation, we would really appreciate it if anyone 
can share experience or thoughts regarding this issue. Thanks,

-Jiandan 

Reply via email to