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. Ajax请求安全性讨论

    今天我们来讨论一下ajax请求的安全性,我相信各位在系统开发过程中肯定会绞尽脑汁的想怎样可以尽量少的防止伪造ajax请求进行攻击,尤其是开发跟用户交互比较多的互联网系统.那么就请大家来分享讨论一下你在 ...

  2. MongoDB学习笔记(1):MongoDB简介

    1. MongoDB的特点: (1) 易于使用 MongoDB是一个面向文档的数据库,非关系型数据库.通过在文档中嵌入式文档和数据,面向对象的方法能够仅使用一条记录来表现复杂的层次关系.文档的键和值不 ...

  3. 数论 - Vanya and Computer Game

    Vanya and his friend Vova play a computer game where they need to destroy n monsters to pass a level ...

  4. NOIP2013D1T3货车运输

    题目链接:http://www.luogu.org/problem/show?pid=1967 数据:http://www.cnblogs.com/wanglichao/p/5592058.html ...

  5. H5开发中的问题总结

    最近公司做了一个出行日记的项目,里面的页面十多页,天天加班,做到吐血.总体来说,写页面的时候虽然是十多个页面,其实难度还是在每个页面的特效上.公司是易到用车,出行日记的页面在APP里有生成入口,有兴趣 ...

  6. ZeroMQ接口函数之 :zmq_init - 初始化ZMQ环境上下文

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_init zmq_init(3) ØMQ Manual - ØMQ/3.2.5 Name zmq_init - 初 ...

  7. oracle 数据库 时间差 年数、月数、天数、小时数、分钟数、秒数

    declare l_start date := to_date('2015-04-29 01:02:03', 'yyyy-mm-dd hh24:mi:ss'); l_end date := to_da ...

  8. UVA 10791 Minimum Sum LCM(分解质因数)

    最大公倍数的最小和 题意: 给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 那么找出一个序列,使他们的和最小. 分析: 一系列数字a1,a2,a3 ...

  9. php文字、图片水印功能函数封装

    一直在做有关php文字图片上传方面的工作,所以把此功能函数整理了一次,现在分享给大家. <?php class image { var $g_img; var $g_w; var $g_h; v ...

  10. 07@Pattern_Note_命令模式

    前言 20160109: 今天开始看命令模式,主要从概念和实现来深入理解该模式 概念理解[部分来自摘录] 概念 通常来说,"行为请求者"与"行为实现者"是紧耦合 ...