grpc应用于微服务的分析

gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.
gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

gRPC 基于如下思想:定义一个服务, 指定其可以被远程调用的方法及其参数和返回类型

gRPC 允许你定义四类服务方法:
单项 RPC,即客户端发送一个请求给服务端,从服务端获取一个应答,就像一次普通的函数调用。
rpc SayHello(HelloRequest) returns (HelloResponse){}
服务端流式 RPC,即客户端发送一个请求给服务端,可获取一个数据流用来读取一系列消息。客户端从返回的数据流里一直读取直到没有更多消息为止。
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse){}
客户端流式 RPC,即客户端用提供的一个数据流写入并发送一系列消息给服务端。一旦客户端完成消息写入,就等待服务端读取这些消息并返回应答。
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse) {}
双向流式 RPC,即两边都可以分别通过一个读写数据流来发送一系列消息。这两个数据流操作是相互独立的,所以客户端和服务端能按其希望的任意顺序读写,例如:服务端可以在写应答前等待所有的客户端消息,或者它可以先读一个消息再写一个消息,或者是读写相结合的其他方式。每个数据流里消息的顺序会被保持。
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse){}

兼容restapi方法,如果需要兼容restapi可使用grpc-gateway,可生成swagger文件
https://github.com/grpc-ecosystem/grpc-gateway
使用介绍 http://www.cnblogs.com/lienhua34/p/6285829.html
需要go语言支持

服务发现和负载平衡
以上,grpc提供了数据传递的功能,但要把他微服务化还要支持服务发现和负载平衡,grpc并未实现这一块,因此要应用的话还需考虑此部分,grpc提供了设计思想,并在不同语言的gRPC代码API中已提供了命名解析和负载均衡接口供扩展(在python中并未找到有这部分)
http://www.tuicool.com/articles/7NzYzuZ中介绍设计思想

方法一:运行在docker下,由docker来负责服务发现和负载平衡,公司目前似乎短时间无法做到
方法二:自行实现,服务发现在用etcd,zookeeper等,推荐使用etcd.
 ETCD vs ZK
选取ZK作为典型代表与ETCD进行比较,而不考虑[Consul]项目作为比较对象,原因为Consul的可靠性和稳定性还需要时间来验证(项目发起方自身服务并未使用Consul, 自己都不用)。
一致性协议: ETCD使用[Raft]协议, ZK使用ZAB(类PAXOS协议),前者容易理解,方便工程实现;
运维方面:ETCD方便运维,ZK难以运维;
项目活跃度:ETCD社区与开发活跃,ZK已经快死了;
API:ETCD提供HTTP+JSON, gRPC接口,跨平台跨语言,ZK需要使用其客户端;
访问安全方面:ETCD支持HTTPS访问,ZK在这方面缺失;

综上,grpc对go语言支持度更好,使用ptyhon,grpc只做到rpc的数据传递,其它方面大部份还要自行再架构

参考:http://www.jianshu.com/p/9805545db4ad再谈Docker-微服务的场景化应用
http://www.grpc.io/
---------------------
作者:Candyabc
来源:CSDN
原文:https://blog.csdn.net/Candyabc/article/details/73850604
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. [译]IIS 8.0应用初始化
  2. 关于Unity -Vuforia -Android 开发 ,平台的搭建(极品菜鸟完整版)
  3. PHP中面相对象对象的知识点整理
  4. MySQL中无GROUP BY直接HAVING的问题【转】
  5. freeCodeCamp:Factorialize a Number
  6. LPC18xx LPC43xx LPC4370 Bootrom USB DFU FPB - Flash Patch and Breakpoint Unit
  7. Android adb.exe程序启动不起来,如何处理
  8. HTTP协议认识
  9. 【Spring五】AOP之使用注解配置
  10. Android Camera调用过程分析
  11. 在vim编辑器中,删除操作
  12. IOS把图片缓存到本地的几种方法
  13. dede从www跟目录迁移,网站空间
  14. windows下程序启动检查,只启动一个实例
  15. HTML学习笔记 day two
  16. Mysql基本架构及查询流程
  17. 用Flow编写更好的js代码
  18. h5动画如何实现?如何快速开发h5动画
  19. 001. Asp.Net Routing与MVC 之(基础知识):URL
  20. node.js 基础二 开启服务器监听

热门文章

  1. PPT制作,数据图等画图
  2. 【洛谷p1190】接水问题
  3. Trie字典树详解
  4. Django中用 form 实现登录注册
  5. Gradle打包问题Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0
  6. CentOS安装Python3.x
  7. Docker实战部署应用——Tomcat
  8. Linux性能优化从入门到实战:10 内存篇:如何利用Buffer和Cache优化程序的运行效率?
  9. CentOS7修改为国内yum源
  10. [Tyvj1423]GF和猫咪的玩具(最短路)