Igniters,

I've faced with a customer's cluster which has more than 150 nodes and
most for them are the thick-client nodes. Due to each thick-client is
a full-fledged cluster topology participant it affects the cluster
discovery machinery during the system operation and adding an
additional overhead for using/deploying a new nodes in Kubernetes
environment. However, the main thing from my point of view it prevents
updating the client side and server side components independently
(Apache Ignite doesn't support rolling upgrade).

Accordingly to the assumptions above using thin clients become a
necessary. This looks even more attractive, since the thin client has
a fairly rich API over the past few releases.


The MAIN ISSUE here that blocks thin client usage is that for some of
cache groups a custom affinity function (and an AffinityKeyMapper) was
used which prevents enabling the Partition Awareness thin client
feature. Thus each cache request will have two hops.

Of course, we can force users to migrate to a new API, but this
becomes more difficult when Apache Ignite is part of a much larger
architectural solution and thus it is doent' looks so friendly.

The MAIN QUESTION here - does anyone know our users who have
encountered with the same issue? I want to solve such a problem once
and make all such users happy by implementing the general approach.


= Possible solutions =


1. Making an affinity function pluggable (mapping calculations) on the
thin clients side. Currently the RendezvousAffinityFunction [1] is
only supported
for the partition awareness. A user's affinity function seems to be
the stateless function due to there is no machinery to transfer states
to the thin client.

Pros - a general solution for all such cases;
Cons - unnecessary complexity, extending public API;


2. Creating an Ignite extension which will extend the thin client API
thus a user will have a full control over a destination node to which
requests being sent.

Pros - isolated solution, simple implementation;
Cons - hard to support spring-boot-thin-client etc. and other
extensions based on the thin client API;


Folks, please share your thoughts.


[1] 
https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCachePartitionsRequest.java#L206

Reply via email to