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? > >>>>>>>>>