首页
学习
活动
专区
工具
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;调用服务通过

88910

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编译器。

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

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

    gRPC是google开源提供一个RPC软件框架,它特点是极大简化了传统RPC开发流程和代码量,使用户可以免除许多陷阱并聚焦于实际应用逻辑。...作为一种google最新RPC解决方案,gRPC具备了以下这些强项: 1、gRPCHTTP/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-streamsscala 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:独立一对...那么如果能把gRPCListenableFuture和StreamObserver这两种类型转成akka-stream基本类型应该就能够实现所谓reactive-gRPC了。...如果我们能用akka-stream编程方式实现gRPC服务调用的话,可能会遭遇下面的场景:服务端我们只需要实现一种akka-streamFlow把进来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

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

    使用gRPC作为云平台和移动前端连接方式,网络安全应该是必须考虑一个重点。gRPC是支持ssl/tls安全通讯机制。用了一个周末来研究具体使用方法,实际上是一个周末挖坑填坑过程。...gRPCssl/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

    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)格式下需要传入保存数据路径。

    32850

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

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

    1.8K30

    在所有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、经验:SparkDriver只有Action才会收到结果 26、经验:Spark需要全局聚合变量应当使用累加器(Accumulator...脚本格式:$Hadoop_home/bin/start-balancer.sh -threshold,参数3是比例参数,表示3%,也就是平各个DataNode直接磁盘使用率偏差3%以内 77、经验...:sparkSQL UDAFupdate函数第二个参数 input: Row 对应并非DataFrame行,而是被inputSchema投影了行 78、Error: No TypeTag...和java混合项目 解决方法:使用指令 mvn clean scala:compile compile package 84、sparkSQLudf无法注册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
    领券