Closed tarekoraby closed 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?
Session data is to be replicated using some caching technology like Hazelcast or Redis.
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.
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).
Thank you for the clarification! Great, this is the best of both worlds.
Delivered with Vaadin 23.3.0.
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
[x] APIs reviewed
[x] Design
[x] Performance
[x] Documentation: https://vaadin.com/docs/latest/tools/azure-cloud
[x] Limitations: Only works with Spring Boot apps.