• 继续完善 protobuf 库

    又仔细推敲了两天,把 lua 版的 protobuf 库完善了一下。主要是做了两个工作: protobuf 本身的格式,google 是自描述的。定义为 google.protobuf.descriptor 。我先自己实现的 parser 图方便,用了自己的中间交换格式。为了日后更通用,稍微修改了一下,可以生成于官方相同的结构。解析的性能稍有下降,不过应该兼容性更好。 一开始实现的 api 虽然性能非常好。(经简单测试,是 python 库的...
  • [译]用GoLang实现微服务(一)

    导言 在本文中,我们将了解一些基础的概念,术语。同时将创建我们的第一个微服务,尽管它会非常简陋。 在接下来的文章中,我们会陆续创建以下微服务: consignments (货运) inventory (仓库) users (用户) authentication (认证) roles (角色) vessels (货船) 完整的技术栈如下:golang, mongodb, grpc, docker, Google Cloud, Kubernetes, NATS, CircleCI, Terrafrom ...
  • [译]用GoLang实现微服务(三)

    此系列文章介绍如何用 GoLang 实践微服务, 分十篇。此为其三。 原著作者:Ewan Valentine 原文连接:https://ewanvalentine.io/microservices-in-golang-part-3/ 友情提示:系列文章的后五篇翻译请移步至wuYin’s blog 初稿 -> 润色 在上一篇文章中, 我们了解了go-micro 以及 Docker的基础。同时引入了我们的第二个微服务,货船服务(vessel-service)。那么在此文中,我们将要了解一下 docke...
  • SpringBoot 集成 Protocol Buffer案例

    Hello,大家好,我是子悠,作为本周的小编之前已经跟大家介绍过自己了,今天就让我们跟着子悠(一个有点文艺有点技术宅的深漂程序员,是我是我就是我)的步伐学习新知识吧。下面是正文背景最近工作中使用到 Protobuf,发现 Protobuf 的强大和方便之处,今天给大家介绍一个这个强大的工具的使用。毕竟有好东西要一起分享。什么是 Protobuf首先我们来看下什么是 protobuf, 官方解释:Protocol buffers are Google’s language-neutral, platform-...
  • 比 json 快5倍的 protobuf,了解一下!

    之前在网络通信和通用数据交换等应用场景中经常使用的技术是 JSON 或 XML,而在最近的开发中接触到了 Google 的 ProtoBuf。在查阅相关资料学习 ProtoBuf 以及研读其源码之后,发现其在效率、兼容性等方面非常出色。在以后的项目技术选型中,尤其是网络通信、通用数据交换等场景应该会优先选择 ProtoBuf。自己在学习 ProtoBuf 的过程中翻译了官方的主要文档,一来当然是在学习 ProtoBuf,二来是培养阅读英文文档的能力,三来是因为 Google 的文档?不存在的!看完这些文档对...
  • 花椒服务端 gRPC 开发实践

    奇技指南gRPC是一个高性能、通用的开源 RPC 框架,由 Google 开发并基于 HTTP/2 协议标准而设计。本文介绍花椒服务端的 gRPC 开发实践。为了让客户端更专注业务实现,降低接口联调测试成本,我们选用了 gRPC 方案。在服务端,服务实现这个接口并且运行 gRPC 服务处理客户端调用。gRPC特点基于标准化的 IDL来生成服务器端和客户端代码,支持多种主流开发语言。因此在这次项目中前端未使用 gRPC 服务,而是由 gRPC-Gateway 提供代理的 RESTful 接口。gRPC-Gatewaygrpc-gateway 是 protoc 的一个插件,它能读取 gRPC 的服务定义并生成反向代理服务器,将 RESTful 的 JSON 请求转换为 gRPC 的方式。
  • TiDB Binlog 源码阅读系列文章(四)Pump server 介绍

    在上篇文章中,我们介绍了 TiDB 如何通过 Pump client 将 binlog 发往 Pump,本文将继续介绍 Pump server 的实现,对应的源码主要集中在 TiDB Binlog 仓库的 pump/server.go 文件中。为了避免丢失 binlog,在开始对外提供 binlog 写入服务之前,它会将当前 Server 注册到 PD 上,确保所有运行中的 Drainer 都已经观察到新增的 Pump 节点。WriteBinlog顾名思义,这是用于写入 binlog 的接口,上篇文章中 Pump client 调用的就是这个接口。storage.WriteBinlog将 binlog 持久化存储,并对 binlog 按start TS/commit TS进行排序,详细的实现将在下章展开讨论。PullBinlogsPullBinlogs 是为 Drainer 提供的接口,用于按顺序获取 binlog。
  • Go是如何实现protobuf的编解码的(1): 原理

    各位朋友咱们又见面了,我是大彬,今天聊一聊Go是如何实现protobuf编解码的。这是一篇姊妹篇文章,本编是第一篇:1.Go是如何实现protobuf的编解码的:原理2.Go是如何实现protobuf的编解码的:源码Protocol Buffers介绍Protocol buffers缩写为protobuf,是由Google创造的一种用于序列化的标记语言,项目Github仓库:https://github.com/protocolbuffers/protobuf。Protobuf主要用于不同的编程语言的协作RPC场景下,定义需要序列化的数据格式。我们介绍一下protobuf对多语言的支持原理。对于C++,protoc可以把a.proto,编译成a.pb.h和a.pb.cc。一个Hello World样例根据上面的介绍,Go语言使用protobuf我们要先安装2个工具:protoc和protoc-gen-go。
  • 高德地图数据序列化的探索与实践

    下半身采集的数据,需要经过处理,序列化为二进制数据,输送给上半身的各个应用。本文将分享高德技术团队在地图数据序列化领域的探索和实践。高德地图对数据的新鲜度要求非常高,如京港澳高速开通,需要实时上线,让用户第一时间用最新的数据进行导航。目前流行的开源序列化库有protobuf,flatbuffers等。图1varint表示图2 zigzag编码3.2自定义序列化规格由于地图数据有其独有特点,且全国数据量巨大,开源库序列化后的数据量大小都无法满足数据传输的要求。针对地图数据序列化后数据量的优化,我们无须拘泥于一种压缩形式,多种压缩方法综合使用,才能达到最好的压缩效果。
  • 工作中 Git 的使用实践

    点击链接或图片即可阅读喜欢请分享到朋友圈哦开发者头条工作中 Git 的使用实践工作中 Git 是一项必不可少的技能,在项目的开发进程中起着至关重要的作用,下面介绍一些 Git 在工作中的一些使用实践。更多「Git」热门文章性能测试从零开始实施指南这篇博客,简述一下我在准备阶段,是如何开展容量评估工作以及遇到的一些问题,以及解决方案。(老张)更多「性能测试」热门文章Protobuf 终极教程Protocol Buffer是 Google 出品的性能优异、跨语言、跨平台的序列化库。更多「Protobuf」热门文章头条君邀请您加入开发者头条读者交流群微信号:toutiaoio007
  • GitHub 标星 6.2k+!前 Google 工程师出品,最佳开发工具大全!

    关注“GitHubDaily”设为 “星标”,每天带你逛 GitHub!但实际上,这个大全实打实地也成为了一份最佳开发工具大全。xg2xg 上线仅仅一天就登上趋势榜,截至今天,已在 GitHub 收获 6200+ Star!即使你从来没进过 Google 工作,也在享受着 Google 工程师们带来的福利。Jeff Dean 等人 2004 年提出了这个分布式计算架构,最早在 Google 内部用来处理大规模数据的并行计算。完全撇开 Google,也不是就没有别的选择了。虽然作者把它放在开源 / 真实世界这一栏里,但事实上 Kubernetes 也是由 Google 设计并参与开发的。他认为这份清单在一定程度上具有误导性,某些替代品根本达不到 Google 内部工具的水平。
  • GitHub 标星 6.2k+!最佳开发工具大全!

    但实际上,这个大全实打实地也成为了一份最佳开发工具大全。https://github.com/jhuangtw-dev/xg2xg美国网友对这个大全给予了很高的评价:这份清单中列出的开源软件,不仅解决了硅谷大厂前员工的难处,也能为其他所有码农解除困惑。xg2xg 上线仅仅一天就登上趋势榜,截至今天,已在 GitHub 收获 6200+ Star!由于数据不需要额外的标注,Avro 在序列化大量相同的数据时会比 Protobuf 和 Thrift 更有效率。但显然 Kubernetes 的功能会更丰富。他认为这份清单在一定程度上具有误导性,某些替代品根本达不到 Google 内部工具的水平。比如将 Colossus 和 HDFS 对比是在开玩笑,相比之下,HDFS 就像是一个玩具。全部工具的下载链接请参阅文末的 GitHub 地址。
  • .NET Core Love gRPC

    自2018年11月以来,Microsoft的.NET团队一直与gRPC团队密切合作,共同开发适用于.NET Core的gRPC的全新完全托管实现。.NET目前有两种正式的gRPC实现:Grpc.Core:基于本地gRpc Core库的原生 gRpc C#实现,支持.NET Core 2.1/.NET Framework 4.5+/Mono 4+ 。grpc-dotnet:完全以C#编写的新实现,没有任何本机依赖性,并且基于最新发布的.NET Core 3.0。在服务器端,Grpc.AspNetCore.Server软件包集成到ASP.NET Core中,使开发人员受益于ASP.NET Core已解决的日志,配置,依赖项注入,身份验证,授权等常见的交叉问题。现在,ASP.NET生态系统中的流行库与gRPC无缝协作。protobuf-net.Grpc使用本机Grpc.CoreAPI或完全托管的Grpc.Net.Client/Grpc.AspNetCore.ServerAPI 在gRPC上添加对服务的代码优先支持。
  • 如何使用 Protobuf 做数据交换 | Linux 中国

    例如,用 Go 编写的发送程序可以在 Protobuf 中对以 Go 表示的销售订单数据进行编码,然后用 Java 编写的接收方可以对它进行解码,以获取所接收订单数据的 Java 表示方式。Protobuf 以另一种方式提供了这种有效性。在实现级别,Protobuf 和其他编码系统对结构化数据进行序列化serialize和反序列化deserialize。与 DCE/RPC 一样,Protobuf 在数据交换中为IDL和编码层做出了贡献。Protobuf 也是以 IDL 文档为中心的。下一节将介绍 Protobuf IDL,它的语法不同,但同样用作数据交换中的协定。在 Go 中使用 Protobuf 的示例我的代码示例着重于 Protobuf 而不是 RPC。作为测试,Go 应用程序通过反序列化 Protobuf 文件的内容来重建其原生数据结构的实例。
  • 【译】gRPC vs HTTP APIs

    本文翻译自ASP.NET Blog | gRPC vs HTTP APIs,作者 James,译者Edison Zhou。这篇文章将gRPC与基于JSON的HTTP API进行了比较,讨论了gRPC的优缺点,以及何时可以使用gRPC构建应用程序。  gRPC需要HTTP/2,这是HTTP的主要版本,与HTTP 1.x相比,它具有显着的性能优势:二进制成帧和压缩。例如,服务器可能会在超时后取消正在进行的gRPC/HTTP/数据库请求。  gRPC-Web并非支持所有gRPC的功能。可读性不高使用JSON的HTTP API请求以文本形式发送,并且适合利于阅读和创建。gRPC消息的大小始终小于同等级别的JSON消息。尽管gRPC不能完全替代HTTP API,但在某些情况下可以提供更高的生产率和性能优势。
  • Dubbo 在跨语言和协议穿透性方向的探索:支持 HTTP/2 gRPC

    本文整理自刘军在 Dubbo meetup 成都站分享的《Dubbo 在多语言和协议穿透性方向上的探索》。在这里我们着重讲一下 Dubbo 在协议通用性方面值得改进的地方,关于协议详细解析请参见官网博客。Dubbo 协议体 Body 中有一个可扩展的 attachments 部分,这给 RPC 方法之外额外传递附加属性提供了可能,是一个很好的设计。通用性,HTTP 协议几乎被网络上的所有设备所支持,具有很好的协议穿透性。总的来说,在这样的设计理念指导下,gRPC 最终被设计为一个跨语言、跨平台的、通用的、高性能的、基于 HTTP/2 的 RPC 协议和框架。
  • 小米Kylin平滑迁移HBase实践

    根据美团等其他公司在Kylin社区的公开分享资料,跨HBase集群升级方案需要在新集群重新构建历史的Cube,或者有一段时间的服务停止。小米在Kylin生产环境的跨HBase集群迁移中实现了无中断的平滑迁移,对业务的影响减到最低。由于Kylin已经产生超过6000张HBase表,给HBase的metadata管理造成了不小的压力,HBase metadata节点异常恢复的速度也受到极大的影响。为了应对快速增长的业务需求,我们决定将Kylin使用的HBase集群独立运维。Kylin支持连接多个HBase集群查询时如果在首选HBase中找不到需要的HTable,则回退到备选HBase集群。在HBase团队的协助下,该表做到了实时的同步。
  • Kylin 迁移到 HBase 实践在小米的实践

    背景 小米Kylin生产环境部署的是基于社区2.5.2修改的内部版本,所依赖HBase集群是一个公共集群,小米内部很多离线计算服务共享使用该HBase集群。由于Kylin已经产生超过6000张HBase表,给HBase的metadata管理造成了不小的压力,HBase metadata节点异常恢复的速度也受到极大的影响。为了应对快速增长的业务需求,我们决定将Kylin使用的HBase集群独立运维。Kylin支持连接多个HBase集群查询时如果在首选HBase中找不到需要的HTable,则回退到备选HBase集群。在HBase团队的协助下,该表做到了实时的同步。
  • 无缝衔接 gRPC 与 dubbo-go

    作者 |邓明最近我们 dubbo-go 社区里面,呼声很大的一个 feature 就是对 gRPC 的支持。今天我就给大家分析一下大佬是怎么连接 dubbo-go 和 gRPC 。gRPC先来简单介绍一下 gRPC 。因而 gRPC 天然就支持多语言。这几年,它几乎成为了跨语言 RPC 框架的标准实现方式了,很多优秀的rpc框架,如 Spring Cloud 和 dubbo ,都支持 gRPC 。还剩下一个问题,就是我们的解决方案怎么和 dubbo-go 结合起来呢?设计我们先来看一下 dubbo-go 的整体设计,思考一下,如果我们要做 gRPC 的适配,应该是在哪个层次上做适配。而从 cluster 往上,显然 gRPC 没有涉及。这个 gRPC protocol 大体上相当于一个适配器,将底层的 gRPC 的实现和我们自身的 dubbo-go 连接在一起。
公众号
码农俱乐部
关注公众号订阅更多技术干货!