-
Iteratively Migrating an HTTP Service to Go and gRPC Using grpc-gateway and httputil.ReverseProxy
Igor Dubinskiy

GitHub: eef9/p2_1.jpg)
OR GRPC BEHIND GRPC-GATEWAY
ngflip.com
## Options to migrate a service from HTTP to gRPC
• Everything but the browser
a. Modify clients to use gRPC
b. Use grpc-gateway; see below
• Browser (using grpc-gateway)
a. Modify clients to call new service per route as each required RPC is implemented
b. Modify clients to call new service for all routes once all required RPCs are implemented
0 码力 |
6 页 |
740.76 KB
| 2 年前 3
-
rename 接口实现方案(已实现,选用方案二)
背景
• 方案调研
• Chubaofs
• Juicefs
• 方案实现
• 方案一:chubaofs
• 方案二:事务方案
• 方案三:利用 KV 自带的分布式事务
• Q&A
• 1. 是否需要实现跨文件系统的 rename 操作?
• 2. 在多客户端情况下,是否需要加锁来保证其原子性?
• 3. rename rename 接口,本文档是对 rename 接口实现的调研及方案设计。
rename 操作,主要操作的是 dentry,如 rename /dir1/file1 /dir2/file2,主要有 2 个步骤:(1)删除 file1 的 dentry,(2)增加 file2 的 dentry(该 dentry 的 inodeid 等同 file1 的 inode id)。关于 rename 接口的实现,主要调研了 dentry,相当于多了一个硬链接,Linux 和 POSIX
接口中表明这允许一段时间内存在,但是最终还是要原子性,所以这一步出错会导致和本地文件系统不一致的行为:
1. Linux 接口定义允许 rename 过程中某一段时间存在这样的硬链接(或者 rename 执行到一半断电也会存在)
2. 而 POSIX 接口中提到了该函数得是原子(不断电的情况下,rename 操作不能被其他操作打断,不存在中间状态)
0 码力 |
15 页 |
555.93 KB
| 1 年前 3
-
## 使用gRPC go实现 基于Topic的高效消息订阅发布模型

姓名:___ 张凯
中国电子云

gRPC go 介绍 01
gRPC 四种通信模式及落地场景 02
根据 proto 生成 go 桩代码 03
订阅者动态注册 04
发布者消息推送 05
现场案例演示 06
## gRPC go介绍
## gRPC是什么?
1. 什么是gRPC?gRPC go与gRPC的关系是什么?
2. gRPC与HTTP相比优势是什么?能否使用HTTP平替gRPC的实现?
相比HTTP的Swagger,gRPC为什么没有Swagger?
4. 如何判断一个项目是否适合用qRPC来做实现?
5. 如果要使用gRPC实现,有没有什么快速学习的方法?
1. 什么是gRPC?gRPC go与gRPC的关系是什么?
-- gRPC是2015年Google开源,RPC的一种,底层基于HTTP2传输
-- gRPC是一种框架,gRPC go是gRPC的一种实现;同理有其他各语言的实现。
0 码力 |
31 页 |
2.42 MB
| 2 年前 3
-
curve文件系统元数据proto(代码接口定义,已实现)
## 1、 代码结构和代码目录
curve文件系统是相对于curve块设备比较独立的一块,在当前curve项目的目录下,增加一个一级目录curvefs,curvefs下有自己独立的proto\src\test。

4. }
5.
6. // 我们需要一个比较函数来比较值的大小以了解顺序
7. // 负数表示小于,0表示等于,正数表示大于 我们将这类函数称为方法
## 接口 Trait
## • 我们通过接口定义一系列方法的实现需求
1. trait Compare {
2. compare(Self, Self) -> Int // Self代表实现该接口的类型
3. }
4. trait Default {
5. default() -> Self
6. }
## • 月兔中的接口是结构化的
◦ 无需 无需声明为特定的接口实现方法,类型本身实现方法即可
## 接口 Trait
• 我们可以在泛型的参数上添加接口的要求
☐ 限制参数的类型: <类型参数> : <接口>
☐ 在函数中使用接口定义的方法: <类型参数>::<方法名>
1. fn make[T: Default]( ) -> Queue[T] { // 类型参数T应当满足Default接口
0 码力 |
16 页 |
346.04 KB
| 2 年前 3
-
com/kubernetes/kubernetes/tree/master/cmd/libs/go2idl
## Pattern 3: gRPC based Interface
• Decouple Kubernetes from external dependencies
• kubelet -> gRPC -> dockershim -> dockerd
• go2idl: gogoprotobuf own Controller with CRD
4.code gen for deep copy, API conversion, API doc, encoding/decoding etc
5.gRPC based interface (e.g. CRI)
2. How we can do better to use Kubernetes?
1. Programming Patterns in
0 码力 |
29 页 |
2.12 MB
| 2 年前 3
-
per_try_timeout = 2;
// Defines retry attempts amount.
int32 retries = 3;
// Defines the retriable gRPC errors.
repeated RetryOn retry_on = 4;
}
enum RetryOn {
CANCELLED = 0;
DEADLINE_EXCEEDED and allows for creation of miscellaneous rules
def k8s_manifest(
name:str,
srcs:list,
grpc_services:list=None,
):
"""Defines Kubernetes manifests."""
Args:
YAML config files containing the Kubernetes config.
grpc_services: The proto files used for creating VirtualService for the defined gRPC services.
virtual_service_rule = genrule(
name
0 码力 |
9 页 |
1.04 MB
| 1 年前 3
-
mpare
Dependencies | About Jaeger - | | ✓ network_service: GRPC gateway |
| Trace Start November 28, 2019 1:21 PM | Service: 1 | Depth: 3 | Total 序列化成字符串后传递给这个 Session Variable
3. 在 TiDB 体系内将 Tracer 信息反序列化后生成新的 Context
4. TiDB 和 TiKV 之间的通信是通过 gRPC, jaeger 对 gRPC 有着良好的支持
Tips: Jaeger client 提供了序列化和反序列化的 实现:
func (c SpanContext) String() string
func C 0 码力 |
39 页 |
3.43 MB
| 2 年前 3 -
/9/6/5/f/965f19e60396b430e5dbd32ac78ddc43/p10_1.jpg)
## RPC
协议&远程调用的选型;
- net/rpc, thrift, grpc等;
链路追踪,参考Google Dapper论文,核心思路是关键库植入代码,因为缺乏AOP编程支持,我们使用golang blog推荐的依赖context对象;
服务发现、负载均衡依赖ZK; 是否多语言支持?net/rpc不支持
☑ 性能如何?
☑ thrift num:111324, time:30s, num/s:3710;
grpc num:159999, time:30s, num/s:5333;
net/rpc不依赖context,实现数据跟踪,需要修改源码;
grpc支持http2,方便移动端app使用;

## 支持 HTTP、TCP、RPC
1. 支持 HTTP(s) 接口管理。
2. 支持 Socket (TCP) 接口管理。
3. 后续将会支持 GraphQL、Dubbo、gRPC、WebSocket 等协议接口。
## (3)
## 团队协作
1. 接口数据云端同步,实时更新。
2. 成熟的团队/项目权限管理,支持管理员、普通成员、只读成员等角色设置,满足各类企业的需求。

## 自动生成代码
1. 根据接口/模型定义,自动生成各种语言/框架的业务代码和 API 请求代码。
2. 支持 TypeScript、Java、Go、Swift、ObjectiveC、Kotlin、Dart、C++、C#、Rust
2. 只要定义好接口文档,接口调试、数据 Mock、接口测试即可直接使用,无需再次定义。
3. 接口文档和接口开发调试使用同一个工具,接口调试完成后即可保证和接口文档定义完全一致。
4. 高效、及时、准确!
## 最佳实践
1. 前端(或后端):在 Apifox 上定好接口文档初稿。
2. 前后端:一起评审、完善接口文档,定好接口用例。
3. 前端:使用系统根据接口文档自动生成的 Mock 0 码力 |
44 页 |
12.45 MB
| 2 年前 3
|