http://www.ageofascent.com/asp-net-core-exeeds-1-15-million-requests-12-6-gbps/

ASP.NET Core – Exceeds 1.15 Million request/s, 12.6 Gbps

Congratulations to ASP.NET Core and .NET Core teams and the Open Source .NET community for quite a milestone in performance!

2300% More Requests Served Per Second

1.15 Million represents a 2300% gain from ASP.NET 4.6!

Why 2 decimal places? I’m not sure why Scott Hunter chose that level of precision, but to me it’s quite significant…

The third decimal place 0.05 Million (e.g. 50,000) is around the total number of requests per second that ASP.NET 4.6 could perform of the same type, on the same hardware – as shown in the below graph:

ASP.NET 4.6 and NodeJs are bottom left. You can see the rapid strides in performance the leaner, more agile and componentized stack has taken (blue Windows, orange Linux) in just a few short months.

ASP.NET Core and .NET Core come with the great advantage of only including the libraries and functions you explicitly want to use in your application rather than bringing in the entire framework. So you only “pay”, programmatically speaking, for what you use.

This ethos is being repeated around Microsoft: Nano Server (Windows Server 2016) is so slim it only has 21 processes running – including your application! In a similar vein, Azure has ‘to the nearest minute’ billing on VMs.

This also allows easy side by side installation of different versions of the .NET framework on the same machine without version collision – or the fear of “What will happen to all the other apps on the same machine when I upgrade the framework for this app”. While .NET has always had a great version compatibility story, the upgrade fear is real.

More than 12.6 Gbps of Throughput

1,150,000+ requests served per second is for small fine-grained requests; but how does it perform for serving larger requests e.g. video, images, js, fonts and css files?

Running on an Azure G4 VM you can see we can hit 12.6 Gbps while only using 36% CPU. This is around the network cap for this type of machine – or we’d be going even faster!

Why is this important?

At a business level it means we can do more with less – which directly effects our bottom line.

I often hear the defeatist argument that performance like this doesn’t matter because (eg) “my database is slow”. That’s like saying I might as well use php in interpreted mode because “my database is slow” (has any one ever said that? I hope not). There is so much more potential, and it’s not just about raw throughput!

Looking at the simplistic case; I’d hope you aren’t serving your assets from a slow database… If you are, maybe you should reexamine your architecture choices or at least revisit what you are doing in the caching space. Everyone caches, even your CPU.

Moving to the cloud with on-demand scaling will also save you money. Or you can spend the same amount of money – but do a lot more.

Customer Delight

If you can leverage it, the question you should ask is whether the hugely improved response times of ASP.NET Core will delight your users.

Steve Desmond in his post Performance is Paramount; saw his page response times from upgrading from Beta8 (Oct 2015) to RC1 (Nov 2015) decrease from 20ms to 4ms.

Bear in mind ASP.NET Core beta8 was already 800% faster than ASP.NET 4.6, which itself was pretty nippy compared to many web frameworks and languages. RC2 is shaping up to be even faster – throw in some caching and you’ll be going back in time! 

Microsoft, Open Source & the .NET Foundation

Parts of ASP.NET have been open source awhile and the .NET source has been viewable also, but at the Build 2014 conference Microsoft announced the creation of the .NET Foundation as an independent forum to provide stewardship and to foster open development and collaboration for the growing collection of open source technologies of .NET.

In November 2014, they then announced that .NET Core was Open Source under the .NET Foundation and accepting contributions. It rapidly became cross-platform, running on Windows, Mac and Linux – with Mono and Xamarinproviding even wider platform support – including Android and iOS.

Is open source good for .NET? Has it changed anything? As an example of what is different is myself, Ben Adams at Illyriad Games and Stephen Halter at Microsoft jostling for the top spot on contributions to Kestrel, ASP.NET’s Web Server. This wouldn’t have happened previously!

Contributing to .NET OSS

We like open source because it gives us the best of both worlds: a great diversity of minds from all around the world with wider viewpoints than our own – including specialists in their field – with the ability to contribute if we need changes or fixes to suit our more particular needs.

Generally the community will build (and often improve) upon our contribution; enriching it for better code for all. Much like life; diversity is a good thing!

It also has the fringe bonus that Microsoft checks and reviews our code and – once it gets into a release build – they offer an Enterprise support agreement for it if anything goes wrong 

Why Is a High Performance ASP.NET Important to Illyriad Games?

We are building Age Of Ascent – an ultra-MMO; a new scale of game. Born in the cloud, it enables tens of thousands of pilots to be in the same battle; and millions of players to be in the same single-sharded universe – which can be accessed anywhere at any time, on any device.

It has real-time twitch combat, and yet is playable in a browser using HTML5 and WebGL.

So we need a high performance, high throughput, low latency web server. This might be a bit of a niche case and the world of a high speed real-time web may not be applicable to everyone.

However, this is not our only use case, and not the only reason we contribute back to improve ASP.NET and .NET Core’s performance. Age of Ascent is a lot more than a twitch space combat game.

Our other main component is likely more applicable to a wider audience.

Micro-services

Age Of Ascent is composed of multiple independent, dynamically scalable, stateful and stateless micro-services hosted and orchestrated with Service Fabric on Microsoft Azure. Service Fabric allows us to have a high density micro-service cluster which both scales to unexpected demands and grows as we grow.

Our communication mechanism between these micro-services is entirely ASP.NET Core based on David Zhao’s excellentService Fabric ASP.NET Core Hosting example.

This means our entire system’s responsiveness and performance hinges on the performance of ASP.NET Core. This is why it is important; and why we strive for performance. The more we can do; the richer an experience we can create for our players – at a lower cost.

Its important also because the days of Moore’s law performance improvements for single CPU cores are long gone; yet we also need to do more, and we are going big – really big. We need to get smarter, more efficient, cut the unnecessary, and scale across cores, sockets, containers and clusters of machines better.

.NET Core and ASP.NET Core are really shaping up to be the frameworks that we not only want, but also need.

Congratulations to the team!

ASP.NET Core – 2300% More Requests Served Per Second的更多相关文章

  1. 帅呆了!ASP.NET Core每秒能处理115万个请求

    今天看到一篇英文博文 -- ASP.NET Core – 2300% More Requests Served Per Second,被震撼了!ASP.NET Core每秒能处理115万个请求(是的, ...

  2. 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 webservice/API

    2018 .NET开发者调查报告: .NET Core 是怎么样的状态,这里我们看到了还有非常多的.net开发人员还在观望,本文给大家一个建议.这仅代表我的个人意见, 我有充分的理由推荐.net 程序 ...

  3. [转]Publishing and Running ASP.NET Core Applications with IIS

    本文转自:https://weblog.west-wind.com/posts/2016/Jun/06/Publishing-and-Running-ASPNET-Core-Applications- ...

  4. Allow Only Ajax Requests For An Action In ASP.NET Core

    ASP.NET Core offers attributes such as [HttpGet] and [HttpPost] that allow you to restrict the HTTP ...

  5. Ajax跨域问题及解决方案 asp.net core 系列之允许跨越访问(Enable Cross-Origin Requests:CORS) c#中的Cache缓存技术 C#中的Cookie C#串口扫描枪的简单实现 c#Socket服务器与客户端的开发(2)

    Ajax跨域问题及解决方案   目录 复现Ajax跨域问题 Ajax跨域介绍 Ajax跨域解决方案 一. 在服务端添加响应头Access-Control-Allow-Origin 二. 使用JSONP ...

  6. 【原生态跨平台:ASP.NET Core 1.0(非Mono)在 Ubuntu 14.04 服务器上一对一的配置实现-篇幅1】

    鸡冻人心的2016,微软高产年. build 2016后 各种干货层出不穷. 1 Win10 集成了bash  ,实现了纳德拉的成诺,Microsoft Love Linux!!! 2 跨平台  ,收 ...

  7. Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core

    本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core --- ...

  8. 发布Asp.net core到nginx 使用nginx代理

    In this guide, we will cover setting up a production-ready ASP.NET environment on an Ubuntu 16.04 Se ...

  9. Adding Cache-Control headers to Static Files in ASP.NET Core

    Thanks to the ASP.NET Core middleware pipeline, it is relatively simple to add additional HTTP heade ...

随机推荐

  1. vaadin_demo

    简介:主要一个登陆界面,登陆后跳转到主界面: 主界面功能是点新增,新增人员数据会保存到显示列表中: 一个很简单的demo 下面是截图

  2. HttpWatch的时间分析

    HttpWatch的时间段捕捉详解 这是一个IE的插件,下载可以点这里.下载后解压如下图所示,一共有4个文件.HttpWatch Professional是单独软件,可以单独使用. 解压后有四个文件 ...

  3. 分布式缓存技术memcached学习(二)——memcached基础命令

    上文<linux环境下编译memcahed>介绍了memcahed在linux环境下的安装以及登录,下面介绍memcahed的基本命令的使用. Add 功能:往内存增加一条新的缓存记录 语 ...

  4. springboot+dubbo之多端口注入服务

    前面介绍了,springboot+dubbo基础整合,这篇介绍多端口注入服务. springboot使用@Bean注入dubbo服务,当你是单一的ProviderConfig实例,dubbo的@Ser ...

  5. UVa #11582 Colossal Fibonacci Numbers!

    巨大的斐波那契数 The i'th Fibonacci number f (i) is recursively defined in the following way: f (0) = 0 and  ...

  6. node.js中module.export与export的区别。

    对module.exports和exports的一些理解 可能是有史以来最简单通俗易懂的有关Module.exports和exports区别的文章了. exports = module.exports ...

  7. jQueryMobile 网页在UC等游览器上无法正常显示或者是无法自适应设备大小,但在QQ游览器上能正常显示的解决方法

    造成jQueryMobile网页在QQ游览器上能正常显示,在UC等游览器上无法正常显示或者是无法自适应设备大小的解决方法: 在<head>标签间添加<meta name=" ...

  8. C++ I/O stream

    C++ I/O stream Ø The first, you should understand following: ... Ø Text: Ø Version: Visual studio 20 ...

  9. TotalCommander 之 快捷键

    显示编辑文件: F3:专门用来查看文件,这个恐怕是使用程度最高的快捷键了.当然并不是所有的文件都能打开,如需要查看更多类型的文件,还需要安装插件.或者直接双击用系统自带的软件查看也可.Ctrl + Q ...

  10. 掌握Thinkphp3.2.0----内置标签

    使用内置标签的时候,一定要注意闭合-----单标签自闭合,双标签对应闭合 标签的学习在于记忆和应用 一. 判断比较 //IF 语句的完整格式 <if condition="$user ...