Roman, hi.
Done. Thanks!
On 26.10.2023 13:25, Roman Puchkovskiy wrote:
Hi Vladimir. Sorry to intervene, but we have a clash with IEP numbers,
there is already IEP-110 in Ignite 3, it was created on August, 1:
https://cwiki.apache.org/confluence/display/IGNITE/IEP-110%3A+Schema+synchronization%3A+basic+schema+changes
Is it possible to pick another number, while your IEP is fresh?
чт, 26 окт. 2023 г. в 14:05, Vladimir Steshin <vlads...@gmail.com>:
All right. Pavel, thank you.
IEP:
https://cwiki.apache.org/confluence/display/IGNITE/IEP-110+Thin+Client+Service+Awareness
Ticket: https://issues.apache.org/jira/browse/IGNITE-20656
On 25.10.2023 11:04, Pavel Tupitsyn wrote:
Looks good to me
On Tue, Oct 24, 2023 at 1:50 PM Vladimir Steshin <vlads...@gmail.com> wrote:
We've privately discussed with Mikhail Petrov and Alexey Plekhanov.
To us, #2 seems OK with the exceptions that a dedicated request would be
better for transferring the service topology. And it should be processed
by the client instead of every service proxy.
So, the suggested solution is:
1) Bring a new feature to the thin client protocol.
2) Require the partition awareness flag enabled.
3) Obtain service topology with a dedicated request by the client and
provide it to the service proxies.
4) Initiate the topology update with: first service invocation, cluster
topology change, some timeout (only if service is invoked).
Cons:
- Some delay of the topology obtaining. The invocation redirects are
still possible when service migrates.
- No sign of service cancel/deploy on the client side. We have to
update by a timeout too.
- The topology is probably kept by client while it exists even if is
not in use any more.
If the suggestion looks reasonable, I'm ready to implement, create IEP.
On 17.10.2023 18:28, Vladimir Steshin wrote:
They barely can guarantee. If client miss service instance node,
the request is just redirected. But I talk about the most reliable way
to keep actual service topology. If we watch cluster topology change
event, we have to take in account cases like:
- Client request service, gets its topology
- The service is canceled and redeployed to another nodes. No cluster
topology change, no sign of it on the client side.
- Client continue service requesting and misses instance node forever
or often.
If we provide, for example, version or hash of client topology version
in every service call request, we always get actual service topology
just by comparing on server side. Independently of why and when
service redeploys. Isn't it simple and safe?
On 17.10.2023 15:52, Pavel Tupitsyn wrote:
None of the described approaches provides 100% guarantee of hitting the
primary node in all conditions.
And it is fine to miss a few requests. I don't see a reason to increase
complexity trying to optimize a rare use case.
On Tue, Oct 17, 2023 at 2:49 PM<vlads...@gmail.com> wrote:
What if topology change event preceedes service redeployment and
service
mapping change? There a possibility for client to save new topology
version
before services are actually redeployed. If we rely on actual change
of the
service mapping (redeployment), there is no such problem.
On 17.10.2023 13:44, Pavel Tupitsyn<ptupit...@apache.org> wrote:
I think if it's good enough for cache partition awareness, then it's
good
enough for services. Topology changes are not that frequent.
On Tue, Oct 17, 2023 at 12:22 PM<vlads...@gmail.com> wrote:
Hi, Pavel.
1. Correct.
2. Yes, client watches ClientFlag.AFFINITY_TOPOLOGY_CHANGED flag and
sends
additional ClientOperation.CLUSTER_GROUP_GET_NODE_ENDPOINTS to get
new
cluster topology. Thus, the topology updates with some delay. We
could
watch this event somehow in the service proxy. But direct service
topology
version in the call responses should work faster if service is being
requested. Or you think this is not significant?
On 17.10.2023 11:13, Pavel Tupitsyn<ptupit...@apache.org> wrote:
Hi Vladimir,
1. A topology of a deployed service can change only when the cluster
topology changes.
2. We already have a topology change flag in every server response.
Therefore, the client can request the topology once per service, and
refresh it when cluster topology changes, right?
On Mon, Oct 16, 2023 at 8:17 PM Vladimir Steshin<vlads...@gmail.com
wrote:
Hi Igniters! I propose to add the /service awareness feature to the
thin
client/. I remember a couple of users asked of it. Looks nice to
have
and simple to implement. Similar to the partition awareness.
Reason:
A service can be deployed only on one or few nodes. Currently, the
thin
client chooses one or a random node to invoke a service. Then, the
service call can be always or often redirected to other server
node.
I
think we would need: - Bring a new feature to the thin client
protocol
(no protocol version change). - Require the partition awareness
flag
enabled (it creates required connections to the cluster). -
Transfer
the
service topology in the service call response (server node /already
holds /needed service topology).
- Keep the service topology in the client service proxy. If that is
ok,
my question is /how to update service topology on the client/?
I see the options: 1) Add a version to the service topology on the
server node and on the client service proxy. Add actual service
topology
to the service call response if actual>client.
/Pros/: Always most actual service top. version
/Cons/: Requires holding and syncing top. version on server nodes
only
for the thin clients.
2) Add the actual service topology to the service call response
only
if
service is not deployed on the current node. The client invalidates
received service topology every N invocations and/or every N
seconds
(/code constants/).
/Pros/: Simple.
/Cons/: Actual topology delays. Not the best load balancing.
3) Send from client a hash for the known service nodes UUIDs in
every
service call request. Add actual service topology to the service
call
response if the server's hash is not equal.
/Pros/: Simple. Always most actual service topology.
/Cons/: Costs some CPU sometimes.
WDYT?