- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
微博跨语言服务化 周晶 PHPCON2018
为了获取最佳收益我们往往会在不同的场景应用最合适的技术,这很自然造成公司技术栈的多样性,在微博整体服务化进程中跨语言间的服务化是我们绕不开的问题,PHP、Java 作为微博体系两个份额最大的技术栈我们是如何实现跨语言服务化调用的呢?结合目前最热门的 Service Mesh 理念我们的 WeiboMesh 又是如何落地的?本次分享我将从这两个方面同大家一起探讨。
展开查看详情
1 .微博跨语言服务化与 WeiboMesh — 微博研发中心 / 周晶
2 .内容提要 ▷ 为什么要做跨语言服务化 ▷ PHP 跨语言服务化所面临的挑战 ▷ WeiboMesh 与 泛服务化 附能 PHP 微服务
3 .为什么要做跨语言服务化
4 .为什么要做跨语言服务化 ▷ 痛点 ▷ 趋势
5 .痛点 需求·性能·成本
6 .平台体系 चԭ OpenDCP ጱ୨ԯᦇᓒ API+JAR 2009 2013 2015 2016 ཛྷࣘ۸֛ܔ๐ۓ RPC Ⴐݳԯ चԭ Motan RPC ጱங๐ۓ
7 .平台体系 服务注ٙ、发ሿ JAVA-Server ᨮ均衡、降ᕆ、限流 秒ᕆ实ፊ控 Registry 自动化容量ᦧ估 智能୨性᧣度 自动ಘᖽ容 JAVA-Client ᧗求动ா路由 OpenDCP
8 . C OR Go PHP … 微博广告 ᕁ包 微博ᦾ᷌ MAPI 微博搜索 ᅾ门微博 微博主站 … Restful API 平台体系 Java RPC
9 .۠ 微服务·容器化·云化·标准化·工程化 更快的交付 更低的成本 服务与实现方式不应该有强耦合关系
10 .PHP 跨语言服务化所面临的挑战
11 .跨语言服务化核心问题 交互(言中立、多言): HTTP / GRPC(PB) / … 治理(灵活可ಘ展): 服务注ٙ与发ሿ / ᨮ均衡 / …
12 .挑战一:迁移成本 与 性能 Server GRPC y tr is eg R Registry Su bs cr ib No tif e Client y Motan-PHP-Client
13 .挑战二:服务治理与 RPC Server LVS、HA、Nginx PHP-FPM Server1 Server2 Cluster HA+LB …… GRPC Call ❌ PHP-GRPC Registry PHP Server WorkingNode GRPC 实ሿ成本 PHP Deamon Nginx Timer Registry 治理能力 o ver Disc Global Data
14 .经验总结 PHP 服务化的ሿᇫ: LN(OR)MP 架构 / 交付效率 / 迁移成本 / … PHP 言本身的局限性: 性能 / 常Ḧ能力 / … 灵活可ಘ展的服务治理: 非中心化 / 非重 Client / …
15 .我们需要适合自己的跨语言解决方案 交互 · 治理
16 .跨语言服务化方式对比 HTTP դቘ RPC ཛྷࣘ Agent դቘ Ꮈݎ౮ ֗ ṛ Ӿ ᖌಷ౮ ֗ ṛ Ӿ ֵአ౮ ֗ ֗ Ӿ လቘᚆێ Ӿ ṛ ṛ ಘᚆێ ֗ Ӿ ṛ
17 .交互(语言中立、多语言)
18 .协议 MotanHeader Meta Data Size Data Req Body Size Data Header Payload
19 .序列化 基础类型 复合类型
20 .治理(灵活可扩展)
21 . PHP WM - proto /snapshot/ 灵活可ಘ展的服务治理 Go Agent JAVA-Server Registry JAVA-Client
22 .Motan-PHP 跨语言调用 if ($connection->buildConnection($agent_addr)){ $this->_url_obj ->setEndpoint(Constants::ENDPOINT_AGENT); $this->_endpoint = new Agent($this->_url_obj); } else { $this->_endpoint = new Cluster($this->_url_obj); }
23 .Motan-PHP Cluster 直连策略 public function call() { return $this->_ha_strategy->call($this->_load_balance); } AGENT_RUN_PATH . "/snapshot/" . $this->_group . '_' . $this->_service_str; Endpointer ಘכବ
24 . PHP PHP 做 Server CGI、HTTP Go Agent JAVA-Server Registry JAVA-Client
25 .Motan-Go Provider 与 PHP extFactory.RegistExtProvider(CGI, func(url *motan.URL) motan.Provider { return &CgiProvider{url: url} }) extFactory.RegistExtProvider(HTTP, func(url *motan.URL) motan.Provider { return &HTTPProvider{url: url} }) [MOTAN_M_p] => com.weibo.motan.HelloWorldService MOTAN_* [MOTAN_SERIALIZATION] => simple [MOTAN_M_g] => motan-server-mesh-example [MOTAN_M_m] => Hello [MOTAN_M_pp] => motan2
26 . OR Go PHP CGI、HTTP Go Agent JAVA-Server Registry JAVA-Client
27 .
28 .WeiboMesh 与 泛服务化 附能 PHP 微服务
29 .传统 PHP 服务化演进 चԭ Vanilla ጱAPI Gateway API+COMMON … 2012 2015 2016 …… ཛྷࣘ۸๐ۓ PHP-BE Vasina चԭ PHP-BE ጱங๐ۓೆړ