zoukankan      html  css  js  c++  java
  • TDDL当前进展及技术规划

    一、选型背景

    公司营收业绩高速增长,业务快速向前奔跑,对基础技术上线既要超、快、猛,又要保证服务质量,所以前期选型稳妥方案为MySQL router,但他的核心功能上仅支持读写分离、读写库高可用、动态增删DB节点,而读写性能却无法应对每月大幅增长的数据。对业务拆分同时进行分库分表势在必行。基于以上场景需求,由我发起、高层参与和相关人一起讨论决定选型TDDL作为长期演进方案,关于为什么选择TDDL,理由如下:

    • 大厂阿里出品,经过6年长期迭代,在内部有1000+系统验证和运行
    • 功能强大,体系完善,tddl + diamond + otter + Canal组合套件能做到在线数据迁移,拆表扩容
    • 基于agent客户端接入方式,相对proxy模式,业务隔离性较好,性能也更高
    • 当当ShardingJDBC和美团zebra基本都是follow的tddl体系和思想,而且SQL解析模块代码也是从阿里tddl从抽取出来的
    • 容易构建服务治理体系

    TDDL不足:

    • 开源代码无法run起来,有代码,无文档,无法立即run起来,需要自己摸索
    • 目前网上能找到的开源版本中最后一个commit 是2014 Aug. 从14至今, JDK 从6升到了8, 中间涉及到JDBC的变更,以及第三方框架(Spring, Mybaits, CGLib)的变更。我们需要自己去验证并发现14年的版本和今天我们线上的所有数据库涉及到的第三方框架兼容性。
    • 进度无法精准判断,前期花费时间较长,代码模块比较复杂,进度上很难给出精准判断

    二、核心目标

    推进策略,先保证核心功能,再完善扩展功能

    核心功能

    • 动态数据源
    • 读写分离
    • 读写库高可用
    • 分库分表
    • 读库负载均衡
    • 连接池及慢SQL监控

    扩展功能

    • 动态化配置 tddl依赖diamond客户端版本与diamond服务端无法匹配,还需要大量开发工作,后续可以考虑携程配置中心apollo,功能强大,体系完善
    • 拆表扩容
    • 数据迁移(迁记录行、迁表、迁库)

    三、面临挑战

     1.迭代挑战

    • 有代码,无文档,需要自己摸索
    • 前期探索时间较长,后期会加快
    • 当前开源到tddl 5.x版本,从2015年起就没有继续开源维护

    2.接入挑战

    对比router变化,客户端方案无法做到完全平滑迁移,多了一些配置,读写分离配置少,分库分表配置更多

    spring + mybatis + tddl 数据源 + druid

    • 对于读写分离表,只需要基于spring配置文件更改数据源
    • 对于分库分表,基于spring配置文件数据源 + 分库分表规则

    四、业务关注

    • 接入成本,希望能统一做适配层,能在router与TDDL、直连DB间自由切换
    • 主从库高可用failover
    • 容灾、容错、SLA
    • 包依赖冲突与管理
    • 运营生态(完善)

    五、当前进展

    1.编译环境升级,jdk从1.6升级到1.8,整合代码,处理错误和补缺接口

    2.进入test case阶段,正在做单表、分表、分库分表crud测试

    以上为2017年12月29日状态

    六、技术规划

    1.TDDL阶段里程碑

    12月底       搭建一个本地可初步运行的工程demo,单表curd test case,验证后续演进可行性和风险    已经完成

    18年Q1 

    1月 搭建TDDL自测环境,test case,SQL支持度,功能测试,性能测试。 

    2月 搭建TDDL测试环境,引入一个业务项目,试运行。

    3月 逐步推广TDDL,对接配置中心

    团队人数安排:2018年1月15日前暂定2人,以后工作更明确再做分解

    2.团队规划

    负责大量测试验证工作,例如 功能测试、性能测试、SQL支持度测试、压力测试       1人负责

    代码优化,核心流程梳理,文档体系建设                                                                     1人负责

    运维体系建设,动态配置对接开发,实现在线运维                                                       1人负责

    客户端封装,为直连、router、tddl做适配,做调研,写代码                                        1人负责

    监控系统完善 对接cat和连接池监控                                                                              1人负责      

    容灾、容错、SLA、主从库高可用failover                                                                     1人负责

    以上工作需求至少4人完成

     

    引用博客地址为:https://www.cnblogs.com/lizherui/p/12769889.html

  • 相关阅读:
    Extjs4 关于设置form中所有子控件为readOnly属性的解决方案
    Chrome调试(转)
    ExtJS4 动态加载
    CSS display和visibility的用法和区别
    利用Java调用OpenCV进行人脸识别
    Mac上安装openCV(Java版本)
    关于mysql的Fetch Time 和 Duration Time
    数据库相关中间件介绍
    JVM和java应用服务器调优
    探索 ConcurrentHashMap 高并发性的实现机制
  • 原文地址:https://www.cnblogs.com/lizherui/p/12769889.html
Copyright © 2011-2022 走看看