Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Thrift下的Node.js跨语言异构.pdf
Search
代码之力
December 05, 2016
Programming
0
500
Thrift下的Node.js跨语言异构.pdf
来自UC团队的刘欣
代码之力
December 05, 2016
Tweet
Share
More Decks by 代码之力
See All by 代码之力
兔基-多通证的自治贴吧
shiningray
1
280
Node.js 服务前端数据接口的演进
shiningray
0
420
Nodejs直出套路
shiningray
2
450
ActionCable和实时交互
shiningray
0
640
Git, Code Review & Continous Integration
shiningray
0
200
Fiber and em-synchrony
shiningray
2
360
屌丝程序员如何打造日PV百万的网站架构.pdf
shiningray
68
26k
Other Decks in Programming
See All in Programming
CDK引数設計道場100本ノック
badmintoncryer
2
360
The Modern View Layer Rails Deserves: A Vision For 2025 And Beyond @ RailsConf 2025, Philadelphia, PA
marcoroth
2
670
Quand Symfony, ApiPlatform, OpenAI et LangChain s'allient pour exploiter vos PDF : de la théorie à la production…
ahmedbhs123
0
210
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
0
180
状態遷移図を書こう / Sequence Chart vs State Diagram
orgachem
PRO
2
170
AI コーディングエージェントの時代へ:JetBrains が描く開発の未来
masaruhr
1
200
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
330
GPUを計算資源として使おう!
primenumber
1
200
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
710
なぜ「共通化」を考え、失敗を繰り返すのか
rinchoku
1
670
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
260
システム成長を止めない!本番無停止テーブル移行の全貌
sakawe_ee
1
220
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
43
7.6k
Side Projects
sachag
455
42k
The Language of Interfaces
destraynor
158
25k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
How to Think Like a Performance Engineer
csswizardry
25
1.7k
Fireside Chat
paigeccino
37
3.5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
Music & Morning Musume
bryan
46
6.7k
Transcript
Thrift下的Node.js跨语⾔言异构 来⾃自前端的thrift实践 @刘欣 UC浏览器器内核&中间件团队 * 前端⼯工程师
uc www.uc.cn 2 分享内容 1 2 3 4 5 6
1 2 3 4 5 6 团队/技术背景介绍 为什什么是thrift? thrift框架 相关介绍 成果介绍 —hydra 转码开放平台 live code 问答环节
ok… UC中间件是做什什么的 … 全后端团队 转码定制 压缩省流 ⾼高并发 ⾼高可⽤用 运⾏行行在服务器器端 的mozilla内核
历史 悠久
4 中间件架构图 组件繁多 云端浏览器器内核 各类缓存交错 ⽹网络拓拓扑复杂
5 如何突围? ⾯面对现状,我们如何改变? 业界现状 云端加速已经逐渐失去存在 的⼟土壤,市场和⽤用户的需求 从追求极致速度,变为追求 极致的阅读体验 纯后端体系 中间件从基因上来说,是⼀一
个纯后端的产品,缺乏良好 的对外接⼊入体系,尤其是缺 乏标准可开放的接⼝口 前端应⽤用如何融⼊入 历史悠久的项⽬目,如何快速 让前端业务接⼊入? 进⽽而将中 间件服务器器端变为⼀一个对外 提供数据能⼒力力的中台产品? 技术选型 原有系统接⼝口,函数可复⽤用 保持⾼高可⽤用,⽀支持⾼高并发 标准⽹网络协议 尽可能的解耦
6 为什什么是它 ? Thirft
7 Thrift 背景 2007 / Facebook于2007年年开发 2008 / Apache 2008年年进⼊入Apache开源项⽬目
Now.. ⼴广泛运⽤用于不不同语⾔言之间系 统的异构,C++,python, java使⽤用最多 2014 / nodejs 2014年年 官⽅方开始⽀支持nodejs
8 Thrift的使⽤用场景 什什么场合下使⽤用? ⼤大型项⽬目下,极有可能调⽤用跨语⾔言服务, 跨团队,甚⾄至是外部企业合作,尤其明 显 跨语⾔言服务 数据采⽤用⼆二进制格式传输,相对 XML 和
JSON 体积更更⼩小,对于 ⾼高并发、⼤大数据量量环境更更有优势 ⾼高并发 代码⾃自动⽣生成,在熟悉Thrift 后,开发速度有保障 快速开发
9 Thrift的实现原理理 它的架构如何?⼜又是如何⼯工作的? 图中⻩黄⾊色部分是⽤用户实现的业务逻辑 褐⾊色部分是根据 Thrift 定义的服务接⼝口描 述⽂文件⽣生成的客户端和服务器器端代码框架 红⾊色部分是根据 Thrift
⽂文件⽣生成代码实现 数据的读写操作。 红⾊色部分以下是 Thrift 的传输体系、协议 以及底层 I/O 通信,使⽤用 Thrift 可以很⽅方 便便的定义⼀一个服务并且选择不不同的传输协 议和传输层⽽而不不⽤用重新⽣生成代码。
Rpc的优势 http restful也可以,为什什么要选择Rpc? 01 ⽀支持多接⼝口 有较多接⼝口需要对接 系统的选择 02 部署灵活 03
⻓长连接 win RPC:远程过程调⽤用。RPC的核⼼心并不不在于使⽤用什什么协议。RPC 的⽬目的是让你在本地调⽤用远程的⽅方法,⽽而对你来说这个调⽤用是 透明的,你并不不知道这个调⽤用的⽅方法是部署哪⾥里里。通过RPC能 解耦服务,这才是使⽤用RPC的真正⽬目的。。
11 UC云端服务的Thrift运⽤用 我们是如何⽤用Thrift来解开前后端耦合的? 中间件的服务,本质上是将⻚页⾯面在服务器器端进⾏行行js 渲染之后产⽣生 的dom结构进⾏行行清洗,并提炼出对⽤用户有核⼼心价值的内容,再重 新组合,排版,展现给⽤用户,我们称之为转码服务 思路路是,中间件只是提供⾼高可⽤用和稳定的js渲染环境,⽽而数据清 洗的,往往是每个实际业务都有⾃自⼰己独有的需求和清洗逻辑 我么将通过Thrift框架⽣生成的代码,使⽤用rpc协议将其交给各个独
⽴立的nodejs 服务去进⾏行行,也就实现了了数据和业务的分离,可以将 中间件的能⼒力力提供给各个集团内的业务单元来使⽤用
12 实际成果输出 Hydra转码开放平台———铁⻢马爬⾍虫系统 我们快速的中间件 的js渲染能⼒力力输出 给了了业务⽅方 业务⽅方不不⽤用在本地 使⽤用phatomjs之 类耗费⼤大量量本地资 源,且难以被前端
掌控的各类⾼高并发, ⾼高可⽤用问题
性能展示 Hydra转码开放平台———铁⻢马爬⾍虫系统 1. 平均⻚页⾯面抽取时间4.5s(在服务器器端经过js 渲染之后), 同⽐比phatomjs, electron都要 快接近1倍 性能 成功率
业务数据获取 浏览器器数据获取 99 % 91 %
live code
Q&A 微信 366348