高可用与一致性:构建强一致性分布式数据库 TiDB-沈泰宁
构建强⼀一致性分布式数据库 TiDB 沈泰宁 R & D Engineer @ PingCAP ⾃自我介绍 ⾃自我介绍 • 沈泰宁 • R&D Engineer @ PingCAP • Maintainer • rust-prometheus • grpc-rs • … ⽬目录 • What is TiDB? • How to test? What is TiDB? Single0 码力 | 45 页 | 4.63 MB | 1 年前3微服务和Service Mesh 在多个行业落地实践
设计要点四:服务拆分与服务发现 www.163yun.com 设计要点亓:数据库横向扩展 www.163yun.com 设计要点六:缓存的设计 APP缓存 CDN 接入层 静态资源 动态资源静态化 应用本地缓存 分布式缓存 数据库为中心 缓存为中心 www.163yun.com 设计要点七:消息队列与异步化 设计要点七:消息队列与异步化 www.163yun.com 设计要点八:熔断,限流,降级 www.163yun.com 设计要点九:配置中心 www.163yun.com 设计要点十:日志中心 www.163yun.com 设计要点十一:全链路监控 www.163yun.com 设计要点十二:全链路压测 www.163yun.com 微服务平台总览 容器平台 (多集群基础设施) 限流 熔断 降级 容错 路由 负载 均衡 参数 分流 拓扑 依赖 配置 中心 服务 监控 服务 告警 认证 鉴权 统计 概览 知识 库 APM (应用运行期监控) 运行时 拓扑 性能 监控 服务 筛选 调用 链 调用 栈 JVM 监控 数据库 监控 性能 告警 自定义 数据 服务 告警 监控 大屏 账户 审计0 码力 | 39 页 | 3.06 MB | 1 年前3领域驱动设计&中台/演进式架构的平台化落地
module database API layer client requests client requests client requests 向以“领域”为中⼼心的架构迁移 演进数据库 (like code) — Tested — Versioned — Incremental scripting all db changes incrementally db 服务 部署 运⾏行行架构治理理 故障 分析 定义架构 约束条件 微服务架构设计 服务地图 设计 API设计 部署架构设计 微服务⼯工程创建 开发 框架 架构 ⻛风格 资源 配置 … 架构演进 服务 关系 分析 代码 质量量 分析 数据 库分 析 领域 模型 分析 运⾏行行资 源管理理 PaaS、 容器云资 源管理理 公共 部分 产品、⼈人 员维护 推荐部署架构(远期规划) 微服务开发框架定制 代码架构⻛风格选择 资源配置 数据库版本管理理 是否⾃自动⽣生成API/ Dockerfile/流⽔水线 ⽣生成 代码 到GIT 仓库 架构分析- 从契约反向识别实现与模型差异 架构分析- 架构Fitness Function检查 代码质量量分析- 配置Sonar地址、展⽰示分析结果 数据结构分析- 测试环境的反向⼯工程可视化0 码力 | 42 页 | 2.95 MB | 1 年前3声明式自愈系统——高可用分布式系统的设计之道-王昕
Ø 设计和验证高可用分布式系统的案例分享 Ø 高可用系统的最佳实践总结 依据声明式自愈的理念设计系统 有一个统一的状 态持久化接口, 所有有状态模块 通过统一的接口 对应统一的对象 模型 配置模块对象只 需要包括 Desired State 每个领域的控 制器模块的逻 辑保证自己领 域独立自愈的 能力 改变状态的操作 必须是幂等的声 明式操作,没有 新声明时各模块 按照之前的声明 Networking Data 启动异常 进程被杀 服务器假死 断电 启动异常 超卖 进程死锁 负载均衡失效 业务线程池满 监控错误 流控不合理 心跳异常 缓存热点 缓存限流 数据库热点 数据库宕机 数据库延迟 CPU 抢占 内存抢占 内存错乱 上下文切换 磁盘满 磁盘坏 网络抖动 网卡慢 断网 DNS 故障 系统单点 异步阻塞 依赖超时 内存溢出 不可读写 目录 Ø 分布式系统面临的高可用问题 验而且幂等,没有缓存情况下系统仍可服务 Ø 错误回复缓存,过期时间不能太长,而且有清晰的 修复建议 Ø 数据库更新与缓存失效的策略 最佳实践分享 有关配置文件 Ø 集群使用统一的配置来源 Ø 定义正常的默认配置,满足读取不到配置的正 常运行 Ø 支持可扩展的配置命令格式 Ø 尽量支持更改配置不需要重启服务 Ø 注意配置项之间的关联性 欢迎与我交流 王昕个人微信 欢迎与我交流 王昕个人微信0 码力 | 44 页 | 2.47 MB | 1 年前3QCon北京2018-业务高速发展下的互联网金融系统架构演变-张现双+
2pizza团队,系统单体制约 商城 核心服务 业务 网贷 保险 基金 商城 财富圈 健康财富 加密 验签 拦截 校验 安全 性能 并发 幂等 交易 缓存 基础服务 消息 监控 配置 报警 MIS OpenAPI 微信 财富圈 移动后台 商城MIS WAP … … Android/ios/h5/php/openApi 积分系统 基础服务 优惠券 宜人币 基金服务 标签 用户 管理平台 产品 理财单 渠道 版本 5G 措施:剥组件,拆单体,合冗余 移动后台打散 轻业务上浮 重业务下沉 API接入 指标监控 配置管理 业务前置配置 日志 配置系统 安全控制 拦截、校验 接口签名 加解密 防刷 攻击类 接口缓存 接口重写 热点活动支持 热点功能前置 接口版本控制 业务前置控制 Ng+ LUA 流量调度 措施:剥组件[深度定制网关] API接入 指标监控 配置管理 业务前置配置 日志 配置系统 安全控制 拦截、校验 接口签名 加解密 防刷 攻击类 接口缓存 接口重写 热点活动支持 热点功能前置 接口版本控制 业务前置控制 Ng+ LUA 流量调度 降级 限流 灰度 接口分发 运营活动动态配置,接口重新编排 热点功能前置,网关分发许可限流,保护底层0 码力 | 42 页 | 19.96 MB | 1 年前3联想-贺钢架构工作在国际化项目中的应用实例
来自安全部门的问题 数据中心最终方案 用户访问量对应的web架构 用户访问量 服务器架构 百万以下 单台或多台的简单架构,可以简单通过升级服务器 配置支持更多用户 百万到千万 增加Nginx(反向代理)或DNS负载均衡,redis内存 cache,数据库(Mysql)多台(数据在一个数据中心) 千万到亿 增加Web服务器内存缓存,集群,IP负载均衡,基于内 容请求分发,Mysql优化(如减少写,2/8原则) 2/8原则),数据在 一个数据中心 亿以上 增加异地部署(建议核心点集中,其它节点分散开),较 难分割或核心数据在同一数据中心,其它分散到不 同的节点 对架构设计的影响II -- 数据库表设计 数据库表早期设计 ID ... Type Name Size Create Date … 1 … 1 1.doc 432437 2014-05-04 … 2 … 1 Test.txt 2849 2014-02-19 -- Threat Model 端到端的安全设计I 端到端的安全设计II 端到端的安全设计III 端到端的安全设计IV 端到端的安全设计 • 只Admin可以写(避免提升权限) • 验证配置文件(如xml)的签名 • 专业工具扫描 总结 • 国际化项目的特点导致架构工作的不同 • 一些应用实例 一句话分享 • 不要用战术上的勤奋来弥补战略上的懒惰0 码力 | 53 页 | 2.36 MB | 1 年前3领域驱动设计&中台/可视化的遗留系统微服务改造
明确服务包含的数据表 可视化的拆解遗留留系统 微服务架构、绞杀模式、代码依赖分析、数据库依赖分析、 遗留留系统拆解评分表、降⻰龙⼋八步 庖丁解⽜牛拆解的最⾼高境界 了了解⽜牛的⽣生理理构造 避开筋腱⻣骨节交错的组织 从⻣骨节的缝隙下⼿手 ⼗十九年年⼑刀依然锋利利 再看⼀一眼微服务架构 我们要做应⽤用代码拆分 我们要做数据库拆分 绞杀者模式 ‣“绞杀者模式”在既有系统资产的基础上实现数字IT 与Intellij或Eclipse相 结合,实时查看依赖, 指导拆解过程 已可视化 数据库依赖模式 模块A Data Mapper /ORM 相关联但不不属于 模块A的表 模块A Data Mapper /ORM 属于模块A的表 以模块(java包)为基本单位,从数据库依赖的⻆角度看,有两种模式: 属于模块A 的表 扫描数据库依赖 UserMapper.java UserMapper JAVA定义 XML实现 扫描数据库依赖 服务 名 mapp er名 ⽅方法 名 正确 依赖 表名 错误 依赖 表名 ⽤用户服 务 com.xx x.User Mappe r getUse rById USER N/A ⽤用户服 务 com.xx x.User Mappe r getUse rProdu cts User Product 数据库依赖统计表 使⽤用⼯工具0 码力 | 54 页 | 3.85 MB | 1 年前3付钱拉金融云系统架构演进和最佳实践
Oracle Nginx keepalived 数据库双机 网络分发层 业务处理 渠道适配器 交易预处理 交易预检查 交易风控 交易路由 通知 响应 查询 通道 交易拆分 业务2.0痛点 BUSINESS 2.0 PAIN POINTS 业务野蛮发展 交易量高速增加 并发请求增加 交易响应速度过慢 数据库单表 数据量剧增 模块耦合度高 开发效率低下 … 线上环境突发事故,第一时间如何决策减少事故影响范围? 开发人员排查问题速度过慢? 随着业务的增长,问题越来越多,第一优先级需要解决什么? 系统突然CPU、内存利用率暴增,如何定位代码? 数据库连接数被耗尽,怎么办? 各种OOM如何预防? 随着系统交易量的增加,高可用系统的设计点很多,如何快速抓住建设要点? 有哪些困惑 WHAT IS THE CONFUSION 需求设计阶段- 首次拦截 APP3 APP1 APP2 APP3 APP1 APP2 APP3 DB 快速响应故障 QUICK RESPONSE FAILURE DB 我们解决了以下系统自身问题 线程数 数据库连接 数- mysql,redis 内存 慢SQL 最后的问题是什么? Java系统常见问题 JAVA SYSTEM FAQ CPU DO NOT FORGET THE BEGINNING0 码力 | 35 页 | 6.05 MB | 1 年前3刘道平-从0到1,移动政务应用小程序系统架构演化
、一致的key-value存储,主要用途是共享配置和服务发现。Etcd已经在很多分布式系统中得 到广泛的使用。Etcd采用raft协议,来保证一致性。 2.后台服务采用Go开发,围绕业务功能需求,构建后台服务模块 包括个人中心、服务、待办服务、证照服务、公共服务、外部能力、业务办理服务和运营管理服务模块 12、系统部署架构反复评审论证 一、部署架构 1、政务云电子政务外网 :数据库、应用服务 2、政务云互联网区:静态资源、网关 13、安全渗透测试、运维监控 -- 确保系统稳定 一、业务应用上线前必须经过安全渗透测试。 1、在测试环境中扫描出:越权查询、SQL注入、明文传输等,要求整改 2、正式环境检查: 操作系统、数据库、中间件漏洞,建议打补丁 二、运维监控每日 1.采用ELK收集系统日志、监控异常信息 2. 对各业务系统API接口进行状态监控,每日输出报告 14、系统上线、系统截图 粤省事小程序码 目录 TAPD是一个SAAS化的敏捷管理工具,本项目、及合作商项目的开发管理, 均使用TAPD( www.tapd.cn) 2.使用功能包括:需求管理、文档管理、缺陷管理、Wiki、Gitlab源码、企业微信集成等 3.配置了自定义的发布流程,每次版本发布都走TAPD的发布评审流程 22、对小程序技术架构演进的思考 1、小程序将无处不在,手机、车载、PC、带屏设备 2、小程序、APP、公众号的无缝集成 3、弱中心化、到强中心化0 码力 | 35 页 | 15.60 MB | 1 年前3大规模分布式系统架构下调测能力构建之道
无需修改应用代码,单元测试代码中也无需添加任何的mock语句。 服务 调用 Invoker … Remote Call 负载均衡 策略 Runtime Mock数据文件 远程服务 Mock配置 开关/策略… 路由 策略 … Mock过滤器 启 动 加 载 服务 调用 脚本引擎 Mock数据规范 格式规范: 1.静态匹配 2.动态匹配 3.多版本支持(服务版本) 管理规范: 线上数据 抓取过滤器 FilterN 抓取配置: 是否开启 抓取时长 抓取数量 落 盘 … … 导出 Mock文件A Mock文件B Mock文件C 应用服务直连调测 服务容器(Provider) 调用者 服务容器 提供者A 服务容器 服务注册中心 服务列表 …… 无需注册中心 不需要服务消费者注册,直接通过本地配置文件指定的IP地址来绕过“服务路由”及“负载均衡”机制。 服务提供者不能采用token验证模式 基于包名过滤服务 团队往往开发某类业务服务,这类服务一般都具有相同的包名,因此,可以通过配置包名和服务IP的映射关系, 让服务框架自动将一批服务和特定的IP关联到一起。 直连调测机制 提供者B 服务容器 提供者B 服务容器 本地配置文件 com.company.modelA.* 192.168.1.22 com.company.modelB.*0 码力 | 19 页 | 2.74 MB | 1 年前3
共 28 条
- 1
- 2
- 3