Scaling Blazor With .NET Aspire and Azure Container Apps | Michael Washington | .NET Day 2026
Read full transcript 25 segments
-
I'm excited, you know, I'm excited, you know, my friend Michael my friend Michael my friend Michael Washington is Washington is Washington is joining us soon, joining us soon, joining us soon, and if you don't know and if you don't know and if you don't know Michael, he's Michael, he's Michael, he's doing all sorts of doing all sorts of doing all sorts of cool stuff with cool stuff with cool stuff with ASP.NET Core and Blazor. So, ASP.NET Core and Blazor. So, ASP.NET Core and Blazor. So, Michael, how are you? Michael, how are you? Michael, how are you? Everything is great. I am very Everything is great. I am very Everything is great. I am very grateful that you grateful that you grateful that you invited me and invited me and invited me and allowed me to share allowed me to share allowed me to share my open source project. my open source project. my open source project. Okay, so let's Okay, so let's Okay, so let's get straight to the get straight to the get straight to the point. I'm excited, point. I'm excited, point. I'm excited, I want to see it, and I'm I want to see it, and I'm I want to see it, and I'm sure our sure our sure our viewers are too. So let's get viewers are too. So let's get viewers are too. So let's get straight to straight to straight to the point, my friend. That's the point, my friend. That's the point, my friend. That's it. Then it. Then it. Then we'll pass the word on to you. we'll pass the word on to you. we'll pass the word on to you. Good. So, this is Blazor Data Good. So, this is Blazor Data Good. So, this is Blazor Data Orchestrator. I'm Michael Orchestrator. I'm Michael Orchestrator. I'm Michael Washington. I am a Microsoft MVP. Washington. I am a Microsoft MVP. And let's get straight to the And let's get straight to the point. What is Blazor Data point. What is Blazor Data point. What is Blazor Data Orchestrator? This is an open source Orchestrator? This is an open source Orchestrator? This is an open source project with an MIT license. project with an MIT license. project with an MIT license. We don't sell anything here We don't sell anything here We don't sell anything here . It's really . It's really . It's really just a just a just a soul project that soul project that my friend Saad and I created, and my friend Saad and I created, and it's essentially an it's essentially an it's essentially an orchestration platform, which I orchestration platform, which I orchestration platform, which I know sounds know sounds know sounds big. It is big. It is big. It is built on Microsoft built on Microsoft built on Microsoft Aspire. So if you're Aspire. So if you're Aspire. So if you're familiar with Aspire, it's familiar with Aspire, it's familiar with Aspire, it's completely built completely built completely built on it, on it, on it, uses its uses its uses its capabilities, and capabilities, and capabilities, and it's also Blazor Server. So, what it's also Blazor Server. So, what it's also Blazor Server. So, what problem does it solve?
-
problem does it solve? Saad and I really Saad and I really like like like using using using containers, especially containers, especially Microsoft Container Services. However, when Microsoft Container Services. However, when we had a lot of we had a lot of we had a lot of tasks, we realized tasks, we realized that we wanted to that we wanted to that we wanted to plan them, but we plan them, but we plan them, but we needed complex needed complex needed complex planning. This is on planning. This is on planning. This is on the right—this is the screen the right—this is the screen the right—this is the screen you'll be you'll be you'll be using. As using. As using. As you can see, you can you can see, you can you can see, you can have many have many have many combinations and many combinations and many combinations and many layouts. That's exactly what layouts. That's exactly what layouts. That's exactly what we wanted. So we we wanted. So we we wanted. So we created this created this created this tool for that. tool for that. You also need to You also need to create code that create code that create code that will run in will run in will run in the container, whether it's C# the container, whether it's C# the container, whether it's C# or Python. We fully or Python. We fully or Python. We fully support Python in support Python in support Python in this, even though we are C# this, even though we are C# programmers ourselves. And we programmers ourselves. And we programmers ourselves. And we would like to have a would like to have a would like to have a code editor. And code editor. And code editor. And of course, a lot of our of course, a lot of our of course, a lot of our code, in fact code, in fact code, in fact most of our code most of our code most of our code today is written today is written today is written using AI. So we using AI. So we using AI. So we would like AI to be would like AI to be would like AI to be fully fully fully integrated into this. And, integrated into this. And, integrated into this. And, of course, we don't want of course, we don't want of course, we don't want any restrictions. We any restrictions. We any restrictions. We want to be want to be want to be able to able to able to use use any NuGet package or, any NuGet package or, any NuGet package or, if you're if you're if you're using Python, using Python, using Python, any Python package.
-
any Python package. any Python package. No restrictions. And we No restrictions. And we No restrictions. And we want to easily want to easily want to easily debug code in debug code in debug code in Visual Studio, Visual Studio Code, Visual Studio, Visual Studio Code, Visual Studio, Visual Studio Code, or any other or any other or any other editor of your editor of your editor of your choice. Let's choice. Let's choice. Let's take a step back and take a step back and take a step back and talk about talk about talk about why why why use use use containers at all. Some of containers at all. Some of containers at all. Some of you may not you may not you may not use use use containers. Well, containers. Well, containers. Well, containers containers containers provide complete provide complete provide complete insulation. Your insulation. Your insulation. Your task, you know, is to task, you know, is to task, you know, is to work in a work in a work in a sandbox. Um, and they sandbox. Um, and they sandbox. Um, and they allow you allow you allow you to scale. We have to scale. We have to scale. We have certain tasks where certain tasks where certain tasks where we move hundreds of we move hundreds of we move hundreds of millions of rows at a millions of rows at a millions of rows at a time. And you really time. And you really time. And you really need a powerful need a powerful need a powerful execution package, but execution package, but execution package, but you don't want to have a you don't want to have a you don't want to have a server that runs server that runs server that runs 24/7 like a 24/7 like a 24/7 like a virtual machine. virtual machine. virtual machine. So, using So, using So, using containers, you can containers, you can containers, you can start them up, start them up, start them up, do a big do a big do a big task, and then task, and then task, and then shut them down so you don't have to shut them down so you don't have to shut them down so you don't have to pay when they're not pay when they're not pay when they're not running. The code you running. The code you running. The code you have, the code you have, the code you have, the code you run in run in run in development, is the development, is the development, is the same code that runs in same code that runs in same code that runs in production. The service production. The service production. The service provided by Microsoft and all provided by Microsoft and all container runtimes have a container runtimes have a recovery feature.
-
recovery feature. So if they So if they fail, they fail, they fail, they automatically automatically automatically restart restart restart the container. And, of course, the container. And, of course, the container. And, of course, containers come in containers come in containers come in different sizes. So different sizes. So different sizes. So if you need a if you need a if you need a large container, you large container, you large container, you pay more, but pay more, but pay more, but if the job is smaller, if the job is smaller, if the job is smaller, you pay less. you pay less. OK. Containers are great, and they've great, and they've great, and they've been around for a long time. been around for a long time. However, even Azure Container However, even Azure Container Apps have some Apps have some Apps have some drawbacks. First, drawbacks. First, drawbacks. First, there is no there is no there is no centralized centralized centralized logging. When you have your logging. When you have your logging. When you have your first task, first task, first task, everything is fine with the logs, but everything is fine with the logs, but everything is fine with the logs, but by the fiftieth by the fiftieth by the fiftieth task, all the logs task, all the logs task, all the logs are scattered in different are scattered in different are scattered in different places. So, places. So, places. So, centralized centralized centralized logging is important. logging is important. There are cron jobs, but There are cron jobs, but they are very simplified. And they are very simplified. And they are very simplified. And if there is a if there is a if there is a problem, they don't problem, they don't problem, they don't restart restart restart automatically. There is also automatically. There is also automatically. There is also no code editor. no code editor. no code editor. So if you have 50 So if you have 50 So if you have 50 tasks, you tasks, you tasks, you have to look for have to look for have to look for the code for each one to the code for each one to the code for each one to download it and download it and download it and understand what's understand what's understand what's going on.
-
going on. going on. Additionally, there are no shared Additionally, there are no shared Additionally, there are no shared resources. So, certain resources. So, certain resources. So, certain settings are not settings are not settings are not common to all common to all common to all your tasks. And your tasks. And your tasks. And there is no real there is no real there is no real dashboard dashboard that would show: that would show: that would show: these are working now these are working now , these are planned, and these have , these are planned, and these have , these are planned, and these have already been completed. And, already been completed. And, already been completed. And, you know, there's also you know, there's also you know, there's also no no no centralized centralized centralized security or anything like that security or anything like that security or anything like that . So each . So each . So each task exists on its own task exists on its own task exists on its own . That's where this . That's where this . That's where this open open open source project comes in—if you're source project comes in—if you're source project comes in—if you're only using only using only using your own container apps, which is your own container apps, which is your own container apps, which is Blazer Data Orchestrator. This Blazer Data Orchestrator. This Blazer Data Orchestrator. This shows that there shows that there shows that there is a is a is a centralized centralized centralized system for logging. And schedules system for logging. And schedules provide complex provide complex task planning. task planning. Code editing: Code editing: You have a web browser where You have a web browser where You have a web browser where you can edit your code, you can edit your code, you can edit your code, save it, save it, save it, check for check for check for compilation errors, and compilation errors, and compilation errors, and then deploy it. And then deploy it. And then deploy it. And , of course, there's a lot more , of course, there's a lot more , of course, there's a lot more . Now . Now . Now let's talk let's talk let's talk about code design, about code design, about code design, since you've seen since you've seen since you've seen other applications like other applications like N8N. This is a very N8N. This is a very N8N. This is a very popular popular popular application with a application with a application with a visual visual visual designer that is designer that is designer that is truly captivating and truly captivating and truly captivating and great for great for great for demos. However, we demos. However, we demos. However, we considered this considered this considered this option and decided to option and decided to option and decided to abandon abandon abandon it because the visual it because the visual it because the visual designer has a number of designer has a number of designer has a number of problems. First, it problems. First, it problems. First, it limits your limits your limits your options. And we didn't
-
options. And we didn't options. And we didn't want any want any want any restrictions. Furthermore, restrictions. Furthermore, restrictions. Furthermore, it is difficult, and sometimes it is difficult, and sometimes it is difficult, and sometimes impossible, to impossible, to impossible, to debug, and debug, and debug, and debugging is debugging is debugging is obviously obviously obviously extremely important. extremely important. Again, they have Again, they have AI, but its AI, but its AI, but its use is use is use is limited because it has to limited because it has to limited because it has to work within the work within the work within the constraints of the visual constraints of the visual constraints of the visual designer. Now about designer. Now about designer. Now about Blazor data orchestrator: here is our Blazor data orchestrator: here is our Blazor data orchestrator: here is our approach. Our approach is approach. Our approach is approach. Our approach is simple: your work simple: your work is code. Point. And this is is code. Point. And this is is code. Point. And this is important for two reasons important for two reasons . First, it doesn't . First, it doesn't . First, it doesn't limit you in what limit you in what limit you in what you can do. But more you can do. But more you can do. But more importantly, importantly, importantly, since so much of since so much of since so much of our code today our code today our code today is written is written is written by AI, the only thing by AI, the only thing by AI, the only thing AI can do for sure is AI can do for sure is AI can do for sure is write code. So write code. So write code. So simply writing simply writing simply writing code makes it easy code makes it easy code makes it easy to use AI to use AI to use AI to create anything to create anything to create anything you need. This you need. This you need. This fits our fits our fits our current current current workflow, where 95% of the code workflow, where 95% of the code workflow, where 95% of the code is written solely with is written solely with is written solely with the help of AI. Again the help of AI. Again the help of AI. Again , this AI is fully , this AI is fully , this AI is fully integrated—whether integrated—whether integrated—whether you're using you're using you're using the web version or the the web version or the the web version or the Visual Studio version Visual Studio version Visual Studio version that I'll show you, the AI that I'll show you, the AI that I'll show you, the AI is built in and knows how to is built in and knows how to is built in and knows how to write code for write code for write code for Blazor data orchestrator tasks Blazor data orchestrator tasks . You can . You can . You can use use any NuGet package or, any NuGet package or, any NuGet package or, if you're if you're if you're using Python,
-
using Python, using Python, any Python package, and any Python package, and any Python package, and debug your debug your debug your code in Visual Studio, Visual Studio code in Visual Studio, Visual Studio code in Visual Studio, Visual Studio Code, or any Code, or any Code, or any other editor. Yes other editor. Yes , we have that. So, this is a , we have that. So, this is a , we have that. So, this is a holistic platform holistic platform holistic platform built specifically built specifically built specifically for you. I'll for you. I'll for you. I'll do a demonstration in a minute do a demonstration in a minute , but first I want , but first I want , but first I want to tell you how to get this to tell you how to get this to tell you how to get this running. The basic running. The basic running. The basic requirement is to have requirement is to have requirement is to have Docker or Docker or Docker or Podman installed on your system. You Podman installed on your system. You also need Visual also need Visual Studio, Visual Studio Code, or Studio, Visual Studio Code, or Studio, Visual Studio Code, or any other any other any other editor of your choice editor of your choice . You just clone . You just clone . You just clone the repository, the repository, the repository, press F5, and everything press F5, and everything press F5, and everything works. Everything you need works. Everything you need works. Everything you need is already included. The is already included. The is already included. The database, it's in database, it's in database, it's in the container, it's already the container, it's already the container, it's already there, it's already there, it's already there, it's already configured. And it configured. And it configured. And it opens up opens up opens up with Microsoft Azure, with Microsoft Azure, with Microsoft Azure, you just click on you just click on you just click on the link on the web the link on the web app, and boom, you're app, and boom, you're app, and boom, you're in. If you're in. If you're in. If you're running this for the first time, an running this for the first time, an installation wizard will appear so you installation wizard will appear so you can set can set can set your admin username your admin username your admin username and password and password and password , and , and , and after that, you're after that, you're after that, you're in. So, how do you in. So, how do you in. So, how do you create a task create a task create a task once you're already inside once you're already inside ? There is a " ? There is a " create new create new create new task" button here, you just task" button here, you just task" button here, you just click on it. And click on it. And click on it. And what happens next?
-
what happens next? Essentially, you get a Essentially, you get a wizard that wizard that wizard that lets you fill in lets you fill in lets you fill in the details, set the details, set the details, set scheduling options scheduling options , you can , you can , you can configure webhooks configure webhooks configure webhooks if needed, and if needed, and if needed, and see the code—C# or see the code—C# or see the code—C# or Python. You will see the Python. You will see the application configuration files where your authentication will be, application configuration files where your authentication will be, which which which of course can of course can of course can use a use a managed identity if you don't managed identity if you don't want to store want to store want to store passwords there. And, of course, there passwords there. And, of course, there passwords there. And, of course, there 's an AI assistant. And, 's an AI assistant. And, 's an AI assistant. And, of course, logging. Ahem. of course, logging. Ahem. You can You can download the code as a download the code as a download the code as a NuGet package to NuGet package to NuGet package to move it, move it, move it, for example, from development for example, from development for example, from development to production, or to production, or to production, or download the code as a download the code as a download the code as a Visual Studio solution. Visual Studio solution. Again, even Again, even if you download the if you download the if you download the code, you can code, you can code, you can click on the click on the click on the code tab to see code tab to see code tab to see it. There are also it. There are also it. There are also read-only modes. I.
-
read-only modes. I. Also, if you Also, if you make changes to the web make changes to the web application, you can application, you can application, you can see the history and see the history and see the history and roll back to roll back to roll back to previous versions. And, previous versions. And, previous versions. And, of course, logging, of course, logging, of course, logging, future launches, and future launches, and future launches, and this this this monitoring dashboard that monitoring dashboard that monitoring dashboard that lets you see all the lets you see all the lets you see all the current tasks. And current tasks. And current tasks. And of course, you can of course, you can of course, you can customize customize customize the settings of your AI. I'll the settings of your AI. I'll the settings of your AI. I'll quickly show you Visual quickly show you Visual quickly show you Visual Studio and then move on Studio and then move on Studio and then move on to the demo. You to the demo. You to the demo. You can click this can click this can click this button to create a button to create a button to create a new Visual Studio project, new Visual Studio project, new Visual Studio project, or click the button or click the button or click the button for an existing for an existing for an existing task to task to task to load it as a load it as a load it as a Visual Studio project. Then Visual Studio project. Then Visual Studio project. Then you just you just you just open it and open it and open it and work in Visual Studio, work in Visual Studio, work in Visual Studio, Visual Studio Code, or the Visual Studio Code, or the Visual Studio Code, or the code editor of your code editor of your code editor of your choice. And at that point, choice. And at that point, choice. And at that point, if you press F5, it if you press F5, it if you press F5, it will open a version in a will open a version in a will open a version in a web browser, so you web browser, so you web browser, so you get some get some get some editing experience. editing experience. However, AI uses the However, AI uses the Copilot CLI, so AI at Copilot CLI, so AI at Copilot CLI, so AI at this stage is the this stage is the this stage is the same as what you normally same as what you normally same as what you normally have with Copilot on your have with Copilot on your have with Copilot on your computer. Um, so computer. Um, so computer. Um, so it can do a lot it can do a lot it can do a lot more, because Copilot, more, because Copilot, more, because Copilot, of course, can see the files of course, can see the files of course, can see the files on your computer on your computer on your computer and all that. Um, but the and all that. Um, but the and all that. Um, but the most important thing is most important thing is most important thing is that since it's a that since it's a that since it's a regular project, you regular project, you regular project, you can set can set can set breakpoints, step breakpoints, step breakpoints, step through, and there's basically through, and there's basically through, and there's basically no no no limit to what you limit to what you limit to what you can do.
-
can do. Finally, how do I Finally, how do I deploy this to Azure deploy this to Azure deploy this to Azure to run? to run? Basically, since Basically, since Aspire is used here Aspire is used here , it uses the , it uses the , it uses the standard standard standard AZD deployment where you AZD deployment where you AZD deployment where you just log in just log in just log in , choose , choose , choose the subscription you want, the subscription you want, the subscription you want, give give give the environment a name, it the environment a name, it the environment a name, it runs, you click runs, you click runs, you click on that link, and boom on that link, and boom —you're in. So, —you're in. So, —you're in. So, it looks it looks it looks something like this. It something like this. It something like this. It automatically automatically automatically sets it all up in Aspire for sets it all up in Aspire for sets it all up in Aspire for you. You click on the you. You click on the you. You click on the web app, web app, web app, follow the follow the follow the link, and you're link, and you're link, and you're fully logged in. fully logged in. fully logged in. OK. So let OK. So let OK. So let me just show me just show me just show you a quick you a quick you a quick demo. Before you demo. Before you begin, begin, begin, go to blazerdata.net go to blazerdata.net go to blazerdata.net and click on this and click on this and click on this link to link to link to go to the go to the go to the GitHub repository, where GitHub repository, where GitHub repository, where you can then... you can then... GitHub repository. Where GitHub repository. Where you can simply you can simply you can simply download the code or download the code or download the code or simply clone this simply clone this simply clone this repository. Again repository. Again repository. Again , there's more...We have , there's more...We have , there's more...We have full documentation full documentation full documentation that will walk you through that will walk you through that will walk you through all the steps and all the steps and all the steps and things like that. And here's what things like that. And here's what things like that. And here's what I did: I opened it I did: I opened it I did: I opened it in Visual Studio Code. You in Visual Studio Code. You in Visual Studio Code. You see, oh, this is all see, oh, this is all see, oh, this is all our documentation our documentation our documentation that we that we that we use for use for use for work, but all the code is work, but all the code is work, but all the code is here. And if you have the
-
here. And if you have the here. And if you have the Aspire extension in Visual Aspire extension in Visual Aspire extension in Visual Studio Code, you can Studio Code, you can Studio Code, you can just click just click just click the button to launch the button to launch the button to launch it, then click it, then click it, then click on the dashboard, on the dashboard, on the dashboard, then on the web app, then on the web app, then on the web app, click on the click on the click on the link, and since link, and since link, and since I'm already logged in I'm already logged in I'm already logged in , you're there. , you're there. For example, to For example, to create a new create a new create a new task, I would simply task, I would simply task, I would simply type “test demo”. You have type “test demo”. You have type “test demo”. You have different environments, you different environments, you different environments, you can can can organize things organize things organize things into different groups into different groups into different groups because you have a lot of because you have a lot of because you have a lot of tasks and you tasks and you tasks and you need to need to need to use that use that use that grouping, trust grouping, trust grouping, trust me. I click " me. I click " save". And here are save". And here are save". And here are my details again. Here my details again. Here my details again. Here I can, for example, I can, for example, I can, for example, set up a schedule. set up a schedule. set up a schedule. I can pass I can pass I can pass parameters. I have a parameters. I have a logging area set up just logging area set up just for this task, for this task, for this task, but here are the logs but here are the logs but here are the logs for all the other for all the other for all the other tasks. We also have tasks. We also have tasks. We also have webhooks. So, this webhooks. So, this webhooks. So, this will create a custom will create a custom will create a custom webhook so that it webhook so that it webhook so that it can be run can be run can be run via a webhook. And here is the via a webhook. And here is the via a webhook. And here is the code. If I click on code. If I click on code. If I click on the editor, here's a the editor, here's a code example. This way you code example. This way you can see the can see the can see the structure. The task structure. The task structure. The task must have a must have a must have a method called "task" method called "task" that returns a string.
-
that returns a string. It can be It can be empty if you want empty if you want . And it must . And it must . And it must accept these accept these accept these parameters. These are parameters. These are parameters. These are automatically automatically automatically passed by the system passed by the system as this is a way to as this is a way to as this is a way to pass your pass your pass your job ID, agent ID, and job ID, agent ID, and job ID, agent ID, and any any environment-specific settings. But the code inside can be inside can be anything. So in the anything. So in the anything. So in the code example, we code example, we code example, we get the weather by get the weather by get the weather by zip code. zip code. If I change it to If I change it to 90011, I click " 90011, I click " save and save and save and compile". At this compile". At this compile". At this point, he actually point, he actually point, he actually compiled it. compiled it. compiled it. If there were If there were If there were compilation errors, they would compilation errors, they would compilation errors, they would appear. Now I appear. Now I appear. Now I can just can just can just click "run click "run click "run task". And it task". And it task". And it automatically automatically automatically redirects me redirects me redirects me to the magazines. Then I to the magazines. Then I to the magazines. Then I click update. It click update. It click update. It says says says the task was completed in the task was completed in the task was completed in 1 second. And he 1 second. And he 1 second. And he got the temperature got the temperature got the temperature for 90011, that's what it is. for 90011, that's what it is. So, in principle, this So, in principle, this is the task. And again is the task. And again is the task. And again , I could , I could , I could set up a set up a set up a schedule for him. Another schedule for him. Another schedule for him. Another thing I can thing I can thing I can do, if I go do, if I go do, if I go here to the code, is here to the code, is here to the code, is download it as a download it as a download it as a NuGet package, and then that NuGet package, and then that NuGet package, and then that package can be package can be package can be loaded, let's say, loaded, let's say, loaded, let's say, into a production environment.
-
into a production environment. Or, if I were running Or, if I were running this locally, I could this locally, I could this locally, I could download the NuGet package download the NuGet package download the NuGet package and, you know, push and, you know, push and, you know, push it to deploy it to deploy it to deploy to Azure. Here's how you can to Azure. Here's how you can to Azure. Here's how you can move move move tasks. However, I tasks. However, I tasks. However, I can also click can also click can also click this button, which this button, which this button, which will load this will load this will load this existing task as a existing task as a existing task as a Visual Studio solution. Or, Visual Studio solution. Or, Visual Studio solution. Or, if I were creating a new if I were creating a new if I were creating a new task, I could task, I could task, I could click this button, click this button, click this button, sorry, here's this sorry, here's this sorry, here's this "create "create "create Visual Studio project" button, to Visual Studio project" button, to Visual Studio project" button, to create a completely create a completely create a completely new Visual Studio solution new Visual Studio solution new Visual Studio solution for this task. for this task. So, I went ahead and... it's done it's done automatically because automatically because automatically because when you first when you first when you first try try try to compile a to compile a to compile a task, it takes task, it takes task, it takes about 5 minutes about 5 minutes about 5 minutes because the because the because the Copilot CLI needs to be loaded. Copilot CLI needs to be loaded. So, I don't want you to So, I don't want you to sit around and wait for this.
-
sit around and wait for this. sit around and wait for this. In general, this is what In general, this is what In general, this is what this solution looks like. this solution looks like. And here is this section of And here is this section of code. For C# code, it code. For C# code, it code. For C# code, it will be here, and for will be here, and for will be here, and for Python code, it will be here. There is Python code, it will be here. There is Python code, it will be here. There is a configuration that a configuration that a configuration that indicates whether indicates whether indicates whether you are using C# you are using C# you are using C# or Python. That's how I or Python. That's how I or Python. That's how I know what you have. know what you have. know what you have. So if I have Python, So if I have Python, So if I have Python, it changes to Python. it changes to Python. But this example is C #, so your code #, so your code #, so your code is is is inside main.cs. And this is inside main.cs. And this is inside main.cs. And this is exactly the file that exactly the file that exactly the file that should have a should have a should have a special signature special signature . You can . You can . You can call other files from here, call other files from here, call other files from here, so you can so you can so you can use use use different code. It just has to different code. It just has to different code. It just has to contain this contain this contain this method. It looks for this method. It looks for this method. It looks for this method so that the executor method so that the executor method so that the executor knows exactly where knows exactly where knows exactly where to run the code. And here, to run the code. And here, to run the code. And here, of course, I can of course, I can of course, I can set a set a set a breakpoint and just breakpoint and just breakpoint and just run this. And when run this. And when run this. And when you run it, you run it, you run it, the screen that the screen that the screen that appears is the screen that That's it appears is the screen that That's it . And here it is . And here it is . And here it is . OK. So this is a . OK. So this is a . OK. So this is a running task, and running task, and running task, and it's still showing it's still showing it's still showing you the code here. This is the place to go for you the code here. This is the place to go for you the code here. This is the place to go for AI if you AI if you AI if you need help
-
need help need help writing code. And writing code. And writing code. And again, this again, this again, this goes back to my goes back to my goes back to my GitHub Copilot. That's why there GitHub Copilot. That's why there GitHub Copilot. That's why there 's even an 's even an 's even an automatic selection option automatic selection option . However, in this . However, in this . However, in this case, I'll just case, I'll just case, I'll just run it. And again run it. And again run it. And again , it does the , it does the , it does the compilation here. And compilation here. And compilation here. And then then then the following will happen: okay, the following will happen: okay, the following will happen: okay, the task is completed the task is completed . And then it will work . And then it will work . And then it will work at my breakpoint. at my breakpoint. This is just to This is just to demonstrate demonstrate that you can that you can that you can totally do that. totally do that. Completely well, yes, you Completely well, yes, you can completely can completely can completely debug and debug and debug and write code as you write code as you write code as you normally would.
-
normally would. So, a few more So, a few more points. Again points. Again points. Again , I was talking about , I was talking about , I was talking about centralized centralized centralized logging so you logging so you logging so you can search the logs can search the logs can search the logs and see if there are any and see if there are any and see if there are any errors. And that was errors. And that was errors. And that was extremely important. extremely important. extremely important. As I said, when As I said, when As I said, when you have dozens of tasks you have dozens of tasks , you want to have one , you want to have one , you want to have one place where you can place where you can place where you can see if there are any see if there are any see if there are any errors and what exactly is being errors and what exactly is being errors and what exactly is being executed. executed. executed. Again, here Again, here Again, here you can see what is you can see what is you can see what is planned and planned and planned and recent actions. recent actions. recent actions. Administration Administration Administration allows you to create allows you to create allows you to create groups. This space is groups. This space is groups. This space is for for for task queues. So, in Azure task queues. So, in Azure task queues. So, in Azure Container Apps, you can Container Apps, you can Container Apps, you can configure certain configure certain configure certain containers as large, containers as large, containers as large, others as small, or others as small, or others as small, or different sizes. So different sizes. So when containers when containers when containers are activated, a large are activated, a large are activated, a large container will of course container will of course container will of course cost significantly cost significantly cost significantly more. And small more. And small more. And small containers, as you containers, as you containers, as you understand, cost understand, cost understand, cost less. Returning less. Returning less. Returning to tasks: here you to tasks: here you to tasks: here you specify which specify which specify which queue it is. This way I queue it is. This way I queue it is. This way I determine whether I determine whether I determine whether I want to want to want to use a use a use a large or small large or small large or small container for this task. This is how you container for this task. This is how you container for this task. This is how you actually actually actually control your spending.
-
control your spending. control your spending. This is very important, This is very important, This is very important, especially when you have especially when you have especially when you have many tasks. many tasks. many tasks. Of course, Of course, Of course, time zone settings. And this, time zone settings. And this, time zone settings. And this, of course, is the of course, is the of course, is the AI settings. We support AI settings. We support AI settings. We support everything: OpenAI, Azure OpenAI, Azure everything: OpenAI, Azure OpenAI, Azure everything: OpenAI, Azure OpenAI, Azure Foundry, Anthropic, or Google. And Foundry, Anthropic, or Google. And Foundry, Anthropic, or Google. And authentication is authentication is authentication is very important. Here very important. Here very important. Here I have authentication set up I have authentication set up I have authentication set up through through through Microsoft and Google. So when Microsoft and Google. So when Microsoft and Google. So when logging in, we can logging in, we can logging in, we can log in either log in either log in either through Microsoft or through Microsoft or through Microsoft or Google. And yes, the secret Google. And yes, the secret Google. And yes, the secret strings are displayed strings are displayed . OK. This is important. . OK. This is important. . OK. This is important. So, you don't So, you don't So, you don't have to have to have to use a use a use a username and password. username and password. username and password. During the first During the first During the first installation, the system installation, the system installation, the system asks you to set a asks you to set a asks you to set a username and username and username and password. But then, password. But then, password. But then, when you're done, when you're done, when you're done, you can delete that you can delete that you can delete that account so that account so that account so that security is based security is based security is based solely on Google or solely on Google or solely on Google or Microsoft. Although, of course, Microsoft. Although, of course, Microsoft. Although, of course, you can you can you can also use a also use a also use a combination. This is also combination. This is also combination. This is also very important for very important for very important for security, because in security, because in security, because in some cases you some cases you some cases you don't want to don't want to don't want to use use use passwords at all. And...Yes, actually passwords at all. And...Yes, actually , that's all. So, I don't know , that's all. So, I don't know , that's all. So, I don't know if we have any if we have any if we have any questions.
-
questions. Hello, Michael. Hello, Michael. Greetings. Greetings. Greetings. Thank you very much for the conversation Thank you very much for the conversation . . . Yes, that was a great Yes, that was a great Yes, that was a great presentation. I'm presentation. I'm presentation. I'm curious about the history of curious about the history of curious about the history of this this this project? Have project? Have project? Have you tried you tried you tried to solve this problem to solve this problem to solve this problem before and just before and just before and just thought, "I'll thought, "I'll thought, "I'll build something for build something for build something for this myself"? this myself"? The story behind it is The story behind it is that, again, my that, again, my that, again, my friend Assad and I really friend Assad and I really friend Assad and I really love containers. In love containers. In love containers. In the past, again the past, again the past, again , I've been programming for , I've been programming for , I've been programming for 40 years, so I've been in this 40 years, so I've been in this 40 years, so I've been in this field for a long time. And field for a long time. And , of course, he has also been working in , of course, he has also been working in , of course, he has also been working in this field for this field for this field for decades. So we decades. So we decades. So we went all the way: went all the way: went all the way: from SSIS tasks to from SSIS tasks to from SSIS tasks to simple simple simple Visual Basic programs Visual Basic programs Visual Basic programs launched via the launched via the launched via the Windows scheduler. Windows scheduler. Lately, before Lately, before this project, we have this project, we have this project, we have usually usually usually used used used Windows services. We had a Windows services. We had a Windows services. We had a bunch of services bunch of services bunch of services running on an running on an Azure virtual machine. You go into an Azure virtual machine. You go into an Azure virtual machine Azure virtual machine , open services, , open services, , open services, and you see about 50 and you see about 50 and you see about 50 custom services custom services running all the time — that's what we running all the time — that's what we did. But when we did. But when we did. But when we discovered discovered discovered containers and their containers and their containers and their flexibility, it turned out to be flexibility, it turned out to be flexibility, it turned out to be much cheaper.
-
much cheaper. You can have individual You can have individual containers that containers that containers that can be very can be very can be very large, because on our large, because on our Azure virtual machine, tasks sometimes Azure virtual machine, tasks sometimes ran out of memory, ran out of memory, ran out of memory, and increasing memory and increasing memory and increasing memory on a virtual on a virtual on a virtual machine is more machine is more machine is more expensive. That is, sometimes a expensive. That is, sometimes a expensive. That is, sometimes a virtual machine virtual machine virtual machine costs $1,000 per costs $1,000 per costs $1,000 per month. I mean, it's month. I mean, it's expensive. So we expensive. So we expensive. So we love containers, love containers, love containers, but the problem but the problem but the problem we faced was the we faced was the we faced was the lack of lack of lack of centralized centralized centralized logging. When you have a logging. When you have a logging. When you have a bunch of tasks and logs bunch of tasks and logs bunch of tasks and logs scattered everywhere, scattered everywhere, scattered everywhere, it's hard to figure out what's it's hard to figure out what's it's hard to figure out what's going on. And, going on. And, going on. And, of course, the dashboard. We of course, the dashboard. We of course, the dashboard. We just wanted to know: just wanted to know: just wanted to know: what works? What is what works? What is what works? What is set up? set up? Deploying new Deploying new code takes time, code takes time, code takes time, so the story of this so the story of this so the story of this project began when project began when project began when we sat down in we sat down in we sat down in December and discussed December and discussed December and discussed every problem we had every problem we had every problem we had . And I essentially . And I essentially . And I essentially said: you know what? I said: you know what? I said: you know what? I think because we think because we think because we now have AI to now have AI to now have AI to help with code, we help with code, we help with code, we can solve can solve can solve every problem, no every problem, no every problem, no exceptions. So exceptions. So exceptions. So the features you the features you the features you see here are what see here are what see here are what we really need, we really need, we really need, not just something not just something not just something nice to tick.
-
nice to tick. nice to tick. No, every function here is what No, every function here is what we we we need. And I'll quickly need. And I'll quickly need. And I'll quickly say one more thing. say one more thing. For example, when we, uh , set up a job , set up a job where you can where you can where you can create a task, well create a task, well , you save it , you save it , you save it as a NuGet package, you as a NuGet package, you as a NuGet package, you can move can move can move it to another it to another it to another environment, Assad environment, Assad environment, Assad said, you know, I said, you know, I said, you know, I really need to be really need to be really need to be able to able to able to see this code again in that see this code again in that see this code again in that new environment. And that's something that new environment. And that's something that new environment. And that's something that usually usually usually when something is when something is when something is compiled, well, you compiled, well, you compiled, well, you can't see the can't see the can't see the source code. But with source code. But with source code. But with this you can, and you this you can, and you this you can, and you can change that can change that can change that source code right source code right source code right there if, say, it's an there if, say, it's an there if, say, it's an emergency. emergency. emergency. But then he said But then he said But then he said we also need to we also need to we also need to be able to be able to be able to roll back. roll back. roll back. Okay, we added it. Okay, we added it. Okay, we added it. But then he said But then he said But then he said that I also that I also that I also need to be need to be need to be able to take this able to take this able to take this code and upload code and upload code and upload it as a Visual it as a Visual it as a Visual Studio project. And, you know, so that it's a Studio project. And, you know, so that it's a Studio project. And, you know, so that it's a full full full development cycle. And it was development cycle. And it was development cycle. And it was extremely difficult extremely difficult extremely difficult to develop, but we to develop, but we to develop, but we did it. And obviously, did it. And obviously, did it. And obviously, when you're when you're when you're using something and using something and using something and dealing with real dealing with real dealing with real things, that kind of things, that kind of things, that kind of flexibility is very flexibility is very flexibility is very important. important.
-
I was surprised I was surprised to see the to see the NuGet package download in the UI NuGet package download in the UI . I'm like: . I'm like: . I'm like: oh, that's cool, isn't it? oh, that's cool, isn't it? oh, that's cool, isn't it? You don't necessarily have to You don't necessarily have to You don't necessarily have to constantly think about constantly think about constantly think about these these these deployment scenarios and deployment scenarios and deployment scenarios and how to move from how to move from how to move from testing to testing to testing to production production production environments. So it was environments. So it was environments. So it was really nice to see really nice to see really nice to see that you had thought through all that you had thought through all that you had thought through all these different aspects. And these different aspects. And these different aspects. And so, you've talked a lot so, you've talked a lot so, you've talked a lot about about about building these systems building these systems building these systems and, you know, and, you know, and, you know, using AI, and using AI, and using AI, and how that's how that's how that's accelerated your accelerated your accelerated your development. And so how development. And so how development. And so how much of that was much of that was much of that was split between split between split between what the AI was doing and what what the AI was doing and what what the AI was doing and what you were writing the code yourself? How has you were writing the code yourself? How has you were writing the code yourself? How has this affected your this affected your this affected your workflow? workflow? So it was very important to the design of this that you have this you have this AI window. You see, it's AI window. You see, it's AI window. You see, it's everywhere, right? If you everywhere, right? If you everywhere, right? If you 're working with a web 're working with a web application, it's there, this application, it's there, this application, it's there, this AI window is there. If AI window is there. If AI window is there. If you're using you're using you're using Visual Studio, well, actually the Visual Studio, well, actually the Visual Studio, well, actually the desktop solution, desktop solution, desktop solution, when you when you when you launch it, it's launch it, it's launch it, it's right there. Obviously, right there. Obviously, right there. Obviously, if you're in your if you're in your if you're in your code editor of code editor of code editor of choice, it's right there. choice, it's right there. choice, it's right there. And of course, there are And of course, there are And of course, there are skill files that skill files that skill files that tell the AI: oh, tell the AI: oh, tell the AI: oh, wait, here's how, wait, here's how, wait, here's how, you know, certain things you know, certain things you know, certain things that are needed for a that are needed for a that are needed for a task, and how task, and how projects are structured. Well, so that projects are structured. Well, so that part was part was part was important, because if we important, because if we important, because if we said, "Oh, you're said, "Oh, you're said, "Oh, you're going to have to going to have to going to have to code everything by hand," code everything by hand," code everything by hand," people would say, "Well, people would say, "Well, people would say, "Well, I use AI I use AI I use AI for a lot of things."
-
for a lot of things." for a lot of things." So this part was So this part was So this part was important. Um, during the important. Um, during the important. Um, during the development of this AI, development of this AI, development of this AI, of course, it was of course, it was of course, it was extremely important extremely important extremely important for us, because otherwise it would for us, because otherwise it would have taken a team of five or six developers over a have taken a team of five or six developers over a year to create all of this year to create all of this year to create all of this . And Sodom and I . And Sodom and I . And Sodom and I did it, you know, on the did it, you know, on the did it, you know, on the weekends. OK? This is a weekends. OK? This is a weekends. OK? This is a project for the soul. That's why project for the soul. That's why project for the soul. That's why I said that this is not a I said that this is not a I said that this is not a company, we don't company, we don't company, we don't sell anything. This is sell anything. This is sell anything. This is true true true MIT open source that we MIT open source that we MIT open source that we give to others to give to others to give to others to share. But yeah, we share. But yeah, we share. But yeah, we started started started using AI using AI using AI back in December to back in December to back in December to actually write the actually write the actually write the code for this thing. Because code for this thing. Because code for this thing. Because it is big. She is it is big. She is it is big. She is big. big. big. Yeah, I mean, Yeah, I mean, Yeah, I mean, she's really big, is she's really big, is she's really big, is n't she? And there are also n't she? And there are also n't she? And there are also many many many functional functional functional possibilities here. Is there possibilities here. Is there possibilities here. Is there anything you want anything you want anything you want to add in the future, to add in the future, to add in the future, or do you think this or do you think this or do you think this solves the problem solves the problem solves the problem Michael and many Michael and many Michael and many other people are having? So is other people are having? So is other people are having? So is it fully it fully it fully functionally functionally functionally complete, or do you complete, or do you complete, or do you feel like there's feel like there's feel like there's something else that needs to something else that needs to something else that needs to be added?
-
be added? be added? Um, it's definitely Um, it's definitely Um, it's definitely functionally functionally functionally complete, so we complete, so we complete, so we can can can use it use it use it for our needs. for our needs. for our needs. It has been stable for several months now It has been stable for several months now It has been stable for several months now , and we , and we , and we are using it are using it are using it for our own work. for our own work. As for future As for future improvements, I think improvements, I think improvements, I think the only thing that comes to the only thing that comes to the only thing that comes to mind is that it is mind is that it is mind is that it is very very very Microsoft Azure-centric. So there Microsoft Azure-centric. So there Microsoft Azure-centric. So there is no story with AWS yet. is no story with AWS yet. Of course, it Of course, it will run on AWS, but will run on AWS, but will run on AWS, but this is AWS, and of course Google, this is AWS, and of course Google, this is AWS, and of course Google, their containers—that's something their containers—that's something their containers—that's something we're not doing right now we're not doing right now we're not doing right now . So I . So I . So I hope the hope the hope the community will join in community will join in community will join in and expand on this aspect. and expand on this aspect. Perfectly. And I saw that there was a Perfectly. And I saw that there was a lot of lot of lot of modularity here. You modularity here. You modularity here. You create all these create all these create all these different systems. Are there different systems. Are there different systems. Are there other modules that other modules that other modules that you haven't you haven't you haven't mentioned today that you mentioned today that you mentioned today that you think would be useful think would be useful think would be useful for such projects and for such projects and for such projects and scenarios, and that might already scenarios, and that might already scenarios, and that might already exist?
-
exist? Well, again, we of Well, again, we of course allow course allow course allow any NuGet package any NuGet package any NuGet package or, if you're or, if you're or, if you're using Python, using Python, using Python, any Python package, any Python package, any Python package, so in terms of real so in terms of real so in terms of real functionality and functionality and functionality and extensibility, we extensibility, we extensibility, we assume you'll assume you'll assume you'll get that from get that from get that from them. As for Blazor Data Orchestrator them. As for Blazor Data Orchestrator , its real , its real , its real purpose at this point purpose at this point is simply to be is simply to be is simply to be a planner, a a planner, a a planner, a dashboard, a dashboard, a dashboard, a place for logs, and a place for logs, and a place for logs, and a way to see way to see way to see your code and, you know, your code and, you know, your code and, you know, manage the manage the manage the product lifecycle. So that's basically product lifecycle. So that's basically product lifecycle. So that's basically all it's all it's all it's intended for. intended for. But in terms of But in terms of what you can what you can what you can do in your do in your do in your tasks, because, again tasks, because, again tasks, because, again , one of the goals , one of the goals , one of the goals was to avoid was to avoid was to avoid a situation where we a situation where we a situation where we say, "Oh, you know what, say, "Oh, you know what, say, "Oh, you know what, you can do that?" "You you can do that?" "You you can do that?" "You can't really can't really can't really do that do that do that with Blazor Data with Blazor Data with Blazor Data Orchestrator." Well, practically Orchestrator." Well, practically Orchestrator." Well, practically everything you can everything you can everything you can imagine should be imagine should be imagine should be executed as a executed as a executed as a task, because task, because task, because when executing when executing when executing tasks, the tasks, the tasks, the user interface is of course user interface is of course user interface is of course absent if everything absent if everything absent if everything runs as a task.
-
runs as a task. runs as a task. Everything that can be done Everything that can be done Everything that can be done within the scope of the task, he within the scope of the task, he within the scope of the task, he must be able to must be able to must be able to do. do. I mean, it's all I mean, it's all great. Like I said great. Like I said great. Like I said before, there's so much here before, there's so much here before, there's so much here . Again, could . Again, could . Again, could you please you please you please share the site share the site share the site again so we can again so we can again so we can put it in the put it in the put it in the chat and people can chat and people can chat and people can check it out check it out check it out if they want. if they want. if they want. So, this is blazordata.net, and that's where So, this is blazordata.net, and that's where So, this is blazordata.net, and that's where you can you can you can get started. get started. get started. Class. Perfectly. Well, that Class. Perfectly. Well, that Class. Perfectly. Well, that was great, Michael. was great, Michael. was great, Michael. It was great to see It was great to see It was great to see you, as always, and yes, you, as always, and yes, you, as always, and yes, I definitely I definitely I definitely recommend this to people recommend this to people recommend this to people if you need if you need if you need something like this, and if something like this, and if something like this, and if you run large you run large you run large systems, then most likely you systems, then most likely you systems, then most likely you do. So be do. So be do. So be sure sure sure to check it out. And to check it out. And to check it out. And Michael, I want to Michael, I want to Michael, I want to thank you very much. It was thank you very much. It was thank you very much. It was nice nice nice talking to talking to talking to you. you. you. Thank you very much for Thank you very much for Thank you very much for inviting me.
Summary
The main theme is the introduction of Blazor Data Orchestrator, an open-source project built on Microsoft Aspire and Blazor Server. Key subjects include containerization, complex task planning, AI integration, and unrestricted package usage in both C# and Python. The practical takeaway is that this tool simplifies the management and execution of containerized tasks, offering a flexible and powerful orchestration platform.