分布式NewSQL数据库TiDB
确认合计费⽤后,点击“⽴即购买” 按钮来创建实例。 查看 查看TiDB实例列表 实例列表 进⼊产品主⻚,选择TiDB,会默认列出当前地域的实例列表。 实例 分布式NewSQL数据库 TiDB Copyright © 2012-2021 UCloud 优刻得 32/120 查看 查看TiDB实例详情 实例详情 进⼊产品主⻚,选择TiDB,会默认列出当前地域的实例列表。 找到实例,点击操作栏中的“详情”按钮进⼊详情⻚⾯。 详情⻚⾯左侧会显⽰实例的基础信息等内容,可以在⻚⾯左侧进⾏续费操作, 右上侧会展⽰集群当前节点配置及状态信息,右下侧会展⽰监控信息,监控项有数据量,QPS,TPS,内存使⽤量 等。 删除 删除TiDB实例 实例 进⼊产品主⻚,选择TiDB,会默认列出当前地域的实例列表。 找到需要删除的实例,点击操作栏中的“删除实例”按钮进⼊删除确认⻚⾯。 实例 分布式NewSQL数据库 TiDB Copyright © 2012-2021 当所有信息完整以后, 点击右上⻆的“⽴即购买” 按钮来创建实例。 查看 查看TiDB实例列表 实例列表 进⼊产品主⻚, 会默认列出当前地域的实例列表。 实例 分布式NewSQL数据库 TiDB Copyright © 2012-2021 UCloud 优刻得 52/120 查看 查看TiDB实例详情 实例详情 进⼊产品主⻚, 会默认列出当前地域的实例列表。 找到实例,点击操作栏中的“详情”按钮进⼊详情⻚⾯。 实例0 码力 | 120 页 | 7.42 MB | 5 月前3Curve核心组件之Client - 网易数帆
复制组所在的chunkserver列表 复制组的leader信息 Failover支持 MDS:只有主MDS才会监听端口 ChunkServer:通过raft维护复制组内的主-从关系CLIENT IO流程 用户下发一个写请求 off: 8M len: 16M 请求落在两个逻辑chunk上,所以 请求会被拆分成两个子请求: ChunkIdx 1, off: 8M 将请求发往leader节点CLIENT IO线程模型 用户线程 1. 用户调用接口,发起IO请求 2. AioWrite将请求封装成io task并放入任务队列 3. 放入任务队列后,异步请求发起成功,返回用户 IO拆分线程 4. 从任务队列取出任务后进行拆分 5. 拆分过程依赖元数据,可能会通过MDSClient向 MDS获取 6. 拆分成的子请求放入队列CLIENT IO线程模型 IO分发线程 7. 从队列中取出子请求准备发送 Chunkserver查询复制组leader 9. 发送写请求给Chunkserver BRPC线程 10.Chunkserver处理完成后返回RPC Response 11.用户请求的所有子请求完成后,调用 IOTracker::Done 12.调用异步请求回调,返回用户CLIENT IO请求重试 IO分发线程将拆分后的子请求通过RPC请求发往指定的Chunkserver上,RPC有可能会失败,一般情况下0 码力 | 27 页 | 1.57 MB | 5 月前3TiDB中文技术文档
stall : RocksDB Stall 时间 大于 0,表明 RocksDB 忙不过来,需要注意 IO 和 CPU 了 channel full : channel 满了,表明线程太忙无法处理 如果大于 0,表明线程已经没法处理了 95% send_message_duration_seconds : 95% 发送消息的时间 小于 50ms leader/region : 每个 TiKV 的 leader/region 驱动表构建查询计划。 SELECT /*+ TIDB_HJ(t1, t2) */ * from t1,t2 where t1.id = t2.id 提示优化器使用 Hash Join 算法,这个算法多线程并发执行,执行速度较快,但会消耗较多内存。 这个是一个 TiDB 的隐藏列,代表隐式的 ROW ID 的列名,只存在于 PK 非整数或没有 PK 的表上,可以进行增 减改查的操作。 SELECT 语句示例: 中信息函数的使用方法与 MySQL 基本一致,详情参见: Information Functions. 信息函数表 函数名 功能描述 CONNECTION_ID() 返回当前连接的连接 ID (线程 ID) CURRENT_USER() , CURRENT_USER 返回当前用户的用户名和主机名 DATABASE() 返回默认(当前)的数据库名 FOUND_ROWS() 该函数返回对于一个包含0 码力 | 444 页 | 4.89 MB | 5 月前3Service Mesh的实践分享
服务元数据上报缺点 • 语言单一 • 升级困难 • 复杂代码嵌入对客户端进程影响大服务化体系2.0 - Service Mesh雏形 • 物理机、sidecar • Local & Remote,主与备 • 轻量级客户端、本地调用 • Local Proxy负责服务治理与 远程通信 • Remote Proxy负责备份和非 主流流量 JavaApp Local Proxy OSP Server server只带一个 服务注册agent • 服务端的一些治理、trace、鉴权功能通过代码插 件的方式实现 • 治理效果考虑 • 服务端嵌入治理功能可以让治理效果更好,如提 供主动GC、线程池隔离等 • 因为是内部项目,优雅性和治理效果之间,选择 了后者 App Local Proxy OSP OSP client App Envoy App EnvoyClient端不基于IPTable劫持0 码力 | 30 页 | 4.80 MB | 5 月前3Rust 程序设计语言 简体中文版 1.85.0
. . . . . . . 354 16.1. 使用线程同时地运行代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 16.2. 使用消息传递在线程间通信 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 17.6. future、任务和线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 21. 最后的项目:构建多线程 web server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 21.1. 建立单线程 web server . . . . . . . . . . . .0 码力 | 562 页 | 3.23 MB | 9 天前3TGT服务器的优化
connection,在单线程里做event loop多路复用。 • 多个target时,如果挂的设备多,一旦客户端请求量大,就会忙不过来。 • 开源界有尝试修改 • 例如sheepdog的开发者提交过一个patch,但是测试效果不理想,分析 原因,event loop依然是瓶颈对TGT的性能优化 • IO是使用多个epoll 线程,充分发挥多CPU能力 • 当前策略是每个target一个epoll线程,负责Initiator发过来的I/O • 管理平面不变。主线程里的事件循环及问题: 管理面是主线程,登录,增、删、改target,lun,session,connection,params 都在主线程,而target epoll 线程也要使用这些数据,多线程冲突,数据一 致性问题就来了对TGT的性能优化(续) • 为每一个target增加一把锁 • Target event loop (TEL)线程和管理面线程使用这把锁互斥 • TEL在运行时锁住这把锁,管理面只能等待,等TEL线程进入epoll wait状 态,会释放这把锁,管理面可以增删改target信息。 • 不需要target list lock • 因为TEL线程只存取自己负责的target,不存取别的target,所以TEL线程 不需要target list lock。 • 管理面是单线程,只有它遍历target list,没有需要互斥的情况。FIO性能测试(配置)0 码力 | 15 页 | 637.11 KB | 5 月前3Curve支持S3 数据缓存方案
of 9 版本 时间 修改者 修改内容 1.0 2021/8/18 胡遥 初稿 背景 整体设计 元数据采用2层索引 对象名设计 读写缓存分离 缓存层级 对外接口 后台刷数据线程 本地磁盘缓存 关键数据结构 详细设计 Write流程 Read流程 ReleaseCache流程 Flush流程 FsSync流程 后台流程 poc测试验证 背景 基于s3的daemon 要提供truncate接口,可以由client直接修改inode的len,由metaserver的碎片整 理(马杰负责)模块进行truncate的无效数据清理 后台刷数据线程© XXX Page 4 of 9 启动后台线程,将写Cache定时刷到S3上,同时通过inodeManager更新inode缓存中的s3InfoList。具体细节见 本地磁盘缓存 如果有配置writeBack dev fileCacheManager,如果没有则生成新的fileCacheManager,解锁,调用fileCacheManager的Write函数。 2.考虑到同一个client同一个文件同时只能一个线程进行文件写,所以在Write函数中加写锁。 3.根据请求offset,计算出对应的chunk index和chunkPos。将请求拆分成多个chunk的WriteChunk调用。 4.在WriteC0 码力 | 9 页 | 179.72 KB | 5 月前3蚂蚁金服ServiceMesh数据平面 SOFAMosn深层揭秘
bytes stream stream bytes Network Network Protocol Stream Proxy Proxy Protocol Stream Network Network线程模型 0.1.0 9 Client Listener Read / Codec Read / Codec Read / Codec accept Stream Event Handler send write worker worker Read / Codec Read / Codec Read / Codec Write Write Write write send线程模型 0.2.0 9 Client Listene r Read / Codec Read / Codec Read accept Stream Event Handler Pool worker worker Read / Codec Read / Codec Read Write Write Write write data Codec Worker Pool线程模型规划: SEDA 10 Client Listener IO Pool Server Server Server IO Event Handler Pool data Codec0 码力 | 44 页 | 4.51 MB | 5 月前3BRPC与UCX集成指南
典型的RDMA栈28 UCX 编程的一些基本概念 ●Context –收集机器资源(内存,网卡等),在应用的各个部分共享 ●Worker –完成ucx的功能,可以在应用程序中调用的函数(不是单独执行的线程) ●Listener –接收连接请求 ●Ep –连接对象,在ep上请求发送和接收29 UCP 消息接口类型 ●Active message –速度最快,被brpc使用作为消息传递 –消息通过回调函数接收 ●Tag –MPI使用 ●Stream –官方不推荐30 WORKER ●worker是UCX通讯中的核心概念,它是一个进度引擎(progress engine) ●worker既不是协程也不是线程,而是一个状态机,可以通过不停地调用 ucp_worker_progress(worker)完成功能。如果你用过libuv或者libevent的evbuffer,它们有点 像 proactor,使用 UCX作为选项38 Ucp Context ●只有一个全局对象,使用下列函数获取 ●UCP_Context* get_or_create_ucp_ctx() ●指定了FEATURE_AM, 多线程共享39 命令行参数控制context的属性 ●--brpc_ucp_error_mode缺省是none,是的本地通讯使用shared memory成为可能 ●--brpc_set_cpu_latency0 码力 | 66 页 | 16.29 MB | 5 月前3CurveFS S3数据整理(合并碎片、清理冗余)
offset len } s3 object命名: chunkid_version_index (index为obj在chunk内的index) 执行步骤 数据整理作为一个后台服务(线程池), 运行于metaserver, 遍历metaserver的inode进行数据整理的尝试, 入队inodekey, 如果是已有inode任务, enqueue直接返回, 不入队 任务开始执行,0 码力 | 3 页 | 101.58 KB | 5 月前3
共 37 条
- 1
- 2
- 3
- 4