kestrel

使用命名管道承载gRPC

那年仲夏 提交于 2020-08-11 17:36:51
最近GRPC很火,感觉整RPC不用GRPC都快跟不上时髦了。 gRPC设计 gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架。刚好需要使用一个的RPC应用系统,自然而然就盯上了它,但是它真能够解决所有问题吗?不见得,先看看他的优点: gRPC的主要优点: 现代高性能轻量级 RPC 框架。 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现。 可用于多种语言的工具,以生成强类型服务器和客户端。 支持客户端、服务器和双向流式处理调用。 使用 Protobuf 二进制序列化减少对网络的使用。 对应的适用场景: 微服务 :gRPC 设计用于低延迟和高吞吐量通信。 gRPC 对于效率至关重要的轻量级微服务非常有用。 点对点实时通信 :gRPC 对双向流式传输提供出色的支持。 gRPC 服务可以实时推送消息而无需轮询。 多语言环境 :gRPC 工具支持所有常用的开发语言,因此,gRPC 是多语言环境的理想选择。 网络受限环境 :gRPC 消息使用 Protobuf(一种轻量级消息格式)进行序列化。 gRPC 消息始终小于等效的 JSON 消息。 gRPC还是有缺点的: 浏览器支持受限 :绝大数浏览器不支持 HTTP/2 非人工可读取 :proto文件规定的格式在通讯中会序列化成二进制数据,人工解析较为困难。 不适用的场景与替代: 浏览器可访问的API :gRPC

ASP.NET Core静态文件处理源码探究

别来无恙 提交于 2020-08-07 16:44:36
前言 静态文件(如 HTML、CSS、图像和 JavaScript)等是Web程序的重要组成部分。传统的ASP.NET项目一般都是部署在IIS上,IIS是一个功能非常强大的服务器平台,可以直接处理接收到的静态文件处理而不需要经过应用程序池处理,所以很多情况下对于静态文件的处理程序本身是无感知的。ASP.NET Core则不同,作为Server的Kestrel服务是宿主到程序上的,由宿主运行程序启动Server然后可以监听请求,所以通过程序我们直接可以处理静态文件相关。静态文件默认存储到项目的wwwroot目录中,当然我们也可以自定义任意目录去处理静态文件。总之,在ASP.NET Core我们可以处理静态文件相关的请求。 StaticFile三剑客 通常我们在说道静态文件相关的时候会涉及到三个话题分别是启用静态文件、默认静态页面、静态文件目录浏览,在ASP.NET Core分别是通过UseStaticFiles、UseDefaultFiles、UseDirectoryBrowser三个中间件去处理。只有配置了相关中间件才能去操作对应的处理,相信大家对这种操作已经很熟了。静态文件操作相关的源码都位于GitHub aspnetcore仓库中的 https://github.com/dotnet/aspnetcore/tree/v3.1.6/src/Middleware

.NET Core 3.1 的REST 和gRPC 性能测试

情到浓时终转凉″ 提交于 2020-08-06 11:34:26
看到越南小哥 的github 上的 Evaluating Performance of REST vs. gRPC , 使用的是.NET Core 3.0 , 今天我把它升级到.NET Core 3.1 同样做了一个测试,文章的结果和他的博客文章是一样的: https://dev.to/thangchung/performance-benchmark-grpc-vs-rest-in-net-core-3-preview-8-45ak 。 在8年前我写过一篇文章: WCF和ASP.NET Web API在应用上的选择 。 现在是2020年了,WCF换成了gRPC, ASP.NET Web API换成了ASP.NET Core Web API, 对外提供标准化的REST服务,内部通信采用gRPC的也是新时代的.NET应用程序的一个好选择,类似于Kubernetes 架构将有效负载格式用于传输协议的方式。 我们来看下.NET Core 3.1下REST和gRPC的性能表现怎么样? 从 https://github.com/geffzhang/RESTvsGRPC 下载代码。在测试机器上安装.NET Core 3.1。 REST API: cd RESTvsGRPC\RestAPI dotnet run -p RestAPI.csproj -c Release gRPC API: cd

解惑求助-关于NetCore2.2中间件响应的问题

眉间皱痕 提交于 2020-07-29 01:57:00
背景介绍:基于netcore2.2开发api接口程序,自定义了一个异常捕获中间件,用于捕获未经处理的异常以及状态码404、500等访问(设计的出发点就是,出现了非200的响应,我这边全部会进行处理成200,并返回固定格式的JSON格式数据),并进行统一的信息返回。 返回的JSON实体定义如下: 中间件部分代码如下所示: 异常截图如下: 文字信息: fail: Microsoft.AspNetCore.Server.Kestrel[13] Connection id "0HLVT9ADLSD7M", Request id "0HLVT9ADLSD7M:00000001": An unhandled exception was thrown by the application. System.ObjectDisposedException: Cannot access a closed Stream. at System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count) at System.IO.MemoryStream.WriteAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken) ---

TechEmpower Web 框架性能第19轮测试结果正式发布,ASP.NET Core在主流框架中拔得头筹

醉酒当歌 提交于 2020-07-27 22:00:44
TechEmpower 第19轮编程语言框架性能排行榜2020年5月28日正式发布,详见官方博客: https://www.techempower.com/blog/2020/05/28/framework-benchmarks-round-19/ ,TechEmpower基准测试有许多场景(也称为测试类型),此次评测多了一个综合评分选项,把拥有完整测试覆盖的框架现在将具有综合 分数 ,这反映了测试项目类型的总体性能得分:JSON serialization, Single-query, Multi-query, Updates, Fortunes 和 Plaintext. 。对于每一轮,我们使每个测试类型的结果规范化,然后为每个测试类型应用主观权重(例如,Fortunes的权重比 Plaintext 高,因为Fortunes 是一种更现实的测试类型)。asp.net core排第6名,asp.net 排名倒数第二,第103名, 微软从倒数一路追赶到第一。 表上前缀T标签表示精选的主流编程语言 第1名 C++的drogon 9676分 第2名 Rust的actix 9064分 第6名 C#的ASP.NET Core 5659分 第29名 Go的Chi 2229分 第34名 Java的Spring 1867分 第73名 Nodejs的Express 821分 第94名

一次依赖注入不慎引发的一连串事故

只愿长相守 提交于 2020-07-27 05:13:12
一次依赖注入不慎引发的一连串事故 起因和现象 偶尔会看到线上服务启动的时候第一波流量进来之后, 迟迟没有任何的响应,同时服务的监控检查接口正常, 所以 K8S 集群认为服务正常,继续放入流量。 查看日志基本如下: [2020-06-05T13:00:30.7080743+00:00 Microsoft.AspNetCore.Hosting.Diagnostics INF] Request starting HTTP/1.0 GET http://172.16.2.52/v1/user/test [2020-06-05T13:00:30.7081525+00:00 Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware DBG] The request path /v1/user/test/account-balance does not match a supported file type [2020-06-05T13:00:31.7074253+00:00 Microsoft.AspNetCore.Server.Kestrel DBG] Connection id "0HM09A1MAAR21" started. [2020-06-05T13:00:31.7077051+00:00 Microsoft.AspNetCore

TechEmpower Web 框架性能第19轮测试结果正式发布,ASP.NET Core在主流框架中拔得头筹

…衆ロ難τιáo~ 提交于 2020-07-26 23:30:30
TechEmpower 第19轮编程语言框架性能排行榜2020年5月28日正式发布,详见官方博客: https://www.techempower.com/blog/2020/05/28/framework-benchmarks-round-19/ ,TechEmpower基准测试有许多场景(也称为测试类型),此次评测多了一个综合评分选项,把拥有完整测试覆盖的框架现在将具有综合 分数 ,这反映了测试项目类型的总体性能得分:JSON serialization, Single-query, Multi-query, Updates, Fortunes 和 Plaintext. 。对于每一轮,我们使每个测试类型的结果规范化,然后为每个测试类型应用主观权重(例如,Fortunes的权重比 Plaintext 高,因为Fortunes 是一种更现实的测试类型)。asp.net core排第6名,asp.net 排名倒数第二,第103名, 微软从倒数一路追赶到第一。 表上前缀T标签表示精选的主流编程语言 第1名 C++的drogon 9676分 第2名 Rust的actix 9064分 第6名 C#的ASP.NET Core 5659分 第29名 Go的Chi 2229分 第34名 Java的Spring 1867分 第73名 Nodejs的Express 821分 第94名

TechEmpower Web 框架性能第19轮测试结果正式发布,ASP.NET Core在主流框架中拔得头筹

微笑、不失礼 提交于 2020-07-26 03:41:29
TechEmpower 第19轮编程语言框架性能排行榜2020年5月28日正式发布,详见官方博客: https://www.techempower.com/blog/2020/05/28/framework-benchmarks-round-19/ ,TechEmpower基准测试有许多场景(也称为测试类型),此次评测多了一个综合评分选项,把拥有完整测试覆盖的框架现在将具有综合 分数 ,这反映了测试项目类型的总体性能得分:JSON serialization, Single-query, Multi-query, Updates, Fortunes 和 Plaintext. 。对于每一轮,我们使每个测试类型的结果规范化,然后为每个测试类型应用主观权重(例如,Fortunes的权重比 Plaintext 高,因为Fortunes 是一种更现实的测试类型)。asp.net core排第6名,asp.net 排名倒数第二,第103名, 微软从倒数一路追赶到第一。 表上前缀T标签表示精选的主流编程语言 第1名 C++的drogon 9676分 第2名 Rust的actix 9064分 第6名 C#的ASP.NET Core 5659分 第29名 Go的Chi 2229分 第34名 Java的Spring 1867分 第73名 Nodejs的Express 821分 第94名

一次依赖注入不慎引发的一连串事故

天涯浪子 提交于 2020-07-24 00:32:39
一次依赖注入不慎引发的一连串事故 起因和现象 偶尔会看到线上服务启动的时候第一波流量进来之后, 迟迟没有任何的响应,同时服务的监控检查接口正常, 所以 K8S 集群认为服务正常,继续放入流量。 查看日志基本如下: [2020-06-05T13:00:30.7080743+00:00 Microsoft.AspNetCore.Hosting.Diagnostics INF] Request starting HTTP/1.0 GET http://172.16.2.52/v1/user/test [2020-06-05T13:00:30.7081525+00:00 Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware DBG] The request path /v1/user/test/account-balance does not match a supported file type [2020-06-05T13:00:31.7074253+00:00 Microsoft.AspNetCore.Server.Kestrel DBG] Connection id "0HM09A1MAAR21" started. [2020-06-05T13:00:31.7077051+00:00 Microsoft.AspNetCore

TechEmpower Web 框架性能第19轮测试结果正式发布,ASP.NET Core在主流框架中拔得头筹

时间秒杀一切 提交于 2020-07-23 21:00:15
TechEmpower 第19轮编程语言框架性能排行榜2020年5月28日正式发布,详见官方博客: https://www.techempower.com/blog/2020/05/28/framework-benchmarks-round-19/ ,TechEmpower基准测试有许多场景(也称为测试类型),此次评测多了一个综合评分选项,把拥有完整测试覆盖的框架现在将具有综合 分数 ,这反映了测试项目类型的总体性能得分:JSON serialization, Single-query, Multi-query, Updates, Fortunes 和 Plaintext. 。对于每一轮,我们使每个测试类型的结果规范化,然后为每个测试类型应用主观权重(例如,Fortunes的权重比 Plaintext 高,因为Fortunes 是一种更现实的测试类型)。asp.net core排第6名,asp.net 排名倒数第二,第103名, 微软从倒数一路追赶到第一。 表上前缀T标签表示精选的主流编程语言 第1名 C++的drogon 9676分 第2名 Rust的actix 9064分 第6名 C#的ASP.NET Core 5659分 第29名 Go的Chi 2229分 第34名 Java的Spring 1867分 第73名 Nodejs的Express 821分 第94名