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
270
Node.js 服务前端数据接口的演进
shiningray
0
420
Nodejs直出套路
shiningray
2
450
ActionCable和实时交互
shiningray
0
640
Git, Code Review & Continous Integration
shiningray
0
190
Fiber and em-synchrony
shiningray
2
360
屌丝程序员如何打造日PV百万的网站架构.pdf
shiningray
68
26k
Other Decks in Programming
See All in Programming
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
370
Parallel::Pipesの紹介
skaji
2
910
社内での開発コミュニティ活動とモジュラーモノリス標準化事例のご紹介/xPalette and Introduction of Modular monolith standardization
m4maruyama
0
120
Benchmark
sysong
0
140
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
210
統一感のある Go コードを生成 AI の力で手にいれる
otakakot
0
3k
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
200
イベントストーミングから始めるドメイン駆動設計
jgeem
4
820
ドメインモデリングにおける抽象の役割、tagless-finalによるDSL構築、そして型安全な最適化
knih
10
1.8k
Perplexity Slack Botを作ってAI活用を進めた話 / AI Engineering Summit プレイベント
n3xem
0
640
GoのWebAssembly活用パターン紹介
syumai
3
10k
List Unfolding - 'unfold' as the Computational Dual of 'fold', and how 'unfold' relates to 'iterate'"
philipschwarz
PRO
0
190
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Designing Experiences People Love
moore
142
24k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
Unsuck your backbone
ammeep
671
58k
Done Done
chrislema
184
16k
Side Projects
sachag
454
42k
Code Review Best Practice
trishagee
68
18k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
GraphQLとの向き合い方2022年版
quramy
46
14k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
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