博客
关于我
携程的 Dubbo 之路,值得学习!
阅读量:434 次
发布时间:2019-03-06

本文共 1253 字,大约阅读时间需要 4 分钟。

携程引入Dubbo之路:从尝试到落地再到功能升级

作为一名技术专家,我亲眼见证了携程从引入Dubbo到CDubbo定制化发展的整个过程。这篇文章将从缘起到落地再到功能升级,为大家详细解析这一蜕变历程。

一、引入Dubbo的缘起

2013年底,携程内部主要采用基于HTTP协议的SOA微服务框架。这款自家研发的框架在六年间基本没有重构,尽管初有扩展性不足,高并发场景下连接和线程资源紧张。这些问题促使我们寻找更优质的解决方案。

Dubbo作为一个知名的开源RPC框架,以其高性能和优秀架构设计脱颖而出。2017年下半年阿里宣布重启维护,正值我们寻找替代方案之际。经过慎重考虑,携程团队决定将Dubbo引入。

二、Dubbo落地之第一步

在企业级应用落地,服务治理和监控是两大关键环节。

服务治理方面,我们现有SOA框架已具备完整服务注册中心和治理系统。参考Netflix的Eureka开发的Artemis注册中心采用去中心化对等集群机制,服务实例与集群保持长连接,确保数据一致性。客户端通过长连接接收服务实例列表。

服务数据模型直接复用现有SOA框架,Service ID唯一标识每个服务实例。为了与Dubbo兼容,我们在配置中增加serviceId参数,实现服务治理的无缝对接。

服务监控方面,我们采取双层监控策略:统计数据监控和调用链监控。前者以Hessian为序列化工具,汇总调用量、响应时间等数据,后者采用美团开源的CAT平台,记录每个请求的全链路信息。

三、CDubbo功能升级

基于上述基础,我们对CDubbo进行了多维度升级。

  • Callback增强
  • 传统Callback模式存在唯一实例限制。我们引入Stream功能,允许每个Callback关联唯一的StreamContext。服务端通过匿名类传递请求上下文,解决了Callback场景下的上下文获取问题。

    1. 序列化扩展
    2. 为了兼容携程内部使用的Google Protocol Buffer,我们增加PB序列化支持。扩展序列化器接口,允许用户自定义数据压缩功能,同时确保所有Java数据类型可兼容。

      1. 请求熔断
      2. 集成Netflix Hystrix进行请求熔断控制,防止雪崩效应。服务端和客户端均配置熔断机制,确保单个服务故障不会影响整体系统。

        1. 服务测试工具
        2. 开发服务测试平台,支持无代码测试请求构造和发送。通过泛化调用和Filter扩展,实现自动化测试和响应数据查看。

          五、功能拓展与未来规划

          除了上述基础功能,CDubbo还进行了多项扩展:

        3. 服务测试工具
        4. 提供一站式测试解决方案,支持JSON请求构造和自动化测试。扩展泛化调用功能,支持多种序列化格式互转。

          1. 服务网关
          2. 开发专用堡垒测试网关,解决生产环境下的服务测试问题。支持Dubbo callback请求转发,确保测试请求准确路由。

            未来CDubbo将继续扩展功能,完善服务治理、请求控制等方面。我们也将贡献更多开源成果,为Dubbo社区发展贡献力量。

            董艺荃

            技术专家 | 携程框架架构研发部

    转载地址:http://rykyz.baihongyu.com/

    你可能感兴趣的文章
    Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
    查看>>
    Oracle11G基本操作
    查看>>
    Oracle11g服务详细介绍及哪些服务是必须开启的?
    查看>>
    Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统
    查看>>
    oracle12安装软件后安装数据库,然后需要自己配置监听
    查看>>
    Oracle——08PL/SQL简介,基本程序结构和语句
    查看>>
    Oracle——distinct的用法
    查看>>
    Oracle、MySQL、SQL Server架构大对比
    查看>>
    oracle下的OVER(PARTITION BY)函数介绍
    查看>>
    Oracle中DATE数据相减问题
    查看>>
    Oracle中merge into的使用
    查看>>
    oracle中sql查询上月、本月、上周、本周、昨天、今天的数据!
    查看>>
    oracle中sql的case语句运用--根据不同条件去排序!
    查看>>
    Oracle中Transate函数的使用
    查看>>
    oracle中关于日期问题的汇总!
    查看>>
    Oracle中常用的语句
    查看>>
    Oracle中序列的操作以及使用前对序列的初始化
    查看>>
    oracle中新建用户和赋予权限
    查看>>
    Oracle中的NVL,NVL2,NULLIF以及COALESCE函数使用
    查看>>
    Oracle中的rownum 和rowid的用法和区别
    查看>>