Earlier this month Norm Murrin and I gave a talk at the Chicago Coder Conference. We learned a lot about how the offerings of each company compares during our preparation. In the end we come to the conclusion that there is no clear winner except those of us who are leveraging the resources. Check out this video posted by the conference do get the blow-by-blow details.
UI development gets all the attention, but application integration is where the real work is done. When it comes to application integration in the Azure ecosystem you better learn how Functions and WebJobs are developed and under what conditions you should use each. In this post I will try to answer those questions.
For me it is important that a solutions is reasonably maintainable, deployable through environments and can be easily managed under source control.
Both products are built on the same code base and share the same base API. From that perspective they are closely matched. Functions do have the advantage of handling web hooks as opposed to simply timer and storage events with WebJobs.
There is another difference that I haven’t been able to prove you, but I’ve seen mentioned in a couple of places. It seems like Functions may take time to warm up since they aren’t always instantiated. Since WebJobs are always running they would not incur this startup cost. If immediate processing is important then WebJobs may be the more appropriate options for you.
When it comes to actual development I prefer to have the resources of Visual Studio to write and manage source code as well as package my deliverables for deployment. As of this writing I have not been able to find a Visual Studio project type. This means you edit the code through a web browser. This in portal editor does allow you to integrate with Git or VSTS for source control. I would expect at some point in the future we will get a Functions project type.
Both WebJobs and Functions can be written using C#/VB.NET and Node.js. From the language availability perspective they are even.
So what is the real separating line between using one or the other. From what I have experienced so far, if you need the web hooks then Functions are the right choice. If you don’t need the web hooks and maintainability is you priority then WebJobs are the way to go. I’m sure there are more reason, but these are the most obvious in the early days of Functions. As the products evolve I’ll post updates.
Christopher Anderson (@crandycodes) from the Azure team replied via Twitter with the following:
You hit on some key points like lack of tooling/VS integration. We plan on addressing those before GA.
I think the major point missing is the dynamic scale functionality, pay per use. Functions scale automatically and don't cost a VM.
Also, if you run Functions in dedicated with always on, there is no cold start issues, but you pay per VM at that point.
WebJobs vs Functions is really: "Do I want to manage my own custom service?" Yes: WebJobs, No: Functions. Otherwise, similar power.