第五届字节跳动青训营讲师非常用心给我们整理了课前、中、后的学习内容,同学们自我评价,选择性查漏补缺,便于我们更好的跟上讲师们的节奏,祝我们学习愉快,多多发问沟通~
课程:分布式守时使命
概述
本节课程首要分为五个方面:
- 分布式守时使命全体架构
- 操控台Admin详细规划
- 触发器Trigger详细规划
- 调度器Scheduler详细规划
- 履行器Executor详细规划
课前部分首要罗列课程中涉及到的概念。关于不熟悉的概念,同学们能够提早查询预习;课中部分首要罗列每一部分的关键思路,协助同学们跟上课程的进度;课后部分是一些问题,协助同学们在课后整理本课程的要点。
课前
分布式守时使命开展前史
- Linux指令-CronJob
- 单机守时使命-Timer、Ticker
- 单机守时使命-ScheduledExecutorService
- 使命调度- Quartz
- 分布式守时使命
分布式守时使命中心架构
- 操控台Admin
- 触发器Trigger
- 调度器Scheduler
- 履行器Executor
知识点扩大
- 时刻轮
- 延时音讯
- 离线核算引擎 Hive
- 实时核算引擎 Flink
课中
前言
- 每年新年抖音都会有很多有意思的玩法,假如同学们是字节的后端同学,怎样规划今年新年集卡分割20亿的技能计划?
-
事务流程
- 守时扫描抖音用户集卡状况
- 汇总核算用户的分割金额
- 守时开奖
-
技能体量
- 亿级用户规模
- 十亿级资金规模
- 百万级读写QPS
-
计划引出
- 自动化 + 守时履行 + 海量数据 + 高效安稳 = 分布式守时使命
开展进程
-
开展前史
-
Linux指令-CronJob
- 单机守时使命-Timer、Ticker
- 单机守时使命-ScheduledExecutorService
- 使命调度- Quartz
- 分布式守时使命
-
概述
-
界说
- 守时使命是指系统为了自动完成特定使命,实时、延时、周期性完成使命调度的过程。
- 分布式守时使命是把分散的、可靠性差的守时使命纳入统一的渠道,并完成集群办理调度和分布式布置的一种守时使命的办理方法。
-
特点
-
履行模式
- 单机使命
- 广播使命
- Map使命
- MapReduce使命
-
现状
- 业界盛行结构
Xxl-job SchedulerX TCT Elastic-job Saturn 来源公司 美团点评 阿里巴巴 腾讯 当当网 唯品会 是否开源 是 否 否 是 是 使命编列 子使命依靠 支撑 支撑 不支撑 不支撑 使命分片 支撑 支撑 支撑 支撑 支撑 高可用 支撑 支撑 支撑 支撑 支撑 毛病搬运 支撑 支撑 支撑 支撑 支撑 可视化运维 支撑 支撑 支撑 支撑 支撑 - 美团点评Xxl-job
- 阿里巴巴SchedulerX
- 腾讯TCT
- 业界盛行结构
-
-
关联计划
- 单机守时使命
- 大数据处理引擎
完成原理
-
全体架构
- 中心架构
- 数据流
- 功用架构
操控台Admin
触发器Trigger
计划一:腾讯字节计划
计划二:Quartz计划——时刻轮
调度器Scheduler
资源来源
- 事务系统
- 守时使命渠道
履行器Executor
事务运用
-
事务运用
- 一切需求守时、延时、周期性履行使命的事务场景,都能够考虑运用分布式守时使命
-
知识面扩大
- 分布式守时使命
- 单机守时使命
- 延时音讯
- 离线核算引擎Hive
- 实时核算引擎Flink
课后
- 分布式守时使命能够协助我们处理哪些事务场景?
- 新年集卡分割20亿的玩法,发奖金额核算、实时开奖两个阶段别离用到分布式守时使命什么履行模式?
- 有了分布式守时使命,单机守时使命还有适用场景么?
- 时刻轮这种数据结构,在守时/延时场景比较其他数据结构有哪些优势?
- 分布式守时使命的调度中心怎样判别一台履行器的机器处于可被调度状况?
- 你能想到哪些事务场景,实时核算引擎优于分布式守时使命?
课程:音讯行列原理与实战
概述
本节课程首要分为五个方面:
- 音讯行列的宿世此生
- 音讯行列-Kafka
- 音讯行列-BMQ
- 音讯行列-RocketMQ
- 最佳实践
课前部分首要罗列课程中涉及到的概念。关于不熟悉的概念,同学们能够提早查询预习;课中部分首要罗列每一部分的关键思路,协助同学们跟上课程的进度;课后部分是一些问题,协助同学们在课后整理本课程的要点。
课前
音讯行列的宿世
- 音讯行列运用场景
- 音讯行列的开展前史
常见音讯行列
- Kafka运用场景、架构、高档特性
- Pulsar运用场景、架构、高档特性
- Rocket运用场景、架构、高档特性
课中
音讯行列是什么
- 解耦
- 削峰
- 异步
- 日志处理
音讯行列的宿世此生
音讯行列-Kafka
kafka运用场景,事务日志、用户行为数据、Metrics数据
基本概念,Producer、Cluster、Consumer、Topic、Partition
数据迁移、Offset、Partition选主
一条音讯从出产到消费是怎样处理的,Producer端逻辑、Broker端逻辑、Consumer端逻辑
音讯行列-BMQ
Kafka在运用中遇到问题
BMQ架构
BMQ各模块是怎样工作的,Broker、Proxy、HDFS、MetaStorage
BMQ多机房容灾
音讯行列-RocketMQ
RocketMQ运用场景
RocketMQ和Kafka对比
RocketMQ架构介绍,Producer、Broker、Nameserver、Consumer
一条音讯从出产到消费是怎样处理的,Producer端逻辑、Broker端逻辑、Consumer端逻辑
音讯行列在字节
一些最佳实践的场景,包括数据展示
课后
- 音讯行列的运用场景有哪些?
- Kafka的哪些Feature让其能够支撑大吞吐写入的场景?
- Kafka Consumer Rebalance的流程简述?
- BMQ比较较Kafka有哪些优势?
- RocketMQ有哪些特有的Feature?
- RocketMQ事务音讯处理流程简述?
- 你认为MQ后面应该怎样开展?(敞开题)
课程:RPC 原理与实践
概述
本节课程首要分为四个方面:
- RPC 相关的基本概念
- RPC 结构的分层规划
- 衡量 RPC 结构的一些中心目标
- 字节内部 RPC 结构 Kitex 实践分享
课前部分首要罗列课程中涉及到的概念。关于不熟悉的概念,同学们能够提早查询预习;
课中部分首要罗列每一部分的关键思路,协助同学们跟上课程的进度;
课后部分是一些问题,协助同学们在课后整理本课程的要点。
课前
RPC 的基本概念
-
RPC的概念模型:User、User-Stub、RPC-Runtime、Server-Stub、Server
- 来自论文《Implementing Remote Procedure Calls》
-
IDL(Interface Definition Language) 文件
- Thrift
- Protobuf
- 生成代码
- 编解码(序列化/反序列化)
-
通信协议
- 运用层协议
-
网络通信
-
IO 网络模型
- blocking IO
- unblocking IO
- IO multiplexing
- signal driven IO
- asynchronous IO
-
传输层协议
- TCP
- UDP
-
RPC 结构分层规划
-
编解码层
-
数据格局:
-
言语特定格局
-
文本格局
-
二进制编码
- TLV 编码:Thrift 运用 TLV 编码
- Varint 编码:Protobuf 运用 Varint 编码
-
-
选项:
- 兼容性
- 通用型
- 功用
-
-
传输协议层
-
音讯切分
- 特殊结束符
- 变长协议:length+body
-
协议构造
- 以 Thrift 的 THeader 协议为例解说
-
-
网络通信层
-
网络库
-
中心目标
- 吞吐高
- 推迟低
-
RPC 结构的中心目标
-
安稳性
-
保证战略
- 熔断
- 限流
- 超时
-
恳求成功率
- 负载均衡
- 重试
-
长尾恳求
- BackupRequest
-
-
易用性
- 开箱即用
- 周边东西
- 扩展性
-
观测性
- Log
- Metric
- Tracing
- 内置观测性服务
- 高功用
字节内部 Kitex 实践分享
- Kitex 全体架构
- 自研网络库 Netpoll
-
功用优化:
- 网络库优化
- 编解码优化
- 兼并布置
课中
基本概念
-
比较本地函数调用,RPC调用需求解决的问题
- 函数映射
- 数据转换成字节省
- 网络传输
- 一次 RPC 的完好过程
-
RPC 带来的问题将由 RPC 结构来解决
- 服务宕机怎样感知?
- 遇到网络异常应该怎样应对?
- 恳求量暴增怎样处理?
RPC 结构分层规划
编解码层
-
数据格局
- 言语特定格局:例如 java.io.Serializable
- 文本格局:例如 JSON、XML、CSV 等
- 二进制编码:常见有 Thrift 的 BinaryProtocol,Protobuf,完成能够有多种形式,例如 TLV 编码 和 Varint 编码
-
选型考察点
-
兼容性
-
通用型
-
功用
- 空间开支
- 时刻开支
-
- 生成代码和编解码层相互依靠,结构的编解码应当具备扩展任意编解码协议的能力
协议层
- 以 Thrift 的 THeader 协议为例
– LENGTH 字段 32bits,包括数据包剩下部分的字节大小,不包括 LENGTH 自身长度 – HEADER MAGIC 字段16bits,值为:0x1000,用于标识 协议版别信息,协议解析的时候能够快速校验 – FLAGS 字段 16bits,为预留字段,暂未运用,默许值为 0x0000 – SEQUENCE NUMBER 字段 32bits,表明数据包的 seqId,可用于多路复用,最好确保单个衔接内递加 – HEADER SIZE 字段 16bits,等于头部长度字节数/4,头部长度核算从第14个字节开始核算,一直到 PAYLOAD 前(补白:header 的最大长度为 64K) – PROTOCOL ID 字段 uint8 编码,取值有: – ProtocolIDBinary = 0 – ProtocolIDCompact = 2 – NUM TRANSFORMS 字段 uint8 编码,表明 TRANSFORM 个数 – TRANSFORM ID 字段 uint8 编码,表明压缩方法 zlib or snappy – INFO ID 字段 uint8 编码,详细取值参阅下文,用于传递一些定制的 meta 信息 – PAYLOAD 音讯内容
- 协议解析
网络通信层
- 阻塞 IO 下,耗费一个线程去阻塞在 read(fd) 去等待用足够多的数据可读并回来。
- 非阻塞 IO 下,不停对一切 fds 轮询 read(fd) ,假如读取到 n <= 0 则下一个循环持续轮询。
第一种方法糟蹋线程(会占用内存和上下文切换开支),第二种方法糟蹋 CPU 做很多无效工作。而根据 IO 多路复用系统调用完成的 Poll 的意义在于将可读/可写状况通知和实际文件操作分开,并支撑多个文件描述符通过一个系统调用监听以提高功用。
网络库的中心功用就是去一起监听很多的文件描述符的状况改变(通过操作系统调用),并关于不同状况改变,高效,安全地进行对应的文件操作。
RPC 结构中心目标
安稳性
-
保证战略
- 熔断
- 限流
- 超时操控
从某种程度上讲超时、限流和熔断也是一种服务降级的手法 。
-
恳求成功率
- 负载均衡
- 重试
-
长尾恳求
- BackupRequest
易用性
-
开箱即用
- 合理的默许参数选项、丰厚的文档
-
周边东西
- 生成代码东西、脚手架东西
扩展性
- Middleware:middleware 会被构造成一个有序调用链逐个履行,比如服务发现、路由、负载均衡、超时操控等
- Option:作为初始化参数
- 中心层是支撑扩展的:编解码、协议、网络传输层
- 代码生成东西也支撑插件扩展
观测性
- 三件套:Log、Metric 和 Tracing
-
内置观测性服务,用于调查结构内部状况
- 当时环境变量
- 配置参数
- 缓存信息
- 内置 pprof 服务用于排查问题
高功用
- 衔接池和多路复用:复用衔接,减少频繁建联带来的开支
- 高功用编解码协议:Thrift、Protobuf、Flatbuffer 和 Cap’n Proto 等
- 高功用网络库:Netpoll 和 Netty 等
字节内部 Kitex 实践分享
- 结构文档 Kitex
-
自研网络库 Netpoll,背景:
a. 原生库无法感知衔接状况
b. 原生库存在 goroutine 暴涨的危险
- 扩展性:支撑多协议,也支撑灵敏的自界说协议扩展
-
功用优化,参阅 字节跳动 Go RPC 结构 KiteX 功用优化实践
a. 网络优化
- i. 调度优化
- ii. LinkBuffer 减少内存拷贝,从而减少 GC
- iii. 引入内存池和目标池
b. 编解码优化
- i. Codegen:预核算提早分配内存,inline,SIMD等
- ii. JIT:无出产代码,将编译过程移到了程序的加载(或首次解析)阶段,能够一次性编译生成对应的 codec 并高效履行
-
兼并布置
a. 微服务过微,引入的额外的传输和序列化开支越来越大
b. 将强依靠的服务统计布置,有效减少资源耗费
课后
- 行业界各个盛行的 RPC 结构的好坏对比
- 从第三章节 RPC 的中心目标来看,Kitex 还有哪些功用是短缺或许需求加强的?
- 了解微服务的新趋势 ServiceMesh,以及 RPC 结构和 ServiceMesh 的关系
- 关于 RPC 结构,业界有哪些新的趋势和概念?
- Netpoll 的优势在哪?比较其他高功用网络库例如 Netty 还有什么不足?
- Flatbuffer 和 Cap’n Proto 等编解码协议为什么高功用?
参阅文献
- 官方文档 Kitex Netpoll
- 字节跳动 Go RPC 结构 KiteX 功用优化实践_架构_字节跳动技能团队_InfoQ精选文章
- 字节跳动微服务架构系统演进_架构_字节跳动技能团队_InfoQ精选文章