第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

ScalaPB(0): 找尋合適的內(nèi)部系統(tǒng)微服務(wù)集成工具

標(biāo)簽:
Java

 前一段时间我们探讨了SDP的一个基于集群的综合数据平台解决方案,由多种数据库组成,包括:JDBC, Cassandra 及MongoDB。其中Cassandra和MongoDB属于分布式数据库,可以在集群中任何部署节点调用。而JDBC数据库则是非分布式的,无法部署在多个节点。假设我们把每种数据库的数据处理功能以微服务microservice形式提供出来的话,任何从其它集群节点对JDBC数据库微服务的调用都需要进行数据的序列化(serialization)。虽然Cassandra和MongoDB是分布式的,但也只限在它们已部署的不同节点上自由交流。现在看来,不同的数据微服务之间的交互还是需要通过serialization来实现的。也就是说数据需要经过序列化marshalling才能发送,接收后反序列化unmarshalling才能还原数据。曾经花了点时间研究了一下akka-http:当时我初选的所谓系统集成工具,它是通过json格式数据交换来集成系统的。json是个标准数据格式,所以可以实现异类系统之间的数据交换。一直在考虑,如果SDP数据平台微服务之间是通过akka-http进行数据交换的形式实现集成的话,这个集成的体系内部交互效率会非常低,这是因为1、json是一种字符型的数据,占据空间较大,传输效率自然低。2、受制于http1.0交互模式,方便了数据下行但上行数据只限于请求指令。这种模式在系统层面的交互能力很有限,或者很不自然,很不方便。为此也郁闷了一阵。实际上使用akka-http需要的门槛很高,即使akka-http已经提供了许多帮助http操作的类型,但光是理解http协议内容及httprequest,httpresponse细节、构建、使用方法就花去了我几个星期的精力,而且才刚刚达到枯浅的理解水平,如果在实际应用中能够真正调动自然,则需要添加更多的努力了。

   google gRPC是一种全新的RPC框架,在开源前一直是google内部使用的集成工具。gRPC支持通过http/2实现protobuf格式数据交换。protobuf即protocol buffer,是google发明的一套全新的序列化传输协议serialization-protocol,是二进制编码binary-encoded的,相对java-object,XML,Json等在空间上占有优势,所以数据传输效率较高。由于gRPC支持http/2协议,可以实现双向通讯duplex-communication,解决了独立request/response交互模式在软件编程中的诸多局限。这是在系统集成编程方面相对aka-http占优的一个亮点。protobuf格式数据可以很方便的转换成 json格式数据,支持对外部系统的的开放协议数据交换。这也是我决定选择gRPC作为大型系统微服务集成开发工具的主要原因。更重要的是:用protobuf和gRPC进行client/server交互不涉及任何http对象包括httprequest,httpresponse,很容易上手使用,而且又有在google等大公司内部的成功使用经验,用起来会更加放心。

gRPC支持下面四种交互协议:

1、Unary:独立的一对client-request/server-response,是我们常用的http交互模式

2、Server-Streaming:client发出一个request后从server端接收一串多个response

3、Client-Streaming:client向server发送一串多个request后从server接收一个response

4、Bidirectional-Streaming:还是由client首先发送request启动连接,然后在这个连接上client/server双方可以不断交互信息。

感觉第4种方式最适合程序流程层面的交互。也就是说它可以代表一种自然的程序流程,虽然它还是需要client主动发起交互连接。由于产生的源代码中不涉及任何http协议相关类型及操作,使用起来更容易上手。

在scala编程世界里我们可以用scalaPB来实现对gRPC和protobuf的使用。

google gRPC的使用流程如下:

1、创建一个.proto文件,用IDL语言(Interface Definition Language)定义数据类型和服务

2、对.proto文件进行编译后产生相关的java数据类型和抽象服务框架

3、在java编程中可以直接调用编译产生的数据类型及对数据进行操作

4、继承并实现产生的服务类

scalaPB是一个scala版的protobuf编译器。编译.proto文件后产生scala语言的数据类型和抽象服务类,这样我们就可以在scala环境里使用protobuf和gRPC实现微服务的集成编程了。

我将会在下面几篇博文里介绍使用scalaPB进行protobuf数据转换、gRPC微服务实现、gRPC的流式操作以及gRPC流与json之间转换方法等。

 

原文出处

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消