Non-Functional Requirements
Exploring how non-functional requirements can be implemented.
While by definition not strictly necessary for the functionality of the pipeline, these non-functional requirements will however be needed if it is to be used in a production environment.
Concurrency and data management
If, for example, a database entry is deleted, the associated data should automatically be deleted to ensure concurrency between the various data storages in the pipeline. This is the case regardless of whether it is a soft delete or not.
This can be done in a similar way to how the opther services are triggered: cloud functions. Cloud functions can be triggered when data is deleted from the BLOB or database. These can automatically comb through other data storages and delete associated files or entries.
Cloud cost optimisation
To limit costs, each instance has been defaulted to the lowest possible hardware power (and therefore cost). One of the main benefits of cloud-based hosting/development is that this can easily be adjusted later.
Scaling and load balancing
As the pipeline now has a (very) limited workload in testing, there was no need to make use of scaling or load balancing features. Aside from the aforementioned vertical scaling, Azure has extensive services to implement horizontal scaling.
One of these is Azure Load Balancer, which can distribute connections over multiple resources. With this, multiple instances of the same service can be used. To manage these, the industry-standard option is Kubernetes. Azure has its own service to facilitate this, allowing containers to be deployed and scaled at will. This will remain an option in the future.
Speed and response time
Various options have already been mentioned to improve speed and response time (such as vertical and horizontal scaling). At the moment, analyses are performed very quickly. This is likely due in large part to the limited work load present in a test environment. Furthermore, the use of EventGrid makes functions trigger far faster.

Other ways to speed up the pipeline include:
Invoker functions can be made to keep cold functions warm.
Services that are not user related (such as ensuring concurrency between the file share and database etc.) can be performed asynchronously using functions.
Last updated