Scalability and performance in the Grassfish system depend on the architecture.
Container setup (standard)
In the container setup, scaling is largely automatic. Performance is primarily achieved through horizontal scaling. This works as follows:
Vertical scaling
Vertical scaling for more CPU/RAM per node or SQL instance is done manually via Azure.
Horizontal scaling
Horizontal scaling of services is performed automatically via:
Horizontal Pod Autoscaler (HPA): By default based on CPU load, and in the future also based on request rate or queue lengths.
Kubernetes Event-Driven Autoscaling (KEDA): For special cases such as highly load-dependent services like Data Calculator, which reacts to open changes in the database.
Application Gateway
The Application Gateway distributes HTTP(S) traffic across multiple pods or instances (Layer 7 load balancing).
SQL Managed Instance
The SQL Managed Instance is manually scaled as needed via the service's scaling levels.
VM setup (legacy)
In the VM setup, scaling is largely done manually. Performance is handled in a more traditional way. This works as follows:
Vertical scaling
Vertical scaling is achieved through larger VMs or database instances.
Horizontal scaling
Horizontal scaling is achieved via additional servers that are manually added behind the load balancer.
Planned scaling
There is no automatic scaling of the database or application. Scaling in this case depends on the planning and project.