Our previous client has been a big proponent of Microsoft technologies and chose to host every single platform to Azure cloud. The journey is very challenging but overall rewarding as we learn the new steps to grow the platform.
The technology is a Microsoft product composed of React, windows servers, C#, Microsoft SQL Server, Redis, Kafka, and containers.
Customer asks:
Customers don’t want all infrastructure systems running all the time in DEV if they are not used.
The customer wants all production systems running all the time with High Availability. The application has a lot of caching in place so that the database does not get overloaded.
Our Solution for DEV:
Use Kubernetes to host all containers.
Utilize Microsoft Azure SQL database serverless since it shuts down or pauses the database when not in use.
Convert all cron job tasks to either Kubernetes cronjob or Azure function timer trigger.
Utilize Istio for blue/green deployment.
Utilize Azure DevOps for ci/cd deployment since it has integration to Azure resources.
Utilize elastic search, logstash, metric beat, and filebeat for monitoring
Utilize Grafana for dashboarding and alerting that is integrated with Slack and Microsoft Teams
Utilize Azure event hubs as an alternative to Kafka
Utilize Azure cache for Redis
Our Solution for Prod:
Use Kubernetes to host all containers
Utilize Microsoft Azure SQL database with Elastic Pools so it scales on demand.
Convert all cron job tasks to either Kubernetes cronjob or Azure function timer trigger.
Utilize istio for blue/green deployment.
Utilize Azure DevOps for ci/cd deployment since it has integration to Azure resources.
Utilize elastic search, logstash, metric beat, and filebeat for monitoring
Utilize Grafana for dashboarding and alerting that is integrated with Slack and Microsoft Teams
Utilize Azure event hubs as an alternative to Kafka
Utilize Azure cache for Redis
The goal is to optimally utilize Azure to its full potential without causing too many problems on the budget.
Deployment:
Developers wanted to use a solution that is GUI based so we implemented Azure DevOps and argocd.
Why serverless?
We picked serverless database and function for various reasons.
It allows us to only use the resources as we need them
It allows us to scale on demand as we need them
It is highly available and reliable at least for development.
The biggest pain point we realize with serverless services are:
It is hard to upgrade resources
Databases are not updated to the latest.
The project took 5 months to complete and we verified that the platform auto-heals, auto-scales, and has safe deploys so that the entire business could develop more functionality as they go.
Comments