vaadin / platform

Vaadin platform 10+ is a Java web development platform based on Vaadin web components. If you don't know to which repository your bug report should be filed, use this and we'll move it to the right one.
https://vaadin.com
515 stars 76 forks source link

AC: Azure Kit #3367

Closed tarekoraby closed 1 year ago

tarekoraby commented 1 year ago

Description

The Azure Kit enables teams to seamlessly deploy and operate Vaadin Java-based applications built using Flow on Azure Cloud. The Kit helps teams quickly create Vaadin apps that are scalable, highly available, and user-friendly. The Kit is also based on Kubernetes to minimize the risk of cloud-provider lock-in.

Use cases

The Azure Kit aims to address the following objectives:

Acceptance criteria

General criteria

mrts commented 1 year ago

Enable Vaadin apps to scale up and down in a non-disruptive manner. The scaling up/down events should preferably be seamless for the end user (i.e. the user shouldn't even realize that anything has happened). If that is not possible, the scaling up/down should be implemented in a non-disruptive way such that the end user would be notified and would have the time to save their current work and move to a new node for the scaling up/down to be completed.

How is session data replicated between the instances when the application is scaled up?

tarekoraby commented 1 year ago

Session data is to be replicated using some caching technology like Hazelcast or Redis.

mrts commented 1 year ago

Session data is to be replicated using some caching technology like Hazelcast or Redis.

Excellent! Vaadin previously recommended sticky sessions, but sticky sessions can cause data loss when one of the cluster nodes fails. Replicated sessions can prevent the data loss, but they incur a latency penalty due to serialization and transfer, and there is a list of their usage considerations in the section Sticky sessions or serializable sessions - pick either or both in the Kubernetes clustering overview page. It would be great if you can find a way to address these issues and provide good replicated session support.

tarekoraby commented 1 year ago

To clarify, the Kit that is currently under development will likely be using a combination of sticky sessions and session replication. Under normal circumstances, sticky sessions will be used to always route the same user to the same node/pod. A node/pod will keep the sessions of the users currently connected to it in memory, and it will also asynchronously replicate the session to the distributed cached (say, Hazelcast or Redis). Under normal circumstances, thus, the user experience shouldn't be affected as the session is retrieved from the internal memory of each node/pod.

However, when there is a scaling down event, or if there is an unexpected node/pod/network failure in the server the user is currently being connected to, then the user will be connected to a new healthy node/pod that will retrieve the session from the distributed cache. So for the end user, the experience will be seamless (they will not notice that anything has happened, except perhaps for a very slight delay when scaling down or a node failure event occurs).

mrts commented 1 year ago

Thank you for the clarification! Great, this is the best of both worlds.

tarekoraby commented 1 year ago

Delivered with Vaadin 23.3.0.