PurePerformance - 044 101 Series: .NET Core and ASP.NET Core
Episode Date: September 11, 2017Why 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)
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
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,
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
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
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.
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,
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.
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
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.
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.
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.
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.
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.
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
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
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,
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.
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.
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
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
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.
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?
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,
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.
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
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.
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.
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
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.
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,
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.
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,
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,
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.
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
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?
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,
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.
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,
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,
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.
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.
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
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.
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,
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,
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
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?
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,
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?
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.
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
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.
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
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.
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
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.
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.
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.
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?
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,
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.
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
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?
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
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
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.
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.
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.
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
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.
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
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.
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
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
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
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
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
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.
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,
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.
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.
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
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
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.
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,
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.
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,
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
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
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
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
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.
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.
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
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
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
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.
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?
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,
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.
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.