gRPC in ASP.NET Core 3.0 -- 前言

640?wx_fmt=png

      现如今微服务很流行,而微服务很有可能是使用不同语言进行构建的。而微服务之间通常需要相互通信,所以微服务之间必须在以下几个方面达成共识:

  • 需要使用某种API

  • 数据格式

  • 错误的模式

  • 负载均衡

  • 。。。

      现在最流行的一种API风格可能是REST,它主要是通过HTTP协议来传输JSON数据。

  但是现在我们可以看看gRPC(https://grpc.io/)。gRPC来自Google,并且支持众多主流的语言包括:Go,Dart,C#,C/C++,Nodejs,Python等等。

下面就简单介绍下gRPC。



640?wx_fmt=png


01

gRPC能解决哪些问题?

640?wx_fmt=jpeg

构建(Web)API是挺麻烦的,因为构建API时我们得考虑:

  • 数据的格式是JSON、XML还是二进制的;

  • 端点地址以及GET还是POST等;

  • 如何调用API以及对异常的处理规则;

  • API的效率:一次调用读取多少数据?是否太多了或太少了?太少的话可能会导致多次API的调用;

  • 延迟;

  • 扩展性,是否能支持成上千个客户端

  • 负载均衡

  • 与其他语言的互操作性

  • 如何处理身份认证、监控、日志等等


以上这些问题据说gRPC都能解决。。?


640?wx_fmt=png

02

再次介绍一下gRPC

640?wx_fmt=jpeg

        之前说了gRPC来自Google,它是一个开源的框架;它同时也是Cloud Native Computation基金会(CNCF)的一部分,就像Docker和Kubernetes一样。

        gRPC允许你为RPC(Remote Procedure Call)定义请求和响应,然后gRPC会帮你处理一切剩余问题。

        它速度快,执行效率高,基于HTTP/2构建,低延迟,支持流,与开发语言无关,并且可以很简单的插入身份认证、负载均衡、日志和监控等功能。


640?wx_fmt=png

03

RPC是啥

640?wx_fmt=jpeg

RPC是(Remote Procedure Call)远程过程调用。

在客户端代码使用RPC调用的时候,就像直接调用了服务端的一个函数一样。

例如在服务器端代码是这样的:

640?wx_fmt=png

而在“遥远”的客户端它是这样调用服务器端的逻辑的,就像调用本地方法一样:

640?wx_fmt=png

客户端在调用这个方法的时候,是通过网络进行通信的。


RPC它不是一个新的概念,很早它就出现了。但是它存在很多的问题。而gRPC它是对RPC一种非常简洁的实现并且解决了很多RPC的问题。

640?wx_fmt=png



640?wx_fmt=png

04

如何学习gRPC?

640?wx_fmt=jpeg

        首先,你得学习Protocol Buffers (https://developers.google.com/protocol-buffers/),简单的说,它可以用来定义消息和服务。

        然后,你只需要实现服务即可,剩余的gRPC代码将会自动为你生成。

        .proto这个文件可以适用于十几种开发语言(包括服务端和客户端),并且它允许你使用同一个框架来支持每秒百万级以上的RPC调用。


        gPRC使用的是合约优先的API开发模式,它默认使用Protocol buffers (protobuf) 作为接口设计语言(IDL),这个.proto文件包括两部分:

  • gRPC服务的定义

  • 服务端和客户端之间传递的消息


看一个官网的例子(protobuf):

640?wx_fmt=png

在这里定义了一个Greeter服务,它里面定义了一个SayHello的rpc调用。SayHello会发送HelloRequest这个消息,接收HelloReply这个消息。


为什么使用Protocol Buffers?

因为:

  • 它和开发语言无关

  • 可以生成所有主流开发语言的代码

  • 数据是二进制格式的,串行化的效率高,Payload比较小

  • 也很适合传递大量的数据

  • 通过设定某些规则,是的API的进化也很简单

今天先到这。。

640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P3246 [HNOI2016]序列 莫队 + ST表 + 单调栈

传送门 文章目录题意:思路:Update题意: 思路: 比较神奇的一个题,这里先介绍莫队的离线解法。 不难发现,用莫队来做最大的难点就是在进行区间移动的时候如何快速计算贡献。 比如[l,r]−>[l,r1][l,r]->…

WPF 渲染原理

对于开发者来说,WPF 中最主要的知识点就是渲染,因为 WPF 是一个界面框架。想用一篇博客就能告诉大家完整的 WPF 渲染原理是不可能的。本文向大家介绍从开发者执行绘图指令到在屏幕显示的过程。本文是从一个全局的角度来看渲染的过程,在本文之…

HDU - 6989 Didn‘t I Say to Make My Abilities Average in the Next Life?! 莫队/单调栈 + 线段树/ST表在线

传送门 文章目录题意:思路:题意: 思路: 考虑将贡献分开来算,先计算最大值,再算个最小值,之后答案就是((maxmin)/2)/(len∗(len1)/2)((maxmin)/2)/(len*(len1)/2)((maxmin)/2)/(len∗(len1)/2)。…

ASP.NET Core 中的管道机制

首先,很感谢在上篇文章 C# 管道式编程 中给我有小额捐助和点赞的朋友们,感谢你们的支持与肯定。希望我的每一次分享都能让彼此获得一些收获,当然如果我有些地方叙述的不正确或不当,还请不客气的指出。好了,下面进入正文…

微软宣布SQL Server 2019免费支持Java

在 2018 年 9 月的时候,微软就宣布与领先的 Java 开源贡献者和发行商 Azul Systems 建立新的合作伙伴关系。这一关系允许所有 Azure 客户在微软和 Azul 联合提供的支持下,免费使用 Azul 的 Zulu for Azure-Enterprise Java 发行版 。最近,微软…

P4231 三步必杀 二次差分

传送门 文章目录题意:思路:题意: 思路: 考虑给[2,6][2,6][2,6]加上s2,e10s2,e10s2,e10的等差数列,变成2,4,6,8,102,4,6,8,102,4,6,8,10,考虑差分数组2,2,2,2,2,−102,2,2,2,2,-102,2,2,2,2,−10&#xff0…

创新的迷思——2019 Microsoft Hackathon 苏州站回顾

每年,微软在7月份都会在内部举办一次黑客松(Hachathon)活动,所有的员工,包括实习生都可以自由组队参赛,在为期一周的时间内完成构想、设计和开发的一系列过程,并且在最后一天进行项目路演和评选…

P4062 [Code+#1]Yazid 的新生舞会 树状数组维护三阶差分

传送门 文章目录题意:思路:题意: 给你一个序列aaa,让你求有多少个子区间满足存在一个数是这个区间的绝对众数,绝对众数指该数在区间内出现的次数严格大于r−l12\frac{r-l1}{2}2r−l1​。 n≤5e5,0≤ai≤n−1n\le5e5,0…

一句话概括4本管理著作

之前618活动的时候买了不少书,最近一段时间集中看了四本管理相关的书籍,收获颇丰。在这里分享给大家。如果你不是管理者也没关系,可以换个视角来看看管理者眼中的世界,毕竟,“赤兔马”也需要让“伯乐”看到才行嘛。虽然…

[译].Net中的内存-什么分配在了哪里

原文链接:https://jonskeet.uk/csharp/memory.html人们在理解值类型和引用类型之间的差异时因为“值类型在栈上分配,引用类型在堆上分配”这句话造成了很多混乱。这完全是不对的,本文试图澄清这个问题。变量中有什么?理解.NET中内…

上车时机已到--.NETCore是适应时代发展的雄鹰利剑

要起飞了.NET Core 3.0-prevew7:https://dotnet.microsoft.com/download/dotnet-core/3.0随着 .NET Core 3.0-prevew7 的发布,开源社区的一支重要力量重要即将起飞;官方指出,该预览版为可能为最终版本,在很长一段时间内…

HDU - 7028 Decomposition 无向完全图构造欧拉回路

传送门 文章目录题意:思路:题意: 给你一张无向完全图,让你构造kkk个长度分别为lil_ili​的路径,这些路径不相交,且∑lin∗(n−1)2\sum l_i\frac{n*(n-1)}{2}∑li​2n∗(n−1)​。 n≤1000,nmod21n\le1000,…

「Azure」数据分析师有理由爱Azure之二-立即申请帐号开始学习之旅

目前关于Azure的学习资料不多,除了官方的文档和Microsoft Learn频道外,几乎没有什么中文性资料可学习,就算有,也是以IT的思维方式来展开介绍,对没有IT背景的数据分析师来说,非常难于适应。本篇给大家带来一…

矩阵快速幂的最简单用法

矩阵快速幂 链接:https://ac.nowcoder.com/acm/contest/1168/K 来源:牛客网 题目描述 这个勇者明明超强却过分慎重,勇者龙宫院圣哉与n名冒险者一起去讨伐神秘魔物,龙宫院圣哉十分谨慎,他只会在最后一刻出手&#xff…

DevOps案例研究|史上最能“拜客户教”的公司,是如何做到持续交付的?(第1趴)...

内容来源:DevOps案例深度研究 –Amazon持续交付之道战队(本文只展示部分PPT及研究成果,更多细节请关注案例分享会,及本公众号。)本案例内容贡献者:单冰 (Topic Leader)、 赵栋、梁兴龙、李杰、毛艳清、牛恒…

P2261 [CQOI2007]余数求和 整除分块

传送门 文章目录题意:思路:题意: n,k≤1e9n,k\le1e9n,k≤1e9 思路: 考虑转换式子,∑i1nkmodi∑i1n(k−⌊ki⌋∗i)n∗k−∑i1n⌊ki⌋∗i\sum_{i1}^{n}k\bmod i\sum_{i1}^n(k-\left \lfloor \frac{k}{i} \right \rfloo…

背包问题——第一篇

一,01背包 最简单也是最经典的背包问题。 首先我们知道背包问题是一种d问题,最重要的就是要去找到他的状态转移方程。而在01背包中转移方程就比较简单了,这里用一个二维数组进行标表示。 ans[i][j]max(ans[i-1][j],ans[i-1][j-v[i]w[i]); 在…

小白开学Asp.Net Core 《十》

小白开学Asp.Net Core 《十》 — — Session、Cookie、Cache(老生常谈)一、背景在常谈Session和Cookie之前我们先来简单的了解下Http(可以说这是必须的,默认大家都了解)总结一句话:HTTP是一种无状态的协议&…

P3935 Calculating 整除分块

传送门 文章目录题意:思路:题意: 思路: 我们设s(x)∑i1nf(x)s(x)\sum_{i1}^nf(x)s(x)∑i1n​f(x),那么答案就是s(r)−s(l−1)s(r)-s(l-1)s(r)−s(l−1)。 容易发现,我们要求的f(x)f(x)f(x)实际上就是xxx的…

Sticks-hdu-1455深度搜索dfs

Sticks 题目传送门。 题目大意是,给你一个数字n代表总共的棍子数量,要做的就是,把这几根棍子拼成长度相同的棍子,并且让所拼成的棍子的长度尽可能地小,也就是拼成的棍子的数量尽可能的多。 在这里很简单的想到要给棍…