ScalaPB(1): using protobuf in akka】的更多相关文章

任何类型的实例作为消息在两端独立系统的机器之间进行传递时必须经过序列化/反序列化serialize/deserialize处理过程.假设以下场景:在一个网络里有两台连接的服务器,它们分别部署了独立的akka系统.如果我们需要在这两台服务器的akka系统之间进行消息交换的话,所有消息都必须经过序列化/反序列化处理.akka系统对于用户自定义消息类型的默认序列化处理是以java-object serialization 方式进行的.我们上次提过:由于java-object-serialization…
protobuf是谷歌的Protocol Buffers的简称,用于结构化数据和字节码之间互相转换(序列化.反序列化),一般应用于网络传输,可支持多种编程语言. protobuf如何使用这里不再介绍,本文主要介绍在MINA.Netty.Twisted中如何使用protobuf,不了解protobuf的同学可以去参考我的另一篇博文. 在前面的一篇博文中,有介绍到一种用一个固定为4字节的前缀Header来指定Body的字节数的一种消息分割方式,在这里同样要使用到.只是其中Body的内容不再是字符串,…
前一段时间我们探讨了SDP的一个基于集群的综合数据平台解决方案,由多种数据库组成,包括:JDBC, Cassandra 及MongoDB.其中Cassandra和MongoDB属于分布式数据库,可以在集群中任何部署节点调用.而JDBC数据库则是非分布式的,无法部署在多个节点.假设我们把每种数据库的数据处理功能以微服务microservice形式提供出来的话,任何从其它集群节点对JDBC数据库微服务的调用都需要进行数据的序列化(serialization).虽然Cassandra和MongoDB是…
  在前面几篇讨论里我们介绍了scala-gRPC的基本功能和使用方法,我们基本确定了选择gRPC作为一种有效的内部系统集成工具,主要因为下面gRPC支持的几种服务模式: .Unary-Call:独立的一对client-request/server-response,是我们常用的http交互模式 .Server-Streaming:client发出一个request后从server端接收一串多个response .Client-Streaming:client向server发送一串多个reque…
我们知道,在集群环境节点之间进行交换的数据必须经过序列化/反序列化处理过程,而在这方面protobuf是一个比较高效.易用的模式.用户首先在.proto文件中用IDL来定义系统中各种需要进行交换的数据类型.然后用protoc编译器自动产生相关的源代码,里面包括了完整的序列化处理函数.在一个集成的系统环境内,protobuf数据必须保持与所有系统的松散耦合,不能对这些用户系统有任何依赖.这样把protobuf数据类型和相关的序列化/反序列化函数打成一个独立的包,由用户系统各自引用就是一种最佳解决方…
gRPC是google开源提供的一个RPC软件框架,它的特点是极大简化了传统RPC的开发流程和代码量,使用户可以免除许多陷阱并聚焦于实际应用逻辑中.作为一种google的最新RPC解决方案,gRPC具备了以下这些强项: 1.gRPC在HTTP/2协议上用protobuf取代了json实现了最佳效率 2.用IDL(Interface Definition Language),一种简单的描述语言来自动产生RPC的api源代码 3.支持blocking/non-blocking双向数据流交互,适合程序…
接着上期讨论的gRPC unary服务我们跟着介绍gRPC streaming,包括: Server-Streaming, Client-Streaming及Bidirectional-Streaming.我们首先在.proto文件里用IDL描述Server-Streaming服务: /* * responding stream of increment results */ service SumOneToMany { rpc AddOneToMany(SumRequest) returns…
前言.......... 我们在使用Akka时,会经常遇到一些存储Actor内部状态的场景,在系统正常运行的情况下,我们不需要担心什么,但是当系统出错,比如Actor错误需要重启,或者内存溢出,亦或者整个系统崩溃,如果我们不采取一定的方案的话,在系统重启时Actor的状态就会丢失,这会导致我们丢失一些关键的数据,造成系统数据不一致的问题.Akka作为一款成熟的生产环境应用,为我们提供了相应的解决方案就是Akka persistence. 为什么需要持久化的Actor? 万变不离其宗,数据的一致性…
HTTP协议应该是目前使用最多的应用层协议了,用浏览器打开一个网站就是使用HTTP协议进行数据传输. HTTP协议也是基于TCP协议,所以也有服务器和客户端.HTTP客户端一般是浏览器,当然还有可能是其他东西.HTTP服务器,也就是Web服务器,目前已经有很多成熟的产品,例如Apache HTTP Server.Tomcat.Nginx.IIS等. 本文的内容不是讲解如何使用以上的HTTP服务器,而是要分别用MINA.Netty.Twisted实现一个简单的HTTP服务器. 首先,要简单了解一下…
要想开发一个高性能的TCP服务器,熟悉所使用框架的线程模型非常重要.MINA.Netty.Twisted本身都是高性能的网络框架,如果再搭配上高效率的代码,才能实现一个高大上的服务器.但是如果不了解它们的线程模型,就很难写出高性能的代码.框架本身效率再高,程序写的太差,那么服务器整体的性能也不会太高.就像一个电脑,CPU再好,内存小硬盘慢散热差,整体的性能也不会太高. 玩过Android开发的同学会知道,在Android应用中有一个非常重要线程:UI线程(即主线程).UI线程是负责一个Andro…