.NET Core微服务之路:基于gRPC服务发现与服务治理的方案
服务化引入
服务化框架介绍
- 远程调用:远程调用的传输协议有很多种,可以走http、webservice、tcp等。facebook的thrift、google的grpc、alibaba的dubbo都是世界上主流的rpc框架。其重点在于安全、快速、跨语言。
- 注册中心:用于存放,服务的ip地址和状态信息等。比较好的存放服务信息的方案有:zookeeper、consul、etcd。其重点在于避免单点问题,并且好维护。
服务化框架原理和调用方式
- 服务端启动并且向注册中心发送服务信息,注册中心收到后会定时监控服务状态(常见心跳检测);
- 客户端需要开始调用服务的时候,首先去注册中心获取服务信息;
- 客户端创建远程调用连接,连接后服务端返回处理信息;
服务发现,向注册中心获取服务(这里需要做的有很多:拿到多个服务时需要做负载均衡,同机房过滤、版本过滤、服务路由过滤、统一网关等);
- 客户端发起调用,将需要调用的服务、方法、参数进行组装;
- 序列化编码组装的消息,这里可以使用json,也可以使用xml,也可以使用protobuf,也可以使用hessian,几种方案的序列化速度还有序列化后占用字节大小都是选择的重要指标,对内笔者建议使用高效的protobuf,它基于TCP/IP二进制进行序列化,体积小,速度快。
- 传输协议,可以使用传统的io阻塞传输,也可以使用高效的nio传输(Netty);
- 服务端收到后进行反序列化,然后进行相应的处理;
- 服务端序列化response信息并且返回;
- 客户端收到response信息并且反序列化;
RESTful和RPC
Http vs 高性能二进制协议
gRPC介绍
与thrift,dubbo,motan等比较
.png)
使用gRPC的公司:
- Mochi中国
- 阿里OTS
- 腾讯部分部门
- Tensorflow项目中使用了grpc
- CoreOS — Production API for etcd v3 is entirely gRPC. etcd v3的接口全部使用grpc
- Square — replacement for all of their internal RPC. one of the very first adopters and contributors to gRPC.
- ngrok — all 20+ internal services communicate via gRPC 一个内网转发产品
- Netflix
- Yik Yak
- VSCO
- Cockroach
gRPC的优点和缺点:
- protobuf二进制消息,性能好/效率高(空间和时间效率都很不错);
- proto文件生成目标代码,简单易用;
- 序列化反序列化直接对应程序中的数据类,不需要解析后在进行映射(XML,JSON都是这种方式);
- 支持向前兼容(新加字段采用默认值)和向后兼容(忽略新加字段),简化升级;
- 支持多种语言(可以把proto文件看做IDL文件);
- Netty等一些框架集成;
- GRPC尚未提供连接池,需要自行实现;
- 尚未提供“服务发现”、“负载均衡”机制;
- 因为基于HTTP2,绝大部多数HTTP Server、Nginx都尚不支持,即Nginx不能将GRPC请求作为HTTP请求来负载均衡,而是作为普通的TCP请求。(nginx1.9版本已支持);
- Protobuf二进制可读性差(貌似提供了Text_Fromat功能,没用过);
- 默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持);
protobuf的版本
gRPC服务发现与服务治理的方案
1、集中式LB(Proxy Model)
2、进程内LB(Balancing-aware Client)
3、独立 LB 进程(External Load Balancing Service)
服务发现负载均衡实现
.NET Core微服务之路:基于gRPC服务发现与服务治理的方案的更多相关文章
- NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成
本篇内容属于非实用性(拿来即用)介绍,如对框架设计没兴趣的朋友,请略过. 快一个月没有写博文了,最近忙着两件事; 一:阅读刘墉先生的<说话的魅力>,以一种微妙的,你我大家都会经常遇见 ...
- .NET Core微服务之路:文章系列和内容索引汇总 (v0.52)
微服务架构,对于从事JAVA架构的童鞋来说,早已不是什么新鲜的事儿,他们有鼎鼎大名的Spring Cloud这样的全家桶框架支撑,包含微服务核心组件如 1. Eureka:实现服务注册与发现. 2. ...
- .NET Core微服务之路:不断更新中的目录 (v0.43)
原文:.NET Core微服务之路:不断更新中的目录 (v0.43) 微服务架构,对于从事JAVA架构的童鞋来说,早已不是什么新鲜的事儿,他们有鼎鼎大名的Spring Cloud这样的全家桶框架支撑, ...
- .Net Core微服务系列--服务发现
什么是服务发现 首先我们先思考一个问题,当我们在浏览器中输入一个域名比如baidu.com,然后发生了什么才能让我们访问到百度的网页?简单来说,浏览器会首先从主机的hosts文件中查看是否有baidu ...
- PaaS服务之路漫谈(三)
此文已由作者尧飘海授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Monolithic架构在产品访问量很大的情况下,有可能常会导致整个产品迭代或升级过程不能按预期进行,或者上 ...
- 基于CentOS7系统添加自定义脚本服务及参数说明【转】
概述 centos6如果要添加自定义脚本服务只需要把脚本放到/etc/init.d然后授权后用chkconfig添加后就可以管理了,那么centos7又是怎么添加自定义脚本服务呢? CentOS7添加 ...
- NET Core微服务之路:基于Ocelot的API网关Relay实现--RPC篇
前言 我们都知道,API网关是工作在应用层上网关程序,为何要这样设计呢,而不是将网关程序直接工作在传输层.或者网络层等等更底层的环境呢?让我们先来简单的了解一下TCP/IP的五层模型. (图片 ...
- .NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.预备知识:数据一致性 关于数据一致性的文章,园子里已经有很多了,如果你还不了解,那么可以通过以下的几篇文章去快速地了解了解,有个感性认 ...
- NET Core微服务之路:实战SkyWalking+Exceptionless体验生产环境下的追踪系统
前言 当一个APM或一个日志中心实际部署在生产环境中时,是有点力不从心的. 比如如下场景分析的问题: 从APM上说,知道某个节点出现异常,或延迟过过高,却不能及时知道日志反馈情况,总不可能去相应的节点 ...
随机推荐
- Maven Return code is: 401
maven 打包到仓库 需要配置认证: setting.xml <server><id>releases</id><username>admin< ...
- IDLE的GUI交互模式下完美清屏
IDLE的GUI交互模式下完美清屏==============================================================================1.首先把 ...
- Java中通过Class的反射来获取方法
本文转自:http://z3sm2012.iteye.com/blog/1933227 今天在程序中用到java反射机制时,遇到的问题记录一下:我当时遇到的问题是,我用反射getMethod()调用类 ...
- 反射与特性与Tool编写
大多数程序都是用来处理数据的,他们读,写,操作和显示数据,图形也是一种数据. 程序员为某种目的创建和使用一些类型,因此,在设计时必须理解所使用类型的特性. 有关程序及其类型的数据被称为元数据,他们保存 ...
- MFC笔记3
1. C6有默认的提示代码功能,但是其默认的快捷键是Ctrl + Space,这一般情况下是切换输入法快捷键,所以,只需重新设置一下快捷键就可以实现提示代码功能,具体设置位置如下: 工具(T) -&g ...
- Android 查阅博客1_app优化_1大小
Android App Bundle (google play 商店发布应用的话,可自行深入了解下,这里不做介绍) http://mp.weixin.qq.com/s?__biz=MzAwODY4 ...
- 微软BI 之SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式
开篇介绍 关于 Slowly Changing Dimension 缓慢渐变维度的理论概念请参看 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型 ...
- FastCGI与PHP
什么是CGI CGI全称"通用网关接口"(Common Gateway Interface),用于HTTP服务器与其它机器上的程序服务通信交流的一种工具,CGI程序须运行在网络服务 ...
- 【python-dict】dict的使用及实现原理
以下内容是针对:python源码剖析中的第五章——python中Dict对象 的读书笔记(针对书中讲到的内容进行了自己的整理,并且针对部分内容根据自己的需求进行了扩展) 一.Dict的用法 Dict的 ...
- [leetcode]77. Combinations组合
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. Example: I ...