博客
关于我
携程的 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/

    你可能感兴趣的文章
    Python在def函数中使用for循环
    查看>>
    Python在Conda环境中,但在Windows虚拟环境中没有激活
    查看>>
    python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
    查看>>
    python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
    查看>>
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    Python和黑客技术的渊源
    查看>>
    Python和RF编写接口自动化
    查看>>
    Python和RF编写web自动化
    查看>>
    python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
    查看>>
    python和java哪个更值得学——来自知乎高赞回答
    查看>>
    python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
    查看>>
    python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
    查看>>
    Python命名中尾随下划线有什么好处?
    查看>>
    Python启动脚本
    查看>>
    Python听写汇总结果
    查看>>