The performance measurement is one of the most important things in the software development. Performance should be addressed throughout the whole development process and not only when the risks become problems. Major motivation for running something in the cloud is the fault-tolerance and scalability. Notice: without performance, scalability doesn’t exists.
“Performance and scalability are inseparable from each other. It doesn’t make sense to talk about scalability if a software system doesn’t perform. However, a software system may perform but not scale.”
This article shows you an approach how to dynamically measure performance of your code at runtime. With the help of PostSharp I created the aspect which is applicable to the all members in the solution. This aspect is using the performance counter of type AverageTimer32 to the measure average execution time.
It is some time ago that is possible to use Virtual Machine(VM) in Windows Azure. A good example when you could use VM is build your own FTP Server hosted in Azure. The problem is that most products are using hard disk to store the data. The question is how you could access the data from your Web or Worker Role instances.
NuGet is just great tool for the managing third-party assemblies in your Visual Studio projects. If you are using the ReSharper and you are using a type that isn’t referenced in the current project but in another one, ReSharper will offer to add new reference just with the one click. In the case of NuGet, those assemblies are indeed referenced from the right location, but are not using the packages.config metadata file, which is essential for the NuGet to know which assemblies are referenced by what project.
But is seems there is already for a couple of time a solution for this. JetBrains (the company behind ReSharper) released plugins for ReSharper 7.1 and 8.0.
If you want to know more details about the issue read here.
In my previous post I described the idea of using plug-ins in Windows Azure. In context of this sample we implemented a general plug-in framework. As we saw in the video, we need two services: one which is taking the work orders and stores them in the repository and the other one which is processing them.
WorkOrderGatewayService is representing a service which takes the work orders and stores them in the BLOB Storage. This service also answers the question whether the work order is done or not.
WorkOrderProcessorService is representing the service which is processing the work orders.
I often hear about the Cloud as the Messiah these days. Cloud should not be seen as a bad architecture saver; it is not. Bad architecture or approach will remain ‘bad’ under any circumstances, but linked with a Cloud you will faced significant costs. Cloud is about elasticity enabled through the pooled resources. If you don’t achieve high utilization, you are paying for nothing. High utilization of machines should be given as well, but how can we achieve this? The idea is simple; we are specializing work, instead of worker.
The “worker” in context of Windows Azure (now Windows Azure Cloud Services) is the Worker Role. The Worker Role is the beast which is continuously looking for a new job to be processed, similar to a Windows Service. But how to deliver a job do be done in flexible way and independently? The idea is simple, with the help of plug-ins.
Update 14. February 2013: In the Plug-Ins infrastructure I implemented in this sample was one big design issue. If you downloaded the code before this date, please take the new one. Read this blog entry for more details.
Update 10. March 2013: In the class
PluginBase was overridden the method
InitializeLifetimeService. This method is returning null, to disable remoting lifetime service. If you don’t do this you will get, after couple of minutes, the Remoting Exception “Object […] has been disconnected or does not exist at the server.” when the plugin’s instance is not be used. This is not the best idea for your production code, because the plugin’s instance is staying in memory until will not be explicitly unloaded from.
If you thinking about to upgrade to .NET 4.5 you should consider the Application Compatibility in the .NET Framework 4.5 Guide. This give you good overview about what has been changed and what should you pay attention to. This guide describes changes in following areas: Core, Data, Networking, Tools and Resources, ASP.NET, Managed Entity Framework (MEF), Web Applications, Windows Communication Foundation (WCF), Windows Forms, Windows Presentation Foundation (WPF), Windows Workflow Foundation (WF), XML, XSLT.