从 0 开始学微服务
胡忠想
微博技术专家
64643 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 43 讲
开篇词 (1讲)
结束语 (1讲)
从 0 开始学微服务
15
15
1.0x
00:00/00:00
登录|注册

35 | 微博Service Mesh实践之路(上)

PHP和PHP语言
PHP和Java语言
Java与Java语言
Java语言开发
诞生于2013年
支持不同语言应用相互调用
Agent代理与Service Mesh
架构演进
业务与框架功能解耦
Agent方案改造
代理实现服务框架功能
PHP语言特性
不支持PHP作为Server
PHP对PB的兼容性
跨语言通信协议
复杂的协议转换
PHP客户端服务发现
Motan框架扩展
混合云部署难
全链路扩容难
中间链路损耗大
PHP业务增加
Motan
业务稳定性优先
定制化
对云原生应用友好
设计理念新
思考题
总结
Service Mesh
代理方案
gRPC尝试
Yar协议初步尝试
HTTP调用链路问题
跨语言服务调用需求
微服务架构
Istio
微博Service Mesh实践之路

该思维导图由 AI 生成,仅供参考

专栏上一期我们聊了 Service Mesh 的代表作 Istio,由于 Istio 的设计理念非常新,并且它诞生在微服务容器化和 Kubernetes 云平台火爆之后,所以从设计和实现上,Istio 都天生对云原生应用更友好。
但是现实是不是也是那么美好呢?对于一个已经上线运行多年的业务系统来说,要想从经典的微服务架构走上 Istio 这条看似完美的道路并不容易,各种内部基础设施的定制化以及业务稳定性优先准则等因素,都注定了大多数公司要走出一条自己的 Service Mesh 实践之路。今天我就来带你回顾下微博是如何一步步走向 Service Mesh 的。

跨语言服务调用的需求

我在前面讲过,微博的服务化框架采用的是自研的 Motan,Motan 诞生于 2013 年,出于微博平台业务单体化架构拆分为微服务改造的需求,在结合当时的开源服务化框架和自身实际的需求,选择了采用自研的方式。而且由于微博平台的业务采用的是 Java 语言开发,所以 Motan 早期只支持 Java 语言。后期随着微博业务的高速发展,越来越多的 PHP 业务开始登上舞台,于是在微博的流量体系中,主要是三股服务之间的相互调用:一个是 Java 与 Java 语言,一个是 PHP 和 Java 语言,一个是 PHP 和 PHP 语言。Java 应用之间的调用采用的是 Motan 协议,而 Java 应用与 PHP、PHP 与 PHP 应用之间采用的都是 HTTP 协议。我回忆了一下当时一次 PHP 与 Java 之间的 HTTP 调用过程,大致需要经过 DNS 解析、四层 LVS 负载均衡、七层 Nginx 负载均衡,最后才能调用 Java 应用本身。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

微博在实践Service Mesh的过程中面临了跨语言服务调用的挑战。由于业务系统已上线多年,采用的是自研的Motan框架,而随着业务发展,PHP应用的增加导致了跨语言调用的需求。初期尝试使用Yar协议扩展Motan框架,但存在协议转换和依赖Nginx的问题。随后考虑集成gRPC,但发现其对PHP的兼容性不佳。最终,他们通过引入代理Agent来解决PHP语言的服务框架功能实现问题。这一实践过程展示了微博在面对复杂业务场景下,如何寻找适合的跨语言通信协议,并通过代理实现服务框架功能,为读者呈现了微博在Service Mesh实践中的技术探索与解决方案。 微博在实践Service Mesh的过程中,通过引入代理Agent解决了跨语言服务调用的挑战。由于业务系统采用的是自研的Motan框架,随着业务发展,PHP应用的增加导致了跨语言调用的需求。初期尝试使用Yar协议扩展Motan框架,但存在协议转换和依赖Nginx的问题。随后考虑集成gRPC,但发现其对PHP的兼容性不佳。最终,通过引入代理Agent来解决PHP语言的服务框架功能实现问题。这一实践过程展示了微博在面对复杂业务场景下,如何寻找适合的跨语言通信协议,并通过代理实现服务框架功能,为读者呈现了微博在Service Mesh实践中的技术探索与解决方案。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学微服务》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • 无心人偶
    是如何降低链路损耗?

    作者回复: 链路损耗必然的,可以在连接池和长链接上做做文章

    2018-12-12
    5
  • 小菜鸡
    周晶有个微课专门讲微博的Mesh,他是你同事吧?

    作者回复: 是的

    2018-11-26
    2
  • 拉欧
    不同语言之间调用最通用的方式是http,所以需要协议转换,把原来的rpc调用转换成http调用,然后再根据服务发现和负载均衡策略,获取相应的IP和端口

    作者回复: 理解的很多

    2018-11-11
    2
  • lpf32
    回答 作为客户端,服务端需要分别把request,response转成motan协议,发送给本地motan agent

    作者回复: 是的

    2018-11-13
    1
  • 文敦复
    请问老师,Motan数据序列化和解析比GRPC快很多吗?用的是什么序列化方式?

    作者回复: motan跨语言用的是自定义的simple系列化,文中有链接可以详细了解,没有使用grpc是因为php解析大数据量的pb结构时性能有问题

    2018-11-13
    1
  • Wipeher
    motan也是应用层协议吧?那么HTTP协议带来的第一个问题:中间链路损耗大,无论是否使用agent,也必然还是存在的么?

    作者回复: 一般http协议还需要部署四七层,中间链路需要经过网络,所以会带来损耗

    2020-04-04
  • 任鑫
    Istio背靠的Google在微服务云原生方面起步早、体量大,远非微博可比。
    2020-06-30
    1
  • 田小麦
    一门好的课程能引导出,技术演进过程,能很好的深入学习,并产生兴趣!!!
    2022-10-14归属地:北京
  • 🤔
    motan-go代理是go语言写的吗
    2022-04-28
  • Geek_805d64
    老师,这个dns解析是内网解析还是外网,php发请用给java需要出去转一圈回来微博的机房吗?
    2021-06-23
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部