TarsGo微服务开发实践-利开园Docker TarsGo Tars+K8S DevOps ## 目录 1. RPC 2. 日志 3. 监控 4. 调用链 5. 网关 6. 错误码 7. 配置 8. 云原生 9. 标准化 ## 背景 • Tars是腾讯开源的微服务解决方案 · 高性能的RPC框架 • 丰富的服务治理能力 • 支持Golang/Cpp/Java/PHP/Nodejs 支持Golang/Cpp/Java/PHP/Nodejs • 腾讯内部(TAF)曾经应用最广的开发框架 • Tars应用实践:https://github.com/tarscloud/gopractice ## RPC:不应该只是RPC int sum(int a, int b); 接口定义 type calServerImp struct{} 服务端 func (c *calServerImp) Sum(a, b int32) logKv = append(logKv, k[len(logKeyPrefix):]) logKv = append(logKv, v) } } ## 监控:主动发现问题 · RPC接口默认监控 · 自定义业务监控 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 1790 码力 | 15 页 | 4.23 MB | 2 年前3
IPC性能极致优化方案-RPAL落地实践06a91/p2_1.jpg) 方案诞生的背景 01 全进程地址空间共享与保护 02 用户态进程切换 03 高效的Go Event Poller 04 RPC框架Kitex集成 05 性能收益与业务展望 06 ## 第一部分 ## 方案诞生的背景 ## 方案诞生的背景 几种常见的同机通信场景: 1. 微服务合并部署(亲和性部署、sidecar 2.异步线程唤醒/休眠(事件通知); 3. 数据拷贝(序列化/反序列化); ## 方案诞生的背景 能不能把库函数调用的高性能优势做到 IPC 里面,降低进程间的事件通知和数据拷贝开销? 以go-go微服务 RPC 通信场景为例,该问题可以抽象为,如何高效地在两个 go runtime 间进行函数调用?  第五部分 ## RPC 框架 Kitex 集成 ## RPC 框架 Kitex 集成 ## 指针读写抽象接口: type Conn interface { net.Conn RpalRead() (AckPointer0 码力 | 39 页 | 2.98 MB | 2 年前3
云原生go-zero微服务框架设计思考[Image](/uploads/documents/f/b/3/4/fb34ec45f803089948bd2070d4738c62/p6_1.jpg) ## go-zero是什么? Web & RPC微服务框架 ● 微服务代码生成工具goctl ☑ 通用API定义规范 ## go-zero的设计原则 ● 保持简单,第一原则 弹性设计,面向故障编程 工具大于约定和文档 ● 尽可能约束做一件事只有一种方式 Redis集群 Redis集群 Redis集群 数据库 MySQL集群 MongoDB集群 ClickHouse集群 ## 代码未动,数据先行 ● 定义数据边界 ● 数据库互相隔离,通过RPC访问 No join, no pain! 用户 商品 订单 物流 redis1 redis2 redis3 service mysql/mongo clusters ## 如何设计缓存 5057, hit_ratio: 99.7%, hit: 5044, miss: 13, db_fails: 0 Q ☐ * ⚠️ pro4 GOPHER CHINA 2020 ## rpc服务层 - zRPC ● 协议选择 - gRPC 服务发现方式 - etcd ● 负载均衡 - p2c ewma 支持自定义中间件 watch发现, etcd interface rpc CreateFs(CreateFsRequest) returns (CreateFsResponse); rpc MountFs(MountFsRequest) returns (MountFsResponse); rpc UmountFs(UmountFsRequest) returns (UmountFsResponse); rpc GetFsI GetFsInfo(GetFsInfoRequest) returns (GetFsInfoResponse); } // rpc UpdateFsInfo(UpdateFsInfoRequest) returns (UpdateFsInfoResponse); rpc DeleteFsInfo(DeleteFsInfoRequest) returns (DeleteFsInfoResponse); } #### MetaServerService { // dentry interface rpc GetDentry(GetDentryRequest) returns (GetDentryResponse); rpc ListDentry(ListDentryRequest) returns (ListDentryResponse); rpc CreateDentry(CreateDentryRequest)0 码力 | 15 页 | 80.33 KB | 1 年前3
字节跳动云原生微服务架构原理与开源实践 CloudWeGo 技术白皮书 20245.4 成熟期 ...6 第二章 CloudWeGo 在开源和微服务方向的探索和实践 …8 2.1 CloudWeGo 开源背景 …8 2.2 CloudWeGo 项目概述 …8 2.3 高性能 RPC 框架 Kitex 内外统一的开源实践 …9 2.3.1 Kitex 发展历史 ...9 2.3.2 Kitex 的核心特点与设计 ...10 2.2.3 Kitex 最佳实践 ...14 2 Hertz 设计与开源实践 …23 2.4.1 Hertz 发展历史 …24 2.4.2 Hertz 的核心特点与设计 …25 2.4.3 Hertz 最佳实践 …26 2.5 国内首个 Rust RPC 框架 Volo 的设计与实践 …29 2.5.1 项目缘起 …29 2.5.2 Volo 的核心特点与设计 …30 第三章 微服务 DEMO 案例 …32 3.1 Easy Note - 快速入门 2,它们其实存在很多问题,再加上Go迎来数轮大版本迭代,Kite甚至连Go context参数都没有。综上种种原因,Kite已经满足不了内部使用需求。 在2019年中,服务框架团队正式启动了Kite这个字节自有RPC框架的重构。这是一个自下而上的整体升级重构,围绕性能和可扩展性的诉求展开设计。2020年10月,团队完成了KiteX发布,仅仅两个月后,KiteX就已经接入超过1000个服务。类似的设计思路和底层模块也被应用在字节跳动自研Go0 码力 | 68 页 | 24.07 MB | 4 月前3
HBASE-21879 Read HFile ’s Block into ByteBuffer directly.### 1. Background For reducing the Java GC impact to p99/p999 RPC latency, HBase 2.x has made an off-heap read and write path. The KV are allocated from the JVM off-heap, and the memory area in off-heap Now consider the implementation: Firstly, we need a global ByteBuffAllocator for RPC. when reading a block in RPC, we'll do: 1. Allocate ByteBuff from ByteBuffAllocator, and read the data from asynchronously (don't block the RPC); In theory, if the RPC finished, we need to free the ByteBuff, but we can't: ByteBuff can also be referenced by other RPC because it's still in RAMCache0 码力 | 18 页 | 1.14 MB | 2 年前3
Celery v4.0.1 Documentationtask failed, the exception and traceback). Results aren’t enabled by default, so if you want to do RPC or keep track of task results in a database you have to configure Celery to use a result backend. This [http://memcached.org], Redis [http://redis.io/], RPC (RabbitMQ) [http://www.rabbitmq.com/]/AMQP), and – or you can define your own. For this example we use the rpc result backend, that sends states back as transient setting if you choose to use a configuration module): app = Celery('tasks', backend='rpc://', broker='pyamqp://') Or if you want to use Redis as the result backend, but still0 码力 | 1040 页 | 1.37 MB | 2 年前3
CurveFS rename 接口实现方案下次访问的时候,带上对应 copyset 的最新 txid (copyset_txid),判断 PendingTx,如果 (copyset_txid >= PendingTxId && rpc_request.key == PendingTxKey),则表明 PendingTx 对应的事务是已经成功了,并且 PendingTx 对应事务刚好操作的是请求的 dentry,则返回 PendingTxKey (5)下次访问的时候,带上对应 copyset 的最新 txid (copyset_txid),判断 PendingTX,如果 (copyset_txid >= PendingTxId && rpc_request.key == PendingTxKey),则表明 PendingTx 对应的事务是已经成功了,并且 PendingTx 对应事务刚好操作的是请求的 dentry,则返回 PendingTxKey 但是如果是 rename 事务的话,则需要先处理这个 PendingTx: - 如果当前事务带上来的 rpc_request.txid == PendingTxId 的话,则表示上一次事务失败了,则将该 PendingTxKey 对应的 dentry 的副本删除即可 - 如果当前事务带上来的 rpc_request.txid > PendingTxId 的话,则表示上一次事务成功了,我们则更新0 码力 | 15 页 | 555.93 KB | 1 年前3
基于gRPC go实现消息发布订阅如何判断一个项目是否适合用qRPC来做实现? 5. 如果要使用gRPC实现,有没有什么快速学习的方法? 1. 什么是gRPC?gRPC go与gRPC的关系是什么? -- gRPC是2015年Google开源,RPC的一种,底层基于HTTP2传输 -- gRPC是一种框架,gRPC go是gRPC的一种实现;同理有其他各语言的实现。 2. gRPC与HTTP相比优势是什么?能否使用HTTP平替gRPC的实现? protocolbuf 有啥区别? -- gRPC 好比是 http,protocolbuf 好比是 http 传输时的 restful json 传输协议格式 7. go实现的rpc和java里面的rpc有啥差异? --rpc是远程过程调用,都需要通过每个语言的sdk调用,本质没差异 8. k8s内部实现了大量gRPC,对外通信为什么又要用http? -- 对内使用gRPC加快传输过程,对外使用http,方便客户端调用 端调用 ## gRPC介绍 ## Why gRPC? gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can run in any environment. It can efficiently connect services in and across data0 码力 | 31 页 | 2.42 MB | 2 年前3
FISCO BCOS 2.1.0 中文文档构建企业级区块链时使用,快速使用方法可参考教程 - Web3SDK:提供访问节点状态、修改区块链系统配置以及节点发送交易等接口。 - 浏览器详细介绍请参考浏览器 • JSON-RPC接口可参考 JSON-RPC API - 系统设计文档请参考 系统设计 ## 关键特性 • 多群组: 教程 使用手册 设计文档 并行计算: 使用手册 设计文档 • 分布式存储: 使用手册 设计文档 ## com/FISCO-BCOS/FISCO-BCOS/releases/tag/v2.0.0] ## 变更描述 ## 新特性 • AMOP协议支持多播 • AMOP协议支持二进制传输 • JSON-RPC getTotalTransactionCount接口新增历史失败交易数统计 ## 更新 • RocksDB模式支持落盘加密 - 使用TCMalloc优化内存使用 ## 修复 - 修复P2P模块偶现不处理消息的问题 搭建新链时存储默认采用RocksDB - 分布式存储:新增CRUD接口支持,控制台1.0.3以上版本提供类SQL语句读写区块链数据 ## 更新 • 完善ABI解码模块 • 修改预编译合约和RPC接口错误码,统一为负数 • 优化存储模块,增加缓存层,支持配置缓存大小 - 优化存储模块,允许流水线提交区块。可配置[storage].max_capacity 控制允许使用的内存空间大小 -0 码力 | 1058 页 | 740.85 KB | 2 年前3
共 884 条
- 1
- 2
- 3
- 4
- 5
- 6
- 89
相关搜索词
TarsGo微服务RPC服务治理云原生IPCRPAL用户态协议栈内核绕过RPC框架go-zero微服务框架HTTP协议Curve文件系统元数据Protorpc接口文件系统proto定义微服务架构Service Mesh多运行时架构容器化HBASE-21879HFileBlockByteBufferNetty's ByteBufAllocatorCeleryDistributed Task Queuetask queuereal-time processingtask schedulingrename接口ChubaofsJuicefs事务方案分布式事务gRPC goTopic消息订阅发布模型protoPublisherSubscriberFISCO BCOS加密通信存储权限控制安全机制













