 分布式任务系统cronsunSunteng Technology 分布式任务系统 cronsun 苏创绩 @Copyright Sunteng Technology 目录 01 任务系统 02 分布式任务系统 03 cronsun 04 心得体会 @Copyright Sunteng Technology Part One 01 任务系统 @Copyright Sunteng Technology crontab cmd1 cmd2 cmd3 ... @Copyright Sunteng Technology 早期的 cron V7,1979 1. 在Version 7 Unix里是一个系统服务 2. 只用 root 运行任务 3. 算法简单直接 @Copyright Sunteng Technology 早期的 cron 运行逻辑 1. 读 /usr/lib/crontab 功能比较简单 4. 多机器的情况下任务维护成本较高 @Copyright Sunteng Technology Part Two 02 分布式任务系统 @Copyright Sunteng Technology 分布式系统的特点 1. 分布性 2. 对等性 3. 并发性 4. 缺乏全局时钟 5. 故障总是会发生 @Copyright Sunteng Technology0 码力 | 48 页 | 1.52 MB | 1 年前3 分布式任务系统cronsunSunteng Technology 分布式任务系统 cronsun 苏创绩 @Copyright Sunteng Technology 目录 01 任务系统 02 分布式任务系统 03 cronsun 04 心得体会 @Copyright Sunteng Technology Part One 01 任务系统 @Copyright Sunteng Technology crontab cmd1 cmd2 cmd3 ... @Copyright Sunteng Technology 早期的 cron V7,1979 1. 在Version 7 Unix里是一个系统服务 2. 只用 root 运行任务 3. 算法简单直接 @Copyright Sunteng Technology 早期的 cron 运行逻辑 1. 读 /usr/lib/crontab 功能比较简单 4. 多机器的情况下任务维护成本较高 @Copyright Sunteng Technology Part Two 02 分布式任务系统 @Copyright Sunteng Technology 分布式系统的特点 1. 分布性 2. 对等性 3. 并发性 4. 缺乏全局时钟 5. 故障总是会发生 @Copyright Sunteng Technology0 码力 | 48 页 | 1.52 MB | 1 年前3
 2.7 Golang与高性能DSP竞价系统专业DSP解决⽅方案供应商 Golang与⾼高性能DSP竞价系统 By @QLeelulu 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • RTB: Real-time Bidding,实时竞价,允许⼲⼴广告买家根据 活动⺫⽬目标、⺫⽬目标⼈人群以及费⽤用⻔门槛等因素对每⼀一个⼲⼴广告 及每次⼲⼴广告展⽰示的费⽤用进⾏行竞价。 ) • 复杂的出价算法与逻辑 DSP竞价系统的挑战 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • 竞价请求解析(JSON 或 Google Protobuf) • 根据⼲⼴广告位属性过滤活动 • 根据客户端信息过滤活动(浏览器、操作系统类型等) • 根据地区过滤活动 • 查询Cookie 查询Cookie Mapping得到访客在DSP系统的唯⼀一ID • 根据⽤用户看过⼲⼴广告的频次过滤活动 • 根据访客的⼈人群属性过滤活动 • 根据活动的出价选择胜出的活动 • 其他更细致的过滤条件 100毫秒内要做些什么 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved 为什么选择Golang0 码力 | 51 页 | 5.09 MB | 1 年前3 2.7 Golang与高性能DSP竞价系统专业DSP解决⽅方案供应商 Golang与⾼高性能DSP竞价系统 By @QLeelulu 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • RTB: Real-time Bidding,实时竞价,允许⼲⼴广告买家根据 活动⺫⽬目标、⺫⽬目标⼈人群以及费⽤用⻔门槛等因素对每⼀一个⼲⼴广告 及每次⼲⼴广告展⽰示的费⽤用进⾏行竞价。 ) • 复杂的出价算法与逻辑 DSP竞价系统的挑战 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • 竞价请求解析(JSON 或 Google Protobuf) • 根据⼲⼴广告位属性过滤活动 • 根据客户端信息过滤活动(浏览器、操作系统类型等) • 根据地区过滤活动 • 查询Cookie 查询Cookie Mapping得到访客在DSP系统的唯⼀一ID • 根据⽤用户看过⼲⼴广告的频次过滤活动 • 根据访客的⼈人群属性过滤活动 • 根据活动的出价选择胜出的活动 • 其他更细致的过滤条件 100毫秒内要做些什么 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved 为什么选择Golang0 码力 | 51 页 | 5.09 MB | 1 年前3
 2.3 用golang写一个操作系统统 复睿:李四保 ⽤用Golang ⾃自我介绍 l 开发过银⾏行设备 l 同花顺移动证券 l 前后参与创⽴立过多家公司 l ⽤用Golang写了⼀一个云操作系统 电⼒力、⽯石化、银⾏行、证券、⼲⼴广电、电商 研发、产品、运营、公司运营 l 多种职业 l 喜欢各种宗教 l 喜欢在虚⽆无中创造⼀一个世界 l 多个⾏行业 ⾃自我介绍 互联⺴⽹网 结缘Golang:上帝的⼿手法 l ⼤大道⾄至简 l ⽆无⽤用的都会被舍弃 l 互动和映照 l 迭代中前⾏行 结缘Golang:上帝的⼿手法 监控在线系统所有请求的性能,并通过⺴⽹网⻚页进⾏行提供查询功能 简介 功能 模拟ssh登录各server, 采集所有请求的数据 根据服务器、⽇日期、请求,显⽰示所选请求的性能⾛走势图,包括平均和最⼤大响应时间。 说⼀一万句,不如做⼀一件事:⽤用Golang写⼀一个操作系统 来份硬菜:⽤用Golang写⼀一个操作系统 l 操作系统 相对完整的控制系统资源,有应⽤用体系 Unix,CP/M,dos、windows, l ⽣生态操作系统 在原有操作系统内核基础上,构建新的应⽤用体系及应⽤用⽣生态 ios、android l 云操作系统 chrome0 码力 | 33 页 | 1014.12 KB | 1 年前3 2.3 用golang写一个操作系统统 复睿:李四保 ⽤用Golang ⾃自我介绍 l 开发过银⾏行设备 l 同花顺移动证券 l 前后参与创⽴立过多家公司 l ⽤用Golang写了⼀一个云操作系统 电⼒力、⽯石化、银⾏行、证券、⼲⼴广电、电商 研发、产品、运营、公司运营 l 多种职业 l 喜欢各种宗教 l 喜欢在虚⽆无中创造⼀一个世界 l 多个⾏行业 ⾃自我介绍 互联⺴⽹网 结缘Golang:上帝的⼿手法 l ⼤大道⾄至简 l ⽆无⽤用的都会被舍弃 l 互动和映照 l 迭代中前⾏行 结缘Golang:上帝的⼿手法 监控在线系统所有请求的性能,并通过⺴⽹网⻚页进⾏行提供查询功能 简介 功能 模拟ssh登录各server, 采集所有请求的数据 根据服务器、⽇日期、请求,显⽰示所选请求的性能⾛走势图,包括平均和最⼤大响应时间。 说⼀一万句,不如做⼀一件事:⽤用Golang写⼀一个操作系统 来份硬菜:⽤用Golang写⼀一个操作系统 l 操作系统 相对完整的控制系统资源,有应⽤用体系 Unix,CP/M,dos、windows, l ⽣生态操作系统 在原有操作系统内核基础上,构建新的应⽤用体系及应⽤用⽣生态 ios、android l 云操作系统 chrome0 码力 | 33 页 | 1014.12 KB | 1 年前3
 1.5 Go 语言构建高并发分布式系统实践@johntech-o Date: 2015.04.25 go语⾔言并发编程实践 以360消息推送系统为例 如何应对的? go语⾔言在基础服务开发领域的优势? 我遭遇了哪些挑战? ⺫⽬目录 具有go特⾊色的运维 在⾼高并发,通信交互复杂,重业务逻辑的分布式系统中, Go语⾔言优势体现在:开发体验好 、⼀一定量级下服务稳定 、性能满⾜足 需要 测试环境,可以通过300w⻓长连接压测(⺴⽹网络,连接稳定,⽆无带宽限制,实际可以更⾼高 ,决定于⼲⼴广播时候业务内存开销的cpu消耗带来的⼼心跳或者业务延时能否接受) 以360消息推送系统为例 ⾼高并发、通信交互复杂 Dispatcher Service Room Service Proxy Service Register Service Saver Id Service (deprecat ed) 接入客户端 Android IOS Linux Web Windows Flash Iframe for ever 消息系统简要架构 单实例,单端⼝口,多协议复⽤用 全双⼯工,单客户端,多app复⽤用服务单通道 适⽤用于复杂环境下的⺴⽹网络的接⼊入策略 协议完备、简单、数据安全、可扩展、省流量0 码力 | 39 页 | 5.23 MB | 1 年前3 1.5 Go 语言构建高并发分布式系统实践@johntech-o Date: 2015.04.25 go语⾔言并发编程实践 以360消息推送系统为例 如何应对的? go语⾔言在基础服务开发领域的优势? 我遭遇了哪些挑战? ⺫⽬目录 具有go特⾊色的运维 在⾼高并发,通信交互复杂,重业务逻辑的分布式系统中, Go语⾔言优势体现在:开发体验好 、⼀一定量级下服务稳定 、性能满⾜足 需要 测试环境,可以通过300w⻓长连接压测(⺴⽹网络,连接稳定,⽆无带宽限制,实际可以更⾼高 ,决定于⼲⼴广播时候业务内存开销的cpu消耗带来的⼼心跳或者业务延时能否接受) 以360消息推送系统为例 ⾼高并发、通信交互复杂 Dispatcher Service Room Service Proxy Service Register Service Saver Id Service (deprecat ed) 接入客户端 Android IOS Linux Web Windows Flash Iframe for ever 消息系统简要架构 单实例,单端⼝口,多协议复⽤用 全双⼯工,单客户端,多app复⽤用服务单通道 适⽤用于复杂环境下的⺴⽹网络的接⼊入策略 协议完备、简单、数据安全、可扩展、省流量0 码力 | 39 页 | 5.23 MB | 1 年前3
 1.每秒百万数据点 Go 应用监控系统演进Go 应用监控系统演进 张平 AfterShip 高级 SRE 关于 AfterShip 拥抱云原生和开源系统 目 录 监控架构概览 01 如何监控 Go 应用? 02 Metrics 系统架构演进 03 Why VictoriaMetrics so good? 04 总结与展望 05 监控架构概览 第一部分 监控系统架构概览 -- 数据源 监控系统架构概览 -- -- 告警配置 监控系统架构概览 -- 告警通道 如何监控 Go 应用? 第二部分 基于 Prometheus Go 应用监控接入流程 确定指标 为应用埋点 部署应用 配置服务发现 监控展示 指标类型 ● Go 运行时指标 ○ Goroutine 数量 ● 应用层指标 ○ infra_http_request_total ● 业务指标 ○ 总 Tracking 查询量 ○ Tracking Tracking 创建速率 ○ 某个 ENT 客户的 Tracking 查询失败率 Metrics 系统架构演进 第三部分 2018-2020 2K+ 40K 1Mil+ 2020 年指标数据 业务指标数量 每秒写入数据点 Active Time Series 2018-2020 年架构 2020 年底面临的问题 ● 无法查询超过 30 天的数据 ● 查询慢,平均时间超过 2 分钟0 码力 | 42 页 | 2.32 MB | 1 年前3 1.每秒百万数据点 Go 应用监控系统演进Go 应用监控系统演进 张平 AfterShip 高级 SRE 关于 AfterShip 拥抱云原生和开源系统 目 录 监控架构概览 01 如何监控 Go 应用? 02 Metrics 系统架构演进 03 Why VictoriaMetrics so good? 04 总结与展望 05 监控架构概览 第一部分 监控系统架构概览 -- 数据源 监控系统架构概览 -- -- 告警配置 监控系统架构概览 -- 告警通道 如何监控 Go 应用? 第二部分 基于 Prometheus Go 应用监控接入流程 确定指标 为应用埋点 部署应用 配置服务发现 监控展示 指标类型 ● Go 运行时指标 ○ Goroutine 数量 ● 应用层指标 ○ infra_http_request_total ● 业务指标 ○ 总 Tracking 查询量 ○ Tracking Tracking 创建速率 ○ 某个 ENT 客户的 Tracking 查询失败率 Metrics 系统架构演进 第三部分 2018-2020 2K+ 40K 1Mil+ 2020 年指标数据 业务指标数量 每秒写入数据点 Active Time Series 2018-2020 年架构 2020 年底面临的问题 ● 无法查询超过 30 天的数据 ● 查询慢,平均时间超过 2 分钟0 码力 | 42 页 | 2.32 MB | 1 年前3
 1.2 Go 在分布式系统开发中的应用0 码力 | 20 页 | 131.34 KB | 1 年前3 1.2 Go 在分布式系统开发中的应用0 码力 | 20 页 | 131.34 KB | 1 年前3
 2.2 龚浩华(月牙寂)p2p缓存系统 基于Golang的Aop设计模式LOGO p2p缓存系统 基于Golang的Aop设计模式 龚浩华 QQ 29185807 月牙寂 背景 v Web缓存(类似CDN技术) § 网页、图片 § 普通下载 § 普通视频 v P2P缓存 § 下载(bt等) § 视频(qvod、百度影音等) 背景 v P2P缓存好处 § 一次获取,多次利用 § 减少局域网出网流量 golang 常规分布式的缺点 1、缺乏全局状态知识 分布式系统中的节点只能访问自身的状 态,无法获取到全局的状态 2、缺乏全局时间 分布式系统中的节点无法做到时间的完 全一致性,会导致一些行为的顺序不确定 3、非确定 普通程序输入则得到固定的输出。分布 式系统则存在很多差异。 golang 基于golang的分布式程序(单进程) client数量、存活 自身存在的必要检查:如超时无client连接 P2P缓存框架 4、文件模块 具体文件的存储,另外再加上内存缓存系统 5、client 对应于与客户端的一个连接,通过协议进行 通信。通过任务模块再来进行文件模块的读 写,将数据发送给客户端 6、下载模块 如何识别热点?群体智能0 码力 | 29 页 | 338.20 KB | 1 年前3 2.2 龚浩华(月牙寂)p2p缓存系统 基于Golang的Aop设计模式LOGO p2p缓存系统 基于Golang的Aop设计模式 龚浩华 QQ 29185807 月牙寂 背景 v Web缓存(类似CDN技术) § 网页、图片 § 普通下载 § 普通视频 v P2P缓存 § 下载(bt等) § 视频(qvod、百度影音等) 背景 v P2P缓存好处 § 一次获取,多次利用 § 减少局域网出网流量 golang 常规分布式的缺点 1、缺乏全局状态知识 分布式系统中的节点只能访问自身的状 态,无法获取到全局的状态 2、缺乏全局时间 分布式系统中的节点无法做到时间的完 全一致性,会导致一些行为的顺序不确定 3、非确定 普通程序输入则得到固定的输出。分布 式系统则存在很多差异。 golang 基于golang的分布式程序(单进程) client数量、存活 自身存在的必要检查:如超时无client连接 P2P缓存框架 4、文件模块 具体文件的存储,另外再加上内存缓存系统 5、client 对应于与客户端的一个连接,通过协议进行 通信。通过任务模块再来进行文件模块的读 写,将数据发送给客户端 6、下载模块 如何识别热点?群体智能0 码力 | 29 页 | 338.20 KB | 1 年前3
 Go Web编程Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。 Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感 觉起来比典型的面向对象语言更轻量级。 Go完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。 按照其设计,Go打算为多核机器上系统软件的构造提供一种方法。 Go是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打 开发效率,以及静态类型的安全性。它也打 算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻 量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生 了。 在本章中,我们将讲述Go的安装方法,以及如何配置项目信息。 目录 目录 links links 目录 下一节: Go安装 。这里我们介绍三种最常见的安装方式: Go源码安装:这是一种标准的软件安装方式。对于经常使用Unix类系统的用户,尤其对于开发者来说,从源 码安装是最方便而熟悉的。 Go标准包安装:Go提供了方便的安装包,支持Windows、Linux、Mac等系统。这种方式适合初学者,可根据自 己的系统位数下载好相应的安装包,一路next就可以轻松安装了。 第三方工具安装:目前有很多方便的第三方软件包工具,0 码力 | 295 页 | 5.91 MB | 1 年前3 Go Web编程Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。 Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感 觉起来比典型的面向对象语言更轻量级。 Go完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。 按照其设计,Go打算为多核机器上系统软件的构造提供一种方法。 Go是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打 开发效率,以及静态类型的安全性。它也打 算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻 量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生 了。 在本章中,我们将讲述Go的安装方法,以及如何配置项目信息。 目录 目录 links links 目录 下一节: Go安装 。这里我们介绍三种最常见的安装方式: Go源码安装:这是一种标准的软件安装方式。对于经常使用Unix类系统的用户,尤其对于开发者来说,从源 码安装是最方便而熟悉的。 Go标准包安装:Go提供了方便的安装包,支持Windows、Linux、Mac等系统。这种方式适合初学者,可根据自 己的系统位数下载好相应的安装包,一路next就可以轻松安装了。 第三方工具安装:目前有很多方便的第三方软件包工具,0 码力 | 295 页 | 5.91 MB | 1 年前3
 2.2.3 Go语言的抢占式调度ed57b348723bc473cea0162dad366/ binary/elf101/elf101.pdf 可执⾏⽂件在不同的操作系统上规范不⼀样 Linux Windows MacOS ELF PE Mach-O Entry point 操作系统执⾏可执⾏⽂件的步骤(以 linux 为例): 解析 ELF Header 加载⽂件内容 ⾄内存 从 entry point 开始 G:goroutine,⼀个计算任务。由需要执⾏的代码和其上下⽂组成,上下⽂ 包括:当前代码位置,栈顶、栈底地址,状态等。 M:machine,系统线程,执⾏实体,想要在 CPU 上执⾏代码,必须有线 程,与 C 语⾔中的线程相同,通过系统调⽤ clone 来创建。 P:processor,虚拟处理器,M 必须获得 P 才能执⾏代码,否则必须陷⼊休 眠(后台监控线程除外),你也可以将其理解为⼀种 何时需要抢占 什么时候 我们需要抢占⼀个 正在执⾏(running)的 G 呢? 抢占的触发时机-GC STW gcStart STW preemptall preemptone 抢占的触发时机-栈扫描 markroot scan stack set preempt flag suspendG ⽼版本 新版本 wait for scan complete scanstack resumeG0 码力 | 44 页 | 7.43 MB | 1 年前3 2.2.3 Go语言的抢占式调度ed57b348723bc473cea0162dad366/ binary/elf101/elf101.pdf 可执⾏⽂件在不同的操作系统上规范不⼀样 Linux Windows MacOS ELF PE Mach-O Entry point 操作系统执⾏可执⾏⽂件的步骤(以 linux 为例): 解析 ELF Header 加载⽂件内容 ⾄内存 从 entry point 开始 G:goroutine,⼀个计算任务。由需要执⾏的代码和其上下⽂组成,上下⽂ 包括:当前代码位置,栈顶、栈底地址,状态等。 M:machine,系统线程,执⾏实体,想要在 CPU 上执⾏代码,必须有线 程,与 C 语⾔中的线程相同,通过系统调⽤ clone 来创建。 P:processor,虚拟处理器,M 必须获得 P 才能执⾏代码,否则必须陷⼊休 眠(后台监控线程除外),你也可以将其理解为⼀种 何时需要抢占 什么时候 我们需要抢占⼀个 正在执⾏(running)的 G 呢? 抢占的触发时机-GC STW gcStart STW preemptall preemptone 抢占的触发时机-栈扫描 markroot scan stack set preempt flag suspendG ⽼版本 新版本 wait for scan complete scanstack resumeG0 码力 | 44 页 | 7.43 MB | 1 年前3
 Go性能优化概览-曹春晖36d1b381cda9e7/ prometheus/go_collector.go#L45 基本套路 1. 排除外部问题,例如依赖的上游服务(包括 DB、redis、MQ)延迟 过⾼,在监控系统中查看 2. CPU 占⽤过⾼ -> 看 CPU profile -> 优化占⽤ CPU 较多的部分逻 辑 3. 内存占⽤过⾼ -> 看 prometheus,内存 RSS 是多少,goroutine 么 -> 查死锁、阻塞等问题 -> 个别不在意延迟的选择第三⽅库优 化 压测⼿段 公司内部压测平台 全链路压测 阻塞导致⾼延迟 在后端系统开发中,锁瓶颈是较常⻅的问题,⽐如⽂件锁 阻塞导致⾼延迟 还有⼀些公司的 metrics 系统设计,本机上会有 udp 通信 阻塞导致⾼延迟 锁瓶颈的⼀般优化⼿段: • 缩⼩临界区:只锁必须锁的对象,临界区内尽量不放慢操作,如 syscall 请求锁,⽂ 件锁 -> 多个⽂件各种锁 • 同步改异步:如同步⽇志 -> 异步⽇志,若队列满则丢弃,不阻塞业务逻辑 CPU 使⽤太⾼了-编解码使⽤ CPU 过⾼ 通过更换 json 库,就可以提⾼系统的吞吐量 本质上就是请求的 CPU 使⽤被优化了 我们可以使⽤固定 QPS 压测来验证该结论 https://golearn.coding.net/p/gonggongbanji/files/all/DF460 码力 | 40 页 | 8.69 MB | 1 年前3 Go性能优化概览-曹春晖36d1b381cda9e7/ prometheus/go_collector.go#L45 基本套路 1. 排除外部问题,例如依赖的上游服务(包括 DB、redis、MQ)延迟 过⾼,在监控系统中查看 2. CPU 占⽤过⾼ -> 看 CPU profile -> 优化占⽤ CPU 较多的部分逻 辑 3. 内存占⽤过⾼ -> 看 prometheus,内存 RSS 是多少,goroutine 么 -> 查死锁、阻塞等问题 -> 个别不在意延迟的选择第三⽅库优 化 压测⼿段 公司内部压测平台 全链路压测 阻塞导致⾼延迟 在后端系统开发中,锁瓶颈是较常⻅的问题,⽐如⽂件锁 阻塞导致⾼延迟 还有⼀些公司的 metrics 系统设计,本机上会有 udp 通信 阻塞导致⾼延迟 锁瓶颈的⼀般优化⼿段: • 缩⼩临界区:只锁必须锁的对象,临界区内尽量不放慢操作,如 syscall 请求锁,⽂ 件锁 -> 多个⽂件各种锁 • 同步改异步:如同步⽇志 -> 异步⽇志,若队列满则丢弃,不阻塞业务逻辑 CPU 使⽤太⾼了-编解码使⽤ CPU 过⾼ 通过更换 json 库,就可以提⾼系统的吞吐量 本质上就是请求的 CPU 使⽤被优化了 我们可以使⽤固定 QPS 压测来验证该结论 https://golearn.coding.net/p/gonggongbanji/files/all/DF460 码力 | 40 页 | 8.69 MB | 1 年前3
共 73 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8














