PurePerformance - 044 101 Series: .NET Core and ASP.NET Core

Episode Date: September 11, 2017

Why would I move to .NET Core? If I move, can I just recompile my .NET code with the new .NET Core and run it on Linux? Or is there more to it? What is .NET Core at all and what does it provide as com...pared to ASP.NET Core? Can I still monitor my .NET Applications the same way as in the past or is there a new approach for tracing and monitoring? And is it true that all of this is now available on GitHub as Open Source project?Get answers to all these questions by listening to this episode where we got to talk with Christoph Neumueller @discostu105 ( https://twitter.com/discostu105 ) and Gergely Kalapos @gregkalapos ( https://twitter.com/gregkalapos ). Christoph and Gergely are two lead engineers for the Dynatrace .NET Agent technology. They are also code contributors to the .NET Open Source and other open source projects such as SuperDump ( https://github.com/Dynatrace/superdump ). Also check out their blogs ( https://www.dynatrace.com/blog/tag/net/ ) to learn more on .NET Core, ASP.NET Core and other .NET relevant performance topics. And, if you're a Dynatrace customer, make sure to up-vote the RFE to allow hot sensor placement for .net core. ( https://answers.dynatrace.com/spaces/151/product-feedback-and-enhancement-requests/idea/183988/hot-sensor-placement-for-net.html )Additional Links:TechEmpower Benchmark ( https://www.techempower.com/benchmarks/ )Blog about performance improvements as a result of community input ( https://blogs.msdn.microsoft.com/dotnet/2017/06/07/performance-improvements-in-net-core/ )Download and try out .Net Core ( http://dot.net )Dynatrace Free Trial ( https://www.dynatrace.com/trial/?vehicle_name=www.spreaker.com )

Transcript
Discussion (0)
Starting point is 00:00:00 It's time for Pure Performance. Get your stopwatches ready. It's time for Pure Performance with Andy Grabner and Brian Wilson. Hello, hello, everybody. Guten Tag. Andy, it's been quite a while since we've done a recording. I know to our wonderful listeners, they have no idea that it's been so long, but we had a nice chunk of time before we had to talk to each other again. So now, unfortunately, we're back talking to each other. Yeah, it was unfortunate, yeah, definitely. And definitely and i think i think unfortunately but that's okay come on
Starting point is 00:00:50 uh and i think uh well hopefully it can only go uphill from now because people don't know that we were struggled quite a bit to reconfigure your environment uh dealing with technology sometimes can be a little tough and um but i'm sure it'll be good. Yeah. And this wouldn't have happened with all hardware audio. It's all the software stuff. Um, Hey, before we go on, I do want to give a shout out to a new demographic of listeners, not a completely new, but I noticed in the last month or so, and this is going to be going back. So let's talk, let's say, um, maybe in June and end of May, we suddenly got a surge of listeners over in India. So we have some listeners all over the world and thanks to all them,
Starting point is 00:01:31 but wanted to welcome all of our listeners in India and say hello and thank you. There's a lot of performance enthusiasts out there, especially around performance engineering, performance load testing. So that's great yeah awesome so hopefully we can uh you know bring some good new content today as well because today we are actually talking about a technology that is actually dear to my heart as well because back in the days when i started my career i was certified on microsoft technology i did the mcp mcst whatever they used to call it they all the certification programs msc something like that it was back in 1998 when i got certified on all of that i don't remember
Starting point is 00:02:14 anything uh about that because i no longer need to administer windows server for the low or whatever it was called but today brian uh let's go over to our it's a topic i've been wanting to yes and it's a topic i've been wanting to talk about for a while so i'm so glad we have them because as soon as i heard about this subject i was like wow what the heck is this so please introduce yeah what what is this new thing newfangled technology from microsoft um so why don't you go ahead please introduce our guests and so so the topic today is one-on-one on.NET Core and ASP.NET Core and everything around what Microsoft has been doing around.NET and it's changed a lot and the two experts that we have with us today is Christoph Neumüller
Starting point is 00:02:55 and Gergely Kalapos hi and guys are you with us yeah hi perfect that was good yeah and uh and uh christoph and gagley you are colleagues from us out of our lint austria office part of the engineering team and maybe christoph you want to just take a couple of seconds and explain who you are and just a little background then we go to gagley yeah sure so uh this is christoph and and I work at Dynatrace, and I'm doing basically the.NET. I'm leading the team for the.NET agent, which is basically the part which does the performance monitoring for.NET applications.
Starting point is 00:03:37 Cool. Perfect. So that means you are one of the technical experts when it comes to injecting Dynatrace into.NET applications, and then with low overhead, obviously capturing all this information. Perfect. Yeah, I hope so. I hope I'm the expector. So if any of our listeners are Dynatrace users and they have a problem with their agent,
Starting point is 00:03:55 they should contact you directly, right? Yeah, right. And my email and my cell phone number is this. All right. Gegli. Yeah, okay. So in English, I go by Greg, and I'm a software engineer in the.NET team. So email and my cell phone number is this. All right. Gagli. Yeah. Okay. So in English, I go by Greg and I'm a software engineer in the.NET team.
Starting point is 00:04:10 So in Christoph's team. And yeah, we basically do the same thing, monitoring for.NET. Excellent. And what you guys also have been doing, and I'm not sure if people follow this, but Christoph, I know I follow you on Twitter. And you're always tweeting about some of the open source projects that you're also doing. I mean, we may have time later on to cover a little bit more about that. But I just wanted to say a big thank you to you guys and also Dynatrace that allow us to participate in the open source community, providing tools and software that help others as well and i think that the soup what did they call it the big time the super dump yeah so that is one one of the cool of the cool projects
Starting point is 00:04:53 we're doing currently completely uh in the open which is a crash dump analysis thing which is completely built on on dotnet, so the latest stuff. And yeah, we decided to open source that because it's not very tightly coupled with any of our other projects. And it's actually pretty cool and also helpful for, I think, other people. And yeah, we already got great feedback from the world for that. So that's pretty cool. Perfect. All right.
Starting point is 00:05:27 So now, guys,.NET Core, ASP.NET Core. from the world for that so that's pretty cool perfect all right so now guys uh dot net core asp.net core so how is that different from the dot net that we have been introduced by by microsoft i don't know 10 15 years ago i don't even remember when when it was what what has changed yeah it was like 2002 right dot net it is like 15 years old now. Very old. Yeah, so what we have now is.NET Core. And the big difference is that this is a cross-platform.NET. So it's not only Windows. It also runs on Linux and macOS and also on other platforms. I guess also on FreeBSD.
Starting point is 00:06:02 And not only cross-platform, but also open source. So this is a huge change at Microsoft. So they developed that on GitHub. They even take pull requests. And that's like a big shift at Microsoft. Basically following the big cultural shift we've seen anyway from Microsoft since they have the new CEO, it seems everything is moving towards more openness. Not only following, but almost leading that, because I guess on GitHub, they are the biggest open source contributors.
Starting point is 00:06:39 Oh, yeah. I didn't know that. There's like statistics where they're before Facebook and before Google. Yeah. So that's really interesting, too, because way back when I used to do work in video, I was working, I believe, at a financial news channel. But this was during the time when Microsoft was getting sued for antitrust with Internet Explorer. And there was the whole idea they were supposed to open their code and do all the stuff. And it was a real debacle.
Starting point is 00:07:04 They weren't really opening it. Microsoft has been known for years to be so close shopped, right? And the fact that they're going this open source is just incredible. So that's true. What's interesting there is they're not just open sourcing. They released everything under MIT license, which is the most permissive license, I think, one of the most permissive licenses. And they also released like a patent promise.
Starting point is 00:07:32 So they promise not to sue anyone for any stuff you take out of the framework, which I think is an interesting development. Because if you take a look at Java, for example java is open source too but it's not completely free uh depending which jvm you use uh it might if you use the oracle jvm you have to pay if you don't use it on a on a general purpose hardware which means on a phone or on a network device something like that uh actually you need to pay and now dot net is the more open thing to use compared to Java. Yeah and with that Java one they just recently came back and came out and said they're going
Starting point is 00:08:10 to start enforcing all that pay so that's I think very well timed by Microsoft or purposely timed. Yeah they openly also say that so. Can you tell me so if I look at. if i look at dot net core now um what's the upgrade path i mean writing the applications i understand but if i have existing dot net applications running on dot net four or five whatever it is is it the same interfaces the same can i port it over or do i need to write it from scratch anyway can you fill us in there yeah sure so that depends on your application um so there are obviously there are multiple big dot net frameworks for example like winforms wpf asp.net these are all different frameworks and depending on what you use the porting is either easy or hard
Starting point is 00:09:01 in general we can say that that in things where you have Windows in the name of it, it will be hard to port. But if you have, let's say, an ISP.NET application, which is written in the MVC programming model, it has nothing to do with Windows, and you can easily port that. So it's important to understand that the goal here from Microsoft wasn't to rewrite everything cross-platform and take it to Linux and other platforms as it is,
Starting point is 00:09:36 because obviously on Windows we have things like registry and stuff like that, and this is very Windows-specific. And obviously you don't want to port that. So for example, there is Mono, which is another CLR for Linux. And that basically simulates the registry. So you can write into the registry, but no other application uses that.
Starting point is 00:10:00 And they wanted to avoid that with core CLR. Yeah, makes sense. Is there a benefit even? I mean, would I want to upgrade to.NET Core? Or am I just good with existing applications, letting it run on the, I'm not even sure what it's called. Is it called the traditional or the legacy framework? It's called the desktop CLR. Well, there's multiple names.
Starting point is 00:10:23 I think there's not even an official differentiation. So we call it that.NET framework or full framework, which is the old thing. And then.NET Core is a new thing. That's what we call it, but I'm not sure what – I've heard it called by a lot of other names by other people, usually in anger, but I won't mention them. So back to my question is there is there a benefit if i upgrade or if i move over yeah so if that's tied to windows then you obviously don't want to port that if that's not tied to windows like let's say you have a back-end business
Starting point is 00:10:57 application which which which is a which is an api which basically responds with JSON responses, then you can port that. And you have obviously benefit because then you are cross-platform. You can also host that on Linux, not only on Windows. And in many cases, there are also actually performance benefits. So there are multiple reasons why Microsoft did that. One was open source and one was cross-platform
Starting point is 00:11:30 and one was also performance because the old or classical framework was designed like 20 years ago, but the world is now completely different. There's been this blog post like one week ago on MSDN where they list performance improvements which were done by the community. And there's like literally dozens of little improvements which they all benchmarked. And like here is a two-fold improvement. Here is a 12-fold improvement.
Starting point is 00:12:03 Here is 20%. Lots of little things that just sum up to a higher performance in.NET Core. Well, and I guess in general, as you say, right, the beauty of open source is you have a larger development community that actually contributes and hopefully improves the whole framework. And therefore, you can assume there's going to be more innovation coming on that new framework versus the old one, whatever you want to call it. That's pretty cool. Now, I guess also the other... Andy, I wanted to mention one more thing back to your question. Why would I want to port?
Starting point is 00:12:41 One big thing that is different in.NET Core is how you deploy the app. Because now, so that's a very big difference. Previously, you installed the.NET framework on your machine. And then when you upgrade it, usually you would get a replace the older version. So you couldn't have.NET 4.5, 4.6, 4.7 side by side. They would all replace each other. So now if you think about deploying something to the cloud, for example,
Starting point is 00:13:13 how would you know that there's the same framework there that you tested locally? No, but I mean, you programmed your app against. So that became, I think what a big problem and now with dotnet core you can you can easily side by side have have your framework side by side it's like when like like with the jdk you just x copy the framework somewhere and then you can use it and usually there's also an installer and it puts the framework side by side in your installation directory and then when you start your app which you targeted against dotnet Core 1.1, for example, it will use.NET Core 1.1.
Starting point is 00:13:49 If it's not there, it will not work. And Andy, before you move on, I want to just on this idea of benefits or detriments. One thing that I've come to see traditional.NET does more and more and more is control your things like your threads, your pools, all this kind of stuff, right? Where one of the benefits is it's just supposed to work and it manages all of that for you. And only in extreme cases, you have to go out and make some changes to how many threads you're running or GC or whatever might be going on. And even doing that is difficult. In.NET Core, is it still managing most of those components of the runtime
Starting point is 00:14:28 or does that change it to a more Java-like system where you're going to be setting those, setting specifically in your configuration? Well, in that case, I guess it's more the things that stayed the same as before. So like the garbage collector, the chit, and most of the thread pool stuff, what is there. This is basically pretty much the same implementation as it was before. So much of the Corsiola and.NET Core is just a port with many improvements, but still it comes from the same code base.
Starting point is 00:15:02 And lots of that stuff actually is similar than before. Yeah, no, I mean, I think that would be good because you don't want suddenly to throw that all in people's laps who haven't been used to having it managed for them. So that was awesome. I always think this was a curse and a blessing, right? It was a blessing because you didn't have to deal with it, figure out what is the right heap size and garbage collection strategy.
Starting point is 00:15:24 But on the other side, people that wanted to tweak it and optimize it and came especially from the Java side, they always asked, where do I configure all these things? But OK, these things stayed the same. That's good to know. And one word to the deployability. One thing that you can also do is you can build your application and then put the framework, the CLR, into the deployment itself. So you can build a standalone package which contains the framework itself
Starting point is 00:15:51 and only the parts that is necessary to your application. And then you have one standalone application, which you can deploy anywhere. And that's pretty cool. And that obviously supports totally the new deployment models and the new architectures, right? You have individual teams, individual microservice teams. And the microservice team A works with.NET Core 1.1 and the other one with already with the 2.0. And they're totally independent because they deploy everything in one unit. That's pretty sweet.
Starting point is 00:16:20 Now, do you think – now, you also said obviously cross-platform linux i remember one of the big things that i think i heard i'm not sure if it's true or not but if you look at azure at least i heard that a majority of the servers that now run on azure are actually linux and do you have any insights in the reason for that? Is this just because they want to get people from the Linux background to Azure? Do they run their Linux apps or do we know whether people are already building and running.NET core apps on Linux, on Azure maybe? And therefore we see a surge in more Linux machines on Azure than we assumed being Microsoft. So what I can tell you is that I have a small blog,
Starting point is 00:17:12 which is written in ASP.NET Core. So I wrote that, and I host that on Linux. And the reason for that is that it's cheap. It's easy to do. It's very cheap. This is like my personal blog, so I don't want to make money with that. And renting a Windows machine or some kind of Azure service would be an overkill for that. So therefore, I take the cheapest Linux machine what I can get, and I host it there. It's very easy.
Starting point is 00:17:45 So that's one use case. And on the other side, I guess there are big companies who already have Linux machines. Yeah. And in that case, it's also awesome. So you can also host your.NET Core applications there. So I don't think.NET Core is driving Linux in any way, but it's the other way around. There is so much stuff already out there in Linux,
Starting point is 00:18:10 and Linux does many things very well. And that was the reason for.NET Core, one of the reasons. And I think in terms of Azure, I think Microsoft doesn't care what's running there. I think they just want to have CPU cycles. They want people to run their stuff on Azure no matter what, and that is why they are broadening up. They support more platforms, obviously Linux,
Starting point is 00:18:35 because it's widely popular for server applications, and they want people to run their stuff in Azure no matter which technology. So just to pause here, with.NET Core, we're saying it's open source, right? So that means you're not paying to use it, right? Right. The container, right? You can also run it on Linux, which means you're not paying for the OS.
Starting point is 00:18:58 So if you're not running it on Windows, you're not paying for that Windows license. And then I guess in theory, if you were to take Linux with.NET Core and run it within your own data center, at that point, you're paying Microsoft nothing. Is that true? Because it sounds like the only way Microsoft makes money on this is if you're running it in Azure. Yeah, sure. So in that case, Microsoft is kind of out of luck. I don't know if this is a common scenario so i i would say well it could be but but what i'm thinking is that windows is not not really the the future revenue stream they're going to have i mean maybe yes oem licenses all that
Starting point is 00:19:40 stuff but i think the big revenue stream they they want to grow as much as possible is is the cloud business yeah that's just a diametric change that's uh amazing there is i guess i saw this on twitter there is also an image with like a son and the father and the son asks the question hey hey father what is the what is the what are clouds clouds made of and then he says well linux machines mostly and this actually describes the the situation we have today yeah that's a pretty cool one hey um i wonder i want to ask another thing so you talked about dot net core and i think gagley you also uh just mentioned your personal blog. You run it on ASP.NET Core. What is ASP.NET Core then?
Starting point is 00:20:28 Yeah, so when we talk about.NET Core, that's a virtual machine. That's the runtime which can run your code. And ASP.NET Core is a web technology or a web stack also from Microsoft. So traditionally, the web stack for.NET was called ASP.NET, so without the core. And the ASP.NET core is a rewrite of this web stack, which is also open source. And that's also cross-platform and even not only cross-platform,
Starting point is 00:21:10 but you can also run an ASP.NET Core application both on.NET Core, which is the runtime which runs also on Linux, but you can also run your ASP.NET Core application on full framework, so on the traditional CLR. There is one small thing I would like to add here is that ESP.NET Core 2.0 came out a few months ago and right, so it's preview. Currently, we have the preview 2 and that doesn't run on full framework.
Starting point is 00:21:38 So right now we have this strange situation that the current preview doesn't work on full framework but that's a temporary uh problem and that will be fixed yeah someone pointed that out the problem on github and i think there were like a thousand comments on github on that and then they like pulled back and said no we're going to fix it and and it's going to be available for full framework as well on 2.0 yeah and so so why was this rewritten is, I guess, the obvious question. And so if you have a cross-platform, then the web server from Microsoft was IIS,
Starting point is 00:22:15 or it's still IIS. Many people use that. But obviously, we don't have that on Linux and other platforms. And the thing is that ASP.NET Core is not tied to IIS. The classic ASP.NET, what we had before, that was very tied to IIS. So you were basically only able to host that on IIS. No chance to host that somewhere else,
Starting point is 00:22:38 like Apache and stuff like that. You can forget it, basically. And ASP.NET Core is completely independent from the web server, from IIS. Okay. So I remember back in the days when I, it's been a couple of years when I developed my last ASP.NET application on Windows. You're right. I mean, it was totally tied to IIS.
Starting point is 00:22:59 I remember though they had their web server development or the development web server that came with Visual Studio. I think it was kind of the first approach towards something independent from IIS. And then also in the very early days, I remember Cassini. There was like a standalone web server, but I think also just for development of a very small project. Yeah. So there was Cassini and then there was IIS Express. I don't know if they're related.
Starting point is 00:23:24 Exactly. Yeah, yeah, that's right. Yeah. And now with ASP.NET Core, you say it's basically implementing the tasks that a normal web server would basically handle, that it's handling of the connections. And I'm sure, is there anything else in there that it can do? Or would you then typically run it behind a different web server like nginx exactly so exactly so you do uh it's called reverse reverse proxy so asp.net
Starting point is 00:23:53 core itself has a web server it's called castrel so it basically starts up the the website and and it's listening on some port and it can then respond to the requests. But in the current version, you shouldn't use that on the edge. So you shouldn't expose that to the internet. You should use a normal web server in front of that, for example, Nginx or Apache, or you can even use IIS. That's fine. But it's not a production web server, what you have in ASP.NET Core.
Starting point is 00:24:30 Okay. And I guess this is the model what Node.js has, for example. So let me ask a question as if I was a Java-only person coming in looking at this because I've done a lot, and Andy, like you,
Starting point is 00:24:43 my earlier days of performance testing was mostly testing on.NET, but, you know, not being a developer, I never got into the differences of.NET and ASP.NET. So can you just break down, maybe at a high level, when somebody would use, you know, we can either talk either in terms of core or traditional, I think it really doesn't matter here when someone would use dot, you know, dot net versus ASP dot net and what those roles would be within an application, you know, as thinking in mind of someone who's coming from that Java only world,
Starting point is 00:25:14 maybe. Yeah. I mean, for a Java person, I think you can, um, so dot net core consists of the runtime, which would be the JVMvm right and the base class library
Starting point is 00:25:28 which in java is the runtime the the rt jar or whatever so the base the base libraries where you can do just do the basic things you have the basic data types you have you have a command line in out and and actually a bunch more stuff but you cannot do a web site with it right out of the box to do a website you would then use servlet api yeah and that would be asp.net core kind of i think right that makes sense yeah and uh and what about i think you mentioned it earlier, what about if I want to write a traditional UI application to reach clients, whether it's a WinForms or WPF?
Starting point is 00:26:13 Is this where I'm still kind of obviously bound, I guess, to the full framework because this would run on Windows anyway only? Yeah. Yeah. Yeah. So this is the bad news right now. There is no UI framework on top of.NET Core, except a small thing to add here is that there is this universal Windows platform,
Starting point is 00:26:35 or UWP. These are the new Windows 10 applications, which you can install via the Windows Store, and they also run on.NET core cool so they use so they use that framework but these are windows only applications so these are although that's dot net core you can only run that on windows now do you guys know any of the adoption i mean have you um have you seen a lot of asb net core or or just.NET Core applications out there, or is it still too early? Or are people already using it actively in production environments as well?
Starting point is 00:27:11 So I think it's ramping up right now. So we hear a lot of customers who say they want to migrate. And almost so many of those, they say they want to migrate first to ASP.NET Core. Then they want to switch to the.NET Core runtime as well. And then they want to go to Linux. So these are the steps they want to take. And some are further, some are not so far. And some are already there.
Starting point is 00:27:39 Some are already on Linux. And from those, we hear a lot of, hey, how can we do performance monitoring there? Because that is a big issue that on Linux, everything works fine, but the tools are not there yet. So on Windows, you have all those tools you can use to performance monitor, to profile and everything there. But the tools are not on Linux yet because the manufacturers they they're not there yet so so just to be clear there you because i've seen in the past something about the performance the perfmon counters and all if you are running this on windows you still have perfmon counters for dot net core and asp net core no no okay you're not saying that i thought you were saying that sorry so
Starting point is 00:28:23 performance counters for for example, they were very popular to simply measure garbage collection stuff and lots of other stuff. Request and queue and all that stuff, yeah. Yeah. So that's not there anymore. .NET Core doesn't implement that. Okay.
Starting point is 00:28:37 Because it couldn't be cross-platform anyway, and so they're not doing it at all. So, guys, then, and I know when we had a discussion earlier this week about what we want to talk about, you actually brought exactly this problem up, that the traditional way of where are my performance counters, because I want to use the performance counters for monitoring, this is no longer available. And I mean, that's a big challenge. So what's the alternative? Does Microsoft provide any alternative to that um yeah so one of the alternatives is um event tracing uh for windows again that's only for
Starting point is 00:29:11 windows but um.NET Core emits those events for certain things that for example happen in the garbage collector and then you can you can consume those events. But those are not metrics. They are just events. Like now a garbage collection starts, now it stops. So what we did in our agent, we registered those ETW, event tracing events. And then we calculate metrics, which basically simulate those that you were used to with perf counters. So we named them the same and we calculate them roughly the same.
Starting point is 00:29:49 Now you have the benefit that you see those simple metrics again, but in the background, we use ETW for that. So does that mean you'd also get like threads or is this mostly timed events? Yeah, currently, no, it's just timed. Yeah, you get on which thread it happens yes right but i mean thread counts or something like that or pools and connections um we don't do that yet but that
Starting point is 00:30:13 we could do it yes but it's more work because we we uh we need to capture those events and calculate the stuff ourself and current currently we're just doing gc events gc metrics yes i could see people having a big problem with that. Not from our side, but from the.NET Core side. It sounds like you can't even see how many threads are running. That's just really, I don't know, crazy to me. One thing I would like to add here is that there is another framework also built into.NET Core, and it's called Diagnostic Source. This is basically a new invention from Microsoft.
Starting point is 00:30:53 This is like a framework code can basically send events, and then listeners can register to these events. So like, for example, there is an object-reinational mapping framework called Entity Framework Core, and it can send database-related events. So it can, for example, say, okay, now I will execute a SQL connection. And it also says, okay, the SQL connection looks like this. And you can in-process register to these events.
Starting point is 00:31:24 And this is a new framework in.NET Core. Cool. And then so that means the standard frameworks are already used, just like ADO.NET. But you as a developer can also use the same framework to come up with your custom events. Yes, exactly. So you can in-process register.
Starting point is 00:31:42 Yeah. But not only register, but can you also emit these events? Yes, you can. Yeah. Perfect. So if you write a library, then you can also send these events. Yes. And is this the way, I know that Microsoft, they have their, what's it called, their insights project or program?
Starting point is 00:31:59 Yeah. Application insights. Application insights. Yeah. So I know we had Martin Gutenbrunner on a call a couple weeks ago, and I believe we briefly touched application insights and we talked about Azure monitoring. But does application insights, I would assume,
Starting point is 00:32:15 mainly obviously work on.NET only, whether it's core or full framework? And it really heavily relies on these events. That means if there are no events coming from your custom code you have to build them in manually is this kind of a correct assumption yeah so exactly so first of all application insights it's not only for dot net or dot net core so there is also a library for java and node.js and also other applications. So what we have as agents, they have a similar library to multiple platforms. And to the other question, yes, they heavily rely on these diagnostic source events. But this depends on where you are. So on.NET Core, you have these events.
Starting point is 00:33:07 On, for example, Classic.NET 2.0, which was released like 10 years ago, you don't have that there. So the thing is that you as a developer have to write your diagnostics code in the application. That way you can make sure that you always send the events. But sometimes you don't have it out of the box. Yeah. Well, especially, I mean, I guess this is obviously where the benefit from commercial tools like Dynatrace come in. Because we automate all of that because our agent instruments the application and then whether it's java.net node
Starting point is 00:33:45 js whatever runs in your environment we automatically give you all the monitoring and tracing information without having to change the code and in some instances you cannot change the code because it's not your code right i mean you're exactly right yeah you run like a like a erm system which is like salt to you then you won't change the code, yes. Exactly. Yeah, and people are asking for, as I mentioned, especially for what can we do on Linux? How can we monitor it?
Starting point is 00:34:16 And we're actually currently working on porting our.NET agent to Linux. So this is also very exciting new stuff here. And we have the first version already running. So it already injects into Linux, Linux.NET Core processes, and we already have PurePath there. So that's for us. It's pretty exciting and new land. So that's pretty exciting because that means, you said earlier, companies are going to, if they have their existing ASP.NET apps, they'll probably first migrate to ASP.NET Core. Then also replace the.NET Core framework or the traditional full framework. And then they're porting over to Linux. And then we have them covered because we already have a – we're working on the Linux agent right now and then they can run their.NET applications
Starting point is 00:35:07 that they ported on Linux in combination with whatever else they have running on Linux, whether it's Node.js or PHP or Java. And no need for developers to do any modifications because we provide the technology. Sweet guys. And one thing I would like to add
Starting point is 00:35:23 is that we basically took the same approach as many other companies do. So first we had, and we even have blog posts about this. So first we had support for ESP.NET Core on full framework. Then we had.NET Core. So ESP.NET Core, not only on full framework, but also on.NET Core, but only on Windows. That was beta like a few months ago. And then we go for.NET Core for Linux. And that's kind of where we are now.
Starting point is 00:35:56 Yeah. So if you mention these blogs, I guess where will we find them? On blog.dynatrace.com? Yeah. Yes. Just search for.NET and you will see our faces.
Starting point is 00:36:08 I think there's one or two from you, Gerger, and one from me. And there'll be more. When we bring up the Linux stuff, we're going to write, I think, a couple more. Yes. There's a question I had that's kind of been, I feel like it's the gorilla in the room question.
Starting point is 00:36:25 You know, we're talking about.NET Core and running it on Linux and all, but does this run in containers? Absolutely. It does, so you can push this in Docker. Yeah, there is even support in Visual Studio for that. So if you have a.NET Core or an ASP.NET Core application, you can do right-click in Visual Studio
Starting point is 00:36:44 and say add Docker support. And it creates a Docker file for you. Wow. And there is Docker images officially from Microsoft for.NET Core Linux images. But there is now also Docker for Windows. And they also have the Docker images, the.NET, the images which contain.NET Core with Windows Server Nano, and those also work very good.
Starting point is 00:37:11 It's great stuff. Yeah, that was a big difference between full framework and.NET Core. So you can containerize a full framework application, but it's not a good experience. It becomes a huge image because the framework is part of the operating system um and that's not not not good that's like yeah exactly yes yeah hey um coming back to the performance topic is there anything else besides
Starting point is 00:37:43 we talked about monitoring and how data has changed? But any other things that you have seen out there from a speed perspective? Because obviously people always want to know, you know, is it worth, is ASP.NET Core worth moving towards? Are there any benchmarks available where Microsoft says, right, we have really done great work with ASP.NET Core, and it's faster than anything else you see in the world. Anything that you see there? Yes, there is. So this is the Tech Empower benchmark. This is, like, for me, it was new, honestly.
Starting point is 00:38:18 But this is a known, very well-known web framework performance benchmark. And originally, the classic ASP.NET implementation was, like, well-known web framework performance benchmark. And originally, the classic ASP.NET implementation was sometimes not even on the list, and most of the time, at the very end, the goal at Microsoft was to get into the very top, and they actually managed to do that. So if you search for Tech Empower benchmark, then there are multiple benchmark
Starting point is 00:38:46 in the plain text benchmark. They are, I don't know which place, Christoph. I don't know the place, but they're doing like 1.7 million requests per second in that benchmark. And to compare that, for example, Node.js also ranks there and that's at
Starting point is 00:39:05 400,000 requests per second so ASP.NET Core is like four or five times faster than Node.js out of the box for a simple thing that's pretty interesting fun fact is that there is a huge community involvement here
Starting point is 00:39:21 there were multiple pull requests just for performance from not Microsoft people. Open source is a great way to get some free engineering. Yeah, exactly. So performance and speed is, I think, one of the main things
Starting point is 00:39:38 why you would want to go to ASP.NET Core. Also, it's more future-proof, but if you have an existing application, you want to make it faster, go to.NET Core. Also, it's more future-proof, but if you have an existing application, you want to make it faster, go to.NET Core. It helps. And also because one of the reasons is because.NET Core comes with nothing
Starting point is 00:39:53 out of the box. It's like you say, okay, respond with Hello World, but there's nothing, no features in there out of the box. You have to opt in with features. And so you only pay what you need no features in there out of the box. You have to opt in with features. And so you only pay what you need, and that makes it very fast out of the box.
Starting point is 00:40:16 Of course, you add more stuff, it needs more compute time, but compared to ASP.NET, the old framework, there you would get many features which maybe you don't even need. Hey guys, are there any other topics that we missed? Anything that you think the community should know about it? One thing we should definitely talk about a bit more is an arc back maybe to the beginning where we talked about open source. For us, it's great. Open source thing is great also because we I mean, we do a profiler,
Starting point is 00:40:46 which goes very deep into the CLR. And we face issues sometimes where there's like nobody else in the world does that. So there's no documentation, nobody to ask. And now since it's open source, we can actually go there and compile the thing ourselves, go through the code and debug the thing through ourselves.
Starting point is 00:41:05 And that is like a huge improvement for for our development uh and obviously and then contribute back to the community in case you actually found the problem yeah exactly so yeah so one one project where we actually contribute a lot is it's called el verify and um so the problem we faced is that so we are a profiler, meaning we basically emit bytecode. And we want to verify this bytecode. So we have to make sure that we don't emit anything, which would be illegal for the CLR because that leads to a crash, a crash of the application, obviously.
Starting point is 00:41:43 And there are only a few companies and few people with this problem. And there are basically two types of people having this problem. One is compiler writers, so the C-sharp compiler people. And the other group is profiler writers like us. So there was one tool for full framework
Starting point is 00:42:04 to verify this bytecodecode it's called uh what is what's that called verify verify exactly but the problem with that is that it's a full framework concept so you can't use that on core clr and there were some dls which some some assemblies which you can't verify with that and so so therefore Microsoft had an idea, okay, let's start a verifier for the bytecode for the intermediate language. And this is called ELVerify. And we discovered that and we said, okay, we also need that. And we basically worked together on that. But then we saw it's only half implemented, right? Yeah, so it was half implemented
Starting point is 00:42:44 and then we joined the project, basically. And right now we are on a stage where you can basically run it on any assembly. We don't go through every possible checks, but we have like a really good coverage. So if you emitted something which is not valid, with very high probability, we will tell you that, or not we, this tool will tell you that. And this is also open source. So there are only a few people having this problem, some people at Microsoft, we, but we really need that.
Starting point is 00:43:19 So we said, okay, then let's implement this. Cool. Anything else? Yeah, what is cool also, we are kind of, then let's implement this. Cool. Anything else? Yeah. What is cool also, we are kind of, now that we're known a bit to the Microsoft, the CLR people,
Starting point is 00:43:33 we sometimes also get involved into like pull requests. For example, there's been a recent pull request, which is a change in the CLR chip. And we've been asked to review that. Or like, at least to like, tell them if this is going to break our workflow or anything.
Starting point is 00:43:50 And it's a pretty interesting thing. They're going to add a multi-tier JIT, which means right now a method gets called the first time, it gets JITed, right? And they want to change that into, if it gets called the first time, called the first time, they jit it, but with a low quality,
Starting point is 00:44:08 a fast jit, which produces not so optimized code. And then when the method gets called repeatedly, they want to jit it again and compute high quality code. So that basically means don't waste the time in making something very optimal if it's
Starting point is 00:44:26 only called once, but only optimize it 10 minutes. Yeah, it's cool. Yeah, exactly. And that's like in the process of being implemented right now, maybe I don't know which version this will go in. And we are already involved in discussions for that feature right now. That is pretty cool, I think. Nice. Hey, in that respect, one question that I've always been asked, when will.NET finally provide the ability to do what we call hot sensor deployment in Dynatrace? Thanks for the question. I guess we have a request, an RFE for that, and you can vote that up. Okay, yeah, we should put the link
Starting point is 00:45:05 to that RFE. That's a great idea. So it's basically possible the interfaces are there. It's called rechit. So you can request the method to be chitted again and we could use that
Starting point is 00:45:15 to then generate a new bytecode with maybe a new sensor or one sensor removed. And yeah, there's a feature request for that. Yeah, let's vote up that's what it is perfect we'll definitely put that link out andy yeah all right brian do you think it's time for for the summary the summer data yes come on yes all right so guys typically what we do at the end of the show i try to kind of summarize the highlights that i've at least learned and hopefully i don't
Starting point is 00:45:44 miss anything. But basically what I think I learned is Microsoft has not only publicly made a huge shift, but I think they are now kind of spearheading what the open source world is doing. They're leading, as you said, the open source contributions on GitHub, putting the.NET framework,.NET Core and ASP.NET Core on open source and using the MIT license is a major change. The reason why people may want to move to the new.NET framework, to.NET Core and ASP.NET Core is obviously the cross-platform capabilities, running it on Linux or wherever you need to run it. And the approach that a lot of people take is based on what I learned from you guys is if you have existing apps, if you're, if it's purely windows, right. And you want to stay in windows, then don't do it.
Starting point is 00:46:31 I don't, there's no need. But if you want to migrate, then you probably take a web application, convert your ASP.NET to ASP.NET core, then try to replace the full framework with a.NET core framework. And then you are free to move to any other platform. And last thing I think what I learned, while we have to relearn a lot of the things that we did from a performance monitoring perspective, because certain things like performance counters that we heavily relied on are no longer there. ETW is the framework.
Starting point is 00:47:05 It's event-driven. And so these are events that we can consume. And the way Dynatrace solves the problem or actually makes migration easier for our customers is to use these events and then generate metrics out of it so that we actually have something that we've known from the past, like garbage collection times and things like that
Starting point is 00:47:25 so that's pretty cool and um well i love it and it's great that what you guys are doing on the open source world i think it's fantastic that we have we as diamond trace and your team especially seen as a group of experts that are also pulled in into pull requests to get your feedback and we are very uh well we're happy that we are we are we're part of this big transformation so that's pretty cool yeah great so um andy i'll give you my my final thoughts here now uh and you guys will actually yeah we'll talk we'll go we'll toss to you for final thoughts uh at the end you guys can have the last word on this um you know i've had a love-hate relationship with Microsoft for a long time now, probably primarily because
Starting point is 00:48:08 it's what I've mostly worked with, you know, between desktop, you know, OS, between, you know, concentrating most of my performance testing, I'd say, you know, probably 70% of it was .NET and seeing all the cool kids doing Java and everything else. It kind of seemed like Microsoft was relegated to the guys wearing slacks and polos tucked in with a braided belt and all the cool kids wearing t-shirts to work. We're, we're doing the Java and everything else. And it's really exciting between the open source bit of it. I can't stress enough. Like I wish when we'd first started Linux, we had a way to put a huge amount of echo and reverb on it. I can't stress enough. Like I wish when we'd first started Linux, we had a way to put a
Starting point is 00:48:45 huge amount of echo and reverb on it. Cause that is huge running, running Microsoft on Linux and everything they're doing with Azure. You know, it's not like, Oh, you go to Azure for your, for your windows machines. It's completely open. It's, it's an exciting possible resurgence of Microsoft. And even though I had, you know, my issues with it in the past, you know, I always love an underdog and, and it's so great to see this happening. Um, because, uh, I feel like people who've been doing.net for so long can now maybe hold their head up higher in public, you know, and if they go to the conferences, they don't have to be ashamed to wear like a.net core T-shirt or something because that's really cool now.
Starting point is 00:49:26 So I just I look forward to seeing more about it. As soon as I heard about this whole.NET Core stuff, I was trying to wrap my head around it and really understand, like, wait, are they really doing these things? And yeah, so amazing. Thank you guys so much for explaining it. You guys cleared up a lot of questions I had about it as well, and I hope it was useful for our listeners. So just thanks again for being on, and I can't wait to see what more goes on with it. And I'm also looking forward to finding out, probably from Andy, hopefully, what the common problem performances will find out are, if there's anything new in ASP.NET and ASP.NET Core. You mean performance problem patterns?
Starting point is 00:50:08 Yes. If there's anything new or is it going to be the same old? Or are people going to be prone to, for some reason, not make the same old mistakes? Anyhow, any final thoughts from you two, Chris and Greg? Yeah, go on, Christoph. I agree that.NET is kind of seeing a renaissance. So yeah, as you said, it grew a bit old, I would say. But now everything is new, exciting,
Starting point is 00:50:35 and solves so many issues that were there in the past. And the whole community strives now and really sees a renaissance. And being part of that is pretty cool, pretty exciting. Yeah. And what I would like to add is that.NET t-shirt is really cool because I have one. And other than that, I would just encourage people to try it out because this is really cool. It's easy to start with.
Starting point is 00:51:02 Wonderful. All right. cool and it's easy to start with wonderful all right and we will put the links to your twitter accounts and to the blog posts and the rf feed that you want to all upload on the on the podcast page as well so perfect yeah thanks guys thanks for having us thank you thank you everybody for listening goodbye Thank you, everybody, for listening. Goodbye. Bye.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.