首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

akka-grpc - 应用案例

上期说道:http/2还属于一种不算普及的技术协议,可能目前只适合用于内部系统集成,现在开始大面积介入可能为时尚早。...毕竟用akka-grpc做了些事情,想想还是再写这篇跟大家分享使用kka-grpc的过程。 我说过,了解akka-grpc的主要目的还是在protobuf的应用上。这是一种高效率的序列化协议。...这里就需要仔细考虑图片在终端到平台、然后集群节点与点actor间的传输效率了。如何在akka系统里使用protobuf格式的数据正是本篇讨论和示范的目的。...shopId:posId就是代表为某用户构建的entityId,这个是通过用户在Request中提供的MetaData参数中jwt解析得出的。 可以看到,具体服务提供是通过集群的分片实现的。...err.getMessage}") } scala.io.StdIn.readLine() sys.terminate() } } 基本流程是:先通过getAuthToken获取jwt;在调用服务时通过

89610

ScalaPB(0): 找寻合适的内部系统微服务集成工具

其中Cassandra和MongoDB属于分布式数据库,可以在集群中任何部署节点调用。而JDBC数据库则是非分布式的,无法部署在多个节点。...实际上使用akka-http需要的门槛很高,即使akka-http已经提供了许多帮助http操作的类型,但光是理解http协议内容及httprequest,httpresponse细节、构建、使用方法就花去了我几个星期的精力...这是在系统集成编程方面相对aka-http占优的一个亮点。protobuf格式数据可以很方便的转换成 json格式数据,支持对外部系统的的开放协议数据交换。...在scala编程世界里我们可以用scalaPB来实现对gRPC和protobuf的使用。...java数据类型和抽象服务框架 3、在java编程中可以直接调用编译产生的数据类型及对数据进行操作 4、继承并实现产生的服务类 scalaPB是一个scala版的protobuf编译器。

65720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ScalaPB(2): 在scala中用gRPC实现微服务

    gRPC是google开源提供的一个RPC软件框架,它的特点是极大简化了传统RPC的开发流程和代码量,使用户可以免除许多陷阱并聚焦于实际应用逻辑中。...作为一种google的最新RPC解决方案,gRPC具备了以下这些强项: 1、gRPC在HTTP/2协议上用protobuf取代了json实现了最佳效率 2、用IDL(Interface Definition...在一个.proto字符类文件中用IDL来描述用户自定义的数据类型和服务 2、用protoc编译器编译文件并产生自定义数据类型和服务的api源代码 3、在server端实现.proto中定义的服务函数 4...、在client端通过自动产生的stub来调用服务 下面我们就来示范gRPC的编程流程。...在客户端调用服务并输出返回结果response: //build connection channel val channel = io.grpc.ManagedChannelBuilder

    1.8K30

    akka-grpc - 基于akka-http和akka-streams的scala gRPC开发工具

    关于grpc,在前面的scalaPB讨论里已经做了详细的介绍:google gRPC是一种全新的RPC框架,在开源前一直是google内部使用的集成工具。...由于gRPC支持http/2协议,可以实现双向通讯duplex-communication,解决了独立request/response交互模式在软件编程中的诸多局限。...这是在系统集成编程方面相对akka-http占优的一个亮点。protobuf格式数据可以很方便的转换成 json格式数据,支持对外部系统的的开放协议数据交换。...在http/1应用中对二进制文件的传输交换有诸多限制和不便,特别是效率方面的问题。在protobuf这种序列化模式中对任何类型的数据格式都一视同仁,可以很方便的实现图片等文件的上传下载。...实际上,在使用scalaPB的过程中一直在关注akka-grpc的发展,直到v1.01发布。这是一个正式版本,相信不会在模式、风格、语法上再有大的改变,应该值得试着使用了。

    2K20

    ScalaPB(1): using protobuf in akka

    任何类型的实例作为消息在两端独立系统的机器之间进行传递时必须经过序列化/反序列化serialize/deserialize处理过程。...protobuf是binary格式的,基本只包括实例值,所以数据传输效率较高。下面我们就介绍如何在akka系统中使用protobuf序列化。...在akka中使用自定义序列化方法包括下面的这些步骤: 1、在.proto文件中对消息类型进行IDL定义 2、用ScalaPB编译IDL文件并产生scala源代码。...这些源代码中包括了涉及的消息类型及它们的操作方法 3、在akka程序模块中import产生的classes,然后直接调用这些类型和方法 4、按akka要求编写序列化方法 5、在akka的.conf文件里...注意依赖项中的scalapb.runtime。PB.targets指明了产生源代码的路径。

    1.6K30

    ScalaPB(5):用akka-stream实现reactive-gRPC

    在前面几篇讨论里我们介绍了scala-gRPC的基本功能和使用方法,我们基本确定了选择gRPC作为一种有效的内部系统集成工具,主要因为下面gRPC支持的几种服务模式: 1、Unary-Call:独立的一对...那么如果能把gRPC中ListenableFuture和StreamObserver这两种类型转成akka-stream的基本类型应该就能够实现所谓的reactive-gRPC了。...如果我们能用akka-stream编程方式实现gRPC服务调用的话,可能会遭遇下面的场景:在服务端我们只需要实现一种akka-stream的Flow把进来的request转化成出去的response,如下...下面是gRPCAkkaStream的使用示范。...在客户方调用服务函数genIncsFrom的方式如下: def genIncNumbers(len: Int): Source[Int,NotUsed] = { logger.info(s"Requesting

    1.2K30

    基于 Spark 的数据分析实践

    SQLContext 用于处理在 SparkSQL 中动态注册的表,HiveContext 用于处理 Hive 中的表。...SQLContext.sql 即可执行 Hive 中的表,也可执行内部注册的表; 在需要执行 Hive 表时,只需要在 SparkSession.Builder 中开启 Hive 支持即可(enableHiveSupport...一个由普元技术部提供的基于 SparkSQL 的开发模型; 一个可二次定制开发的大数据开发框架,提供了灵活的可扩展 API; 一个提供了 对文件,数据库,NoSQL 等统一的数据开发视界语义; 基于 SQL...Targets 为定义输出,table_name 的值需在 source 或者 Transformer 中定义。 SparkSQL Flow 支持的Sourse ?...Path 指定地址需要使用协议,如:file:// 、 hdfs://,否则跟 core-site.xml 配置密切相关; SparkSQL Flow DB Source <source type="

    1.8K20

    SparkSQL

    DataFrame与RDD的主要区别在于,DataFrame带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。 Spark SQL性能上比RDD要高。...三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action行动算子如foreach时,三者才会开始遍历运算。 三者有许多共同的函数,如filter,排序等。...使用相同的方式连接不同的数据源。 兼容Hive 在已有的仓库上直接运行SQL或者HQL。 标准的数据连接。...通过JDBC或者ODBC来连接 二、Spark SQL编程 1、SparkSession新API 在老的版本中,SparkSQL提供两种SQL查询起始点: 一个叫SQLContext,用于Spark自己提供的...// save ("…"):在"csv"、"orc"、"parquet"和"text"(单列DF)格式下需要传入保存数据的路径。

    35050

    Akka-CQRS(10)- gRPC on SSLTLS 安全连接

    使用gRPC作为云平台和移动前端的连接方式,网络安全应该是必须考虑的一个重点。gRPC是支持ssl/tls安全通讯机制的。用了一个周末来研究具体使用方法,实际上是一个周末的挖坑填坑过程。...gRPC的ssl/tls的原理是在服务端安装安全证书公用certificate和私钥key, 在客户端安装公共证书就可以了,gRPC代码是这样写的: // Server SslContext sslContext...不过客户端在使用了证书后仍然无法连接到服务端。没办法,又要再去查资料了。看来现在应该是证书的问题了。先看看是不是因为使用的证书是自签的self-signed-certificate。...grpc-java里提供了一些测试用的证书和私钥和说明文档。...在测试程序里使用了它们提供的server1.pem,server1.key,ca.pem: package learn.grpc.server import io.grpc.

    1.3K40

    简单回答:SparkSQL数据抽象和SparkSQL底层执行过程

    此外RDD与Dataset相比较而言,由于Dataset数据使用特殊编码,所以在存储数据时更加节省内存。 ?...与RDD相比:保存了更多的描述信息,概念上等同于关系型数据库中的二维表; 与DataFrame相比:保存了类型信息,是强类型的,提供了编译时类型检查,调用Dataset的方法先会生成逻辑计划,然后被Spark...在数据集的核心 API是一个称为编码器的新概念,它负责在JVM对象和表格表示之间进行转换。表格表示使用Spark内部Tungsten二进制格式存储,允许对序列化数据进行操作并提高内存利用率。...也就是说, 在 SparkSQL 中, 开发者的代码即使不够优化, 也会被优化为相对较好的形式去执行。 为什么 SparkSQL 提供了这种能力?...Catalyst 为了解决过多依赖 Hive 的问题, SparkSQL 使用了一个新的 SQL 优化器替代 Hive 中的优化器, 这个优化器就是 Catalyst, 整个 SparkSQL 的架构大致如下

    1.9K30

    在所有Spark模块中,我愿称SparkSQL为最强!

    在 Dataset 中可以轻易的做到使用 SQL 查询并且筛选数据,然后使用命令式 API 进行探索式分析。...SparkSQL由4个部分构成: Core:负责处理数据的输入/输出,从不同的数据源获取数据(如RDD、Parquet文件),然后将查询结果输出成DataFrame Catalyst:负责处理查询语句的整个过程...在Analyzer过程中处理由解析器(SqlParser)生成的未绑定逻辑计划Tree时,就定义了多种Rules应用到该Unresolved逻辑计划Tree上。...因为单次函数调用就要处理掉一个partition所有的数据,如果内存不够,垃圾回收时是无法回收掉太多对象的,很可能出现OOM异常。所以使用这类操作时要慎重!...无论是行式存储还是列式存储,都可以在将过滤条件在读取一条记录之后执行以判断该记录是否需要返回给调用者,在Parquet做了更进一步的优化,优化的方法时对每一个Row Group的每一个Column Chunk

    1.7K20

    大数据常见错误解决方案 转

    :hdfs dfs -chmod -R 755 / 25、经验:Spark的Driver只有在Action时才会收到结果 26、经验:Spark需要全局聚合变量时应当使用累加器(Accumulator...脚本格式:$Hadoop_home/bin/start-balancer.sh -threshold,参数3是比例参数,表示3%,也就是平各个DataNode直接磁盘使用率偏差在3%以内 77、经验...:sparkSQL UDAF中update函数的第二个参数 input: Row 对应的并非DataFrame的行,而是被inputSchema投影了的行 78、Error: No TypeTag...和java的混合项目 解决方法:使用指令 mvn clean scala:compile compile package 84、sparkSQL的udf无法注册UDAF聚合函数 解决方法:把UDAF...contains at least one immense term in field=XXX 解决方法:在ES中创建索引时对长文本字段要分词 87、maven shade打包资源文件没有打进去

    3.7K10

    Note_Spark_Day07:Spark SQL(DataFrame是什么和数据分析(案例讲解))

    DataFrame与RDD的主要区别在于,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。...中提供一个函数:toDF,通过指定列名称,将数据类型为元组的RDD或Seq转换为DataFrame,实际开发中也常常使用。...中数据处理方式 ​ 在SparkSQL模块中,将结构化数据封装到DataFrame或Dataset集合中后,提供两种方式分析处理数据,正如前面案例【词频统计WordCount】两种方式: 第一种:...原因:在SparkSQL中当Job中产生Shuffle时,默认的分区数(spark.sql.shuffle.partitions )为200,在实际项目中要合理的设置。...在构建SparkSession实例对象时,设置参数的值 好消息:在Spark3.0开始,不用关心参数值,程序自动依据Shuffle时数据量,合理设置分区数目。

    2.3K40

    Thrift接口定义语言

    * '}' Struct 结构是 Thrift 中的基本组合类型。 每个字段的名称在结构中必须是唯一的。...强烈建议不要使用此功能 Union 联合类似于结构,除了它们提供了一种方法来传输一组可能的字段中的一个字段,就像 C++ 中的 union {} 一样。...读取:必填字段始终被读取,并应包含在输入流中。 默认值:始终写入 如果在读取期间缺少必填字段,则预期的行为是向调用者指示不成功的读取操作,例如 通过抛出异常或返回错误。...默认值:设置 isset 标志时写入 大多数语言实现使用所谓的“isset”标志的推荐做法来指示是否设置了特定的可选字段。 仅写入设置了此标志的字段,相反,仅当从输入流中读取字段值时才设置该标志。...相反,如果将默认值写入输出数据,则 IDL 中的默认值可以随时更改,而不会影响序列化数据。 XSD 选项 注意:这些在 Facebook 有一些内部用途,但在 Thrift 中没有当前用途。

    1.4K40

    Spark_Day07:Spark SQL(DataFrame是什么和数据分析(案例讲解))

    DataFrame与RDD的主要区别在于,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。...中提供一个函数:toDF,通过指定列名称,将数据类型为元组的RDD或Seq转换为DataFrame,实际开发中也常常使用。...中数据处理方式 ​ 在SparkSQL模块中,将结构化数据封装到DataFrame或Dataset集合中后,提供两种方式分析处理数据,正如前面案例【词频统计WordCount】两种方式: 第一种:...原因:在SparkSQL中当Job中产生Shuffle时,默认的分区数(spark.sql.shuffle.partitions )为200,在实际项目中要合理的设置。...在构建SparkSession实例对象时,设置参数的值 好消息:在Spark3.0开始,不用关心参数值,程序自动依据Shuffle时数据量,合理设置分区数目。

    2.6K50
    领券