Protocol Buffers

DM 源码阅读系列文章(二)整体架构介绍

拜拜、爱过 提交于 2019-11-27 19:41:43
作者:张学程 本文为 DM 源码阅读系列文章的第二篇, 第一篇文章 简单介绍了 DM 源码阅读的目的和规划,以及 DM 的源码结构以及工具链。从本篇文章开始,我们会正式开始阅读 DM 的源码。 本篇文章主要介绍 DM 的整体架构,包括 DM 有哪些组件、各组件分别实现什么功能、组件之间交互的数据模型和 RPC 实现。 整体架构 通过上面的 DM 架构图,我们可以看出,除上下游数据库及 Prometheus 监控组件外,DM 自身有 DM-master、DM-worker 及 dmctl 这 3 个组件。其中,DM-master 负责管理和调度数据同步任务的各项操作,DM-worker 负责执行具体的数据同步任务,dmctl 提供用于管理 DM 集群与数据同步任务的各项命令。 DM-master DM-master 的入口代码在 cmd/dm-master/main.go ,其中主要操作包括: 调用 cfg.Parse 解析命令行参数与参数配置文件 调用 log.SetLevelByString 设置进程的 log 输出级别 调用 signal.Notify 注册系统 signal 通知,用于接受到指定信号时退出进程等 调用 server.Start 启动 RPC server,用于响应来自 dmctl 与 DM-worker 的请求 在上面的操作中,可以看出其中最关键的是步骤 4

从零开始实现一个IDL+RPC框架

别来无恙 提交于 2019-11-27 10:21:43
一、RPC是什么 在很久之前的单机时代,一台电脑中跑着多个进程,进程之间没有交流各干各的,就这样过了很多年。突然有一天有了新需求,A进程需要实现一个画图的功能,恰好邻居B进程已经有了这个功能,偷懒的程序员C想出了一个办法:A进程调B进程的画图功能。于是出现了IPC(Inter-process communication,进程间通信)。就这样程序员C愉快的去吃早餐去了! 又过了几年,到了互联网时代,每个电脑都实现了互联互通。这时候雇主又有了新需求,当时还没挂的A进程需要实现使用tensorflow识别出笑脸 >_< 。说巧不巧,远在几千里的一台快速运行的电脑上已经实现了这个功能,睡眼惺忪的程序媛D接手了这个A进程后借鉴之前IPC的实现,把IPC扩展到了互联网上,这就是RPC(Remote Procedure Call,远程过程调用)。RPC其实就是一台电脑上的进程调用另外一台电脑上的进程的工具。成熟的RPC方案大多数会具备服务注册、服务发现、熔断降级和限流等机制。目前市面上的RPC已经有很多成熟的了,比如Facebook家的Thrift、Google家的gRPC、阿里家的Dubbo和蚂蚁家的SOFA。 二、接口定义语言 接口定义语言,简称IDL,是实现端对端之间可靠通讯的一套编码方案。这里有涉及到传输数据的序列化和反序列化,我们常用的http的请求一般用json当做序列化工具

Grpc介绍 — ProToBuf基本使用

半世苍凉 提交于 2019-11-27 03:49:37
RPC(Remote Procedure Call)远程过程调用,关注笔者的同学应该知道之前笔者出过关于Thrift对应的问题,这次主要来说的是Google开源的Grpc,和Thrift有很大的区别Grpc是基于HTTP2.0并且依赖protobuf,为什么又推出关于grpc的文章呢?请大家继续往下看。 附上: 喵了个咪的博客: w-blog.cn 博文实例demo: GitHub - sunmi-OS/grpc-php-to-golang-demo grpc官网: grpc / grpc.io protobuf代码仓库: Releases · protocolbuffers/protobuf · GitHub 一,为什么要用grpc它的优势是什么 一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。 gRPC基于HTTP/2标准设计,带来诸如双向流控、头部压缩、单TCP连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。 性能 Grpc PK Thrift 借鉴: 开源RPC(gRPC/Thrift)框架性能评测 - 沧海一滴 - 博客园 PS:笔者也做了对应的性能测试,后面的文章会附上详细步骤

Grpc介绍 — Go-Service To PHP-Client

给你一囗甜甜゛ 提交于 2019-11-27 03:48:57
笔者现在公司项目大部分是PHP进行开发,要完成整体微服务化必须要考虑PHP使用上的可行性,Grpc也是支持PHP作为client端发起Grpc请求,但是依赖的扩展等都相对复杂(毕竟不是亲儿子),那么本文就接受怎么使用PHP调用Grpc服务。 附上: 喵了个咪的博客: w-blog.cn 博文实例demo: GitHub - sunmi-OS/grpc-php-to-golang-demo grpc官网: grpc / grpc.io protobuf代码仓库: Releases · protocolbuffers/protobuf · GitHub 一,初始化PHP环境 PHP在使用过程中依赖一下几项内容 grpc.so protobuf.so 或 composer依赖 grpc_php_plugin 用来生成文件 1、先编译grpc_php_plugin > git clone https://github.com/grpc/grpc.git > cd grpc > git pull --recurse-submodules && git submodule update --init --recursive > make > sudo make install # make install 会在 /usr/local/bin 目录下生成以下文件 #grpc_cpp_plugin