imtoken钱包安卓版下载|blink

作者: imtoken钱包安卓版下载
2024-03-09 21:17:14

欧路词典|英汉-汉英词典 blink是什么意思_blink的中文解释和发音_blink的翻译_blink怎么读

欧路词典|英汉-汉英词典 blink是什么意思_blink的中文解释和发音_blink的翻译_blink怎么读

欧路词典

法语助手

德语助手

西语助手

欧路英语

每日一句:The ode lives upon the ideal, the epic upon the grandiose, the drama upon the real.

首页

App下载

欧路翻译

每日英语听力

AI写作

英语课堂

背单词

支持英汉-汉英词典查询 英语例句搜索

词典

例句

变位

词条纠错X

blink

您还没有登录,点这里登录或注册

登录后,您可以提交反馈建议,同时可以和手机、电脑同步生词本。

在英汉-汉英词典中发现10个解释错误,并通过审核,将获赠「欧路词典」授权一个

blink

专八雅思托福

英/blɪŋk/美/blɪŋk/

全球

有5个发音

男英国

赞踩

男美国

赞踩

男美国

赞踩

女美国

赞踩

男美国

赞踩

生词本:

添加笔记:

有奖纠错

| 划词

英汉-汉英词典

词组搭配

英语百科

近义、反义、联想词

英英词典

英语维基词典

全文检索

英汉-汉英词典

vt. 眨;…vi. 眨;n. 光;眨;瞬间时 态: blinked, blinking, blinks

近义、反义、联想词

近词n. reflex, instinctive reflex, innate reflex, inborn reflex, unconditioned reflex, physiological reactionv. act involuntarily, act reflexively, suppress, stamp down, inhibit, subdue, conquer联想词flicker,摇曳;twinkle;eye;eyes;flickering的(摇曳的;twitch抽搐;stare凝视,盯着看;flashing光;eyeball球;momentarily顷刻之间;beep嘟嘟响;

词组 | 习惯用语

on the blink 坏了,出故障;身体不爽blink reflex [医]瞬目反射

历史记录

生词本

关注微博

反馈问题

关注我们的微信

下载手机客户端

赞助商链接

欧路翻译 浏览器插件全新发布内置欧路词典&多种翻译引擎,不仅支持网页和PDF文档翻译,还能高亮重点单词,全方位提升你的英文阅读体验。www.eudic.net

划词翻译

详细解释

您还没有登录,点这里登录或注册

生词本和学习记录“云”同步,支持网站、电脑版和手机客户端。

false

广告联系|

意见反馈|

合作伙伴|

关于欧路在线词典|手机版网站 | 英语热词榜| HTTPS| AI英文写作| Rédiger多语言写作

欧路软件 ©2024 词库版本20240228 沪ICP备08016489号 沪公网安备 31011602001726号

BLINK中文(简体)翻译:剑桥词典

BLINK中文(简体)翻译:剑桥词典

词典

翻译

语法

同义词词典

+Plus

剑桥词典+Plus

Shop

剑桥词典+Plus

我的主页

+Plus 帮助

退出

剑桥词典+Plus

我的主页

+Plus 帮助

退出

登录

/

注册

中文 (简体)

查找

查找

英语-中文(简体)

blink 在英语-中文(简体)词典中的翻译

blinkverb uk

Your browser doesn't support HTML5 audio

/blɪŋk/ us

Your browser doesn't support HTML5 audio

/blɪŋk/

Add to word list

Add to word list

B2 [ I or T ] When you blink, you close and then open your eyes quickly once or several times, and when an eye blinks, it does this.

眨(眼睛)

You've got something in your eye - try blinking a few times.

你眼睛里有东西——眨几下眼睛试试。

[ I ] literary If a light blinks, it flashes on and off.

(光)闪烁

更多范例减少例句The brightness of the snow made him blink.How do you manage not to blink when you're putting makeup on your eyes?We stared at each other to see who would blink first.At the sight of the gun, the cashier blinked and swallowed hard, but said nothing.We came out of the cinema and stood blinking in the sunlight.

习语

not blink

blinknoun [ C usually singular ] uk

Your browser doesn't support HTML5 audio

/blɪŋk/ us

Your browser doesn't support HTML5 audio

/blɪŋk/

the act of blinking

眨眼

习语

in the blink of an eye

on the blink

(blink在剑桥英语-中文(简体)词典的翻译 © Cambridge University Press)

blink的例句

blink

In the blink of a screen, a set of 32 integrated computer programs will display a breakdown of what is wrong with an author's text.

来自 Cambridge English Corpus

He peeks through the keyhole and sees a bizarre, round-bodied creature flapping its wings and blinking its eyes.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

Thus, the display of the potentiated blink reflex was not especially characteristic of either inhibited or anxious children.

来自 Cambridge English Corpus

What is ephemeral, an instance that disappears in a blink of an eye, may in later instances be organised, framed in a narrative.

来自 Cambridge English Corpus

The eye blinks and one can see a head of a girl watching television.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

Rigid contact lenses may be removed by pulling the eyelid tight and then blinking.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

Symptoms can range from a simple increased frequency of blinking to constant, painful eye closure leading to functional blindness.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

However, the power is cut and the clock is reset, blinking 12:00 repeatedly once the power comes back on.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

示例中的观点不代表剑桥词典编辑、剑桥大学出版社和其许可证颁发者的观点。

B2

blink的翻译

中文(繁体)

眨(眼睛), (光)閃爍, 眨眼…

查看更多内容

西班牙语

parpadear, parpadeo, pestañear…

查看更多内容

葡萄牙语

piscar, piscada, piscadela [feminine]…

查看更多内容

更多语言

in Marathi

日语

土耳其语

法语

加泰罗尼亚语

in Dutch

in Tamil

in Hindi

in Gujarati

丹麦语

in Swedish

马来语

德语

挪威语

in Urdu

in Ukrainian

俄语

in Telugu

阿拉伯语

in Bengali

捷克语

印尼语

泰语

越南语

波兰语

韩语

意大利语

डोळा मिचकावणे, डोळ्याची उघडझाप करणे, डोळा लवणे…

查看更多内容

まばたきする, まばたきをする, 点滅(てんめつ)する…

查看更多内容

hızlıca göz kırpmak, hızlı yanıp sönmek, gözlerini kırpmak…

查看更多内容

cligner des yeux, clignoter, battement [masculine] de paupières…

查看更多内容

parpellejar…

查看更多内容

knipperen…

查看更多内容

நீங்கள் கண் சிமிட்டும்போது, நீங்கள் ஒரு முறை அல்லது பல முறை விரைவாக கண்களை மூடிக்கொண்டு திறக்கிறீர்கள், ஒரு கண் சிமிட்டும்போது…

查看更多内容

पलक झपकना, झपकाना…

查看更多内容

ઝબકવું, આંખ મીંચીને…

查看更多内容

blinke…

查看更多内容

blinka…

查看更多内容

kelip mata…

查看更多内容

blinzeln…

查看更多内容

blunke, blinke, blunk [neuter]…

查看更多内容

آنکھ جھپکنا, پلک مارنا…

查看更多内容

моргати…

查看更多内容

моргать, мигать…

查看更多内容

రెప్ప పాటు, రెప్ప వేయు…

查看更多内容

يَطْرِف…

查看更多内容

চোখের পলক ফেলা, চোখ পিটপিট করা…

查看更多内容

mrkat…

查看更多内容

mengejapkan mata…

查看更多内容

กะพริบตา…

查看更多内容

chớp mắt…

查看更多内容

mrugać, migać, błyskać…

查看更多内容

눈을 깜빡이다…

查看更多内容

battere le palpebre…

查看更多内容

需要一个翻译器吗?

获得快速、免费的翻译!

翻译器工具

blink的发音是什么?

在英语词典中查看 blink 的释义

浏览

blindside

bling

bling something up

blini

blink

blinker

blinkered

blinkers phrase

blinking

blink更多的中文(简体)翻译

全部

not blink idiom

on the blink idiom

in the blink of an eye idiom

查看全部意思»

惯用语

not blink idiom

on the blink idiom

in the blink of an eye idiom

查看全部惯用语意思»

“每日一词”

flexitarian

A flexitarian way of eating consists mainly of vegetarian food but with some meat.

关于这个

博客

Forget doing it or forget to do it? Avoiding common mistakes with verb patterns (2)

March 06, 2024

查看更多

新词

stochastic parrot

March 04, 2024

查看更多

已添加至 list

回到页面顶端

内容

英语-中文(简体)例句翻译

©剑桥大学出版社与评估2024

学习

学习

学习

新词

帮助

纸质书出版

Word of the Year 2021

Word of the Year 2022

Word of the Year 2023

开发

开发

开发

词典API

双击查看

搜索Widgets

执照数据

关于

关于

关于

无障碍阅读

剑桥英语教学

剑桥大学出版社与评估

授权管理

Cookies与隐私保护

语料库

使用条款

京ICP备14002226号-2

©剑桥大学出版社与评估2024

剑桥词典+Plus

我的主页

+Plus 帮助

退出

词典

定义

清晰解释自然的书面和口头英语

英语

学习词典

基础英式英语

基础美式英语

翻译

点击箭头改变翻译方向。

双语词典

英语-中文(简体)

Chinese (Simplified)–English

英语-中文(繁体)

Chinese (Traditional)–English

英语-荷兰语

荷兰语-英语

英语-法语

法语-英语

英语-德语

德语-英语

英语-印尼语

印尼语-英语

英语-意大利语

意大利语-英语

英语-日语

日语-英语

英语-挪威语

挪威语-英语

英语-波兰语

波兰语-英语

英语-葡萄牙语

葡萄牙语-英语

英语-西班牙语

西班牙语-英语

English–Swedish

Swedish–English

半双语词典

英语-阿拉伯语

英语-孟加拉语

英语-加泰罗尼亚语

英语-捷克语

英语-丹麦语

English–Gujarati

英语-印地语

英语-韩语

英语-马来语

英语-马拉地语

英语-俄语

English–Tamil

English–Telugu

英语-泰语

英语-土耳其语

英语-乌克兰语

English–Urdu

英语-越南语

翻译

语法

同义词词典

Pronunciation

剑桥词典+Plus

Shop

剑桥词典+Plus

我的主页

+Plus 帮助

退出

登录 /

注册

中文 (简体)  

Change

English (UK)

English (US)

Español

Русский

Português

Deutsch

Français

Italiano

中文 (简体)

正體中文 (繁體)

Polski

한국어

Türkçe

日本語

Tiếng Việt

हिंदी

தமிழ்

తెలుగు

关注我们

选择一本词典

最近的词和建议

定义

清晰解释自然的书面和口头英语

英语

学习词典

基础英式英语

基础美式英语

语法与同义词词典

对自然书面和口头英语用法的解释

英语语法

同义词词典

Pronunciation

British and American pronunciations with audio

English Pronunciation

翻译

点击箭头改变翻译方向。

双语词典

英语-中文(简体)

Chinese (Simplified)–English

英语-中文(繁体)

Chinese (Traditional)–English

英语-荷兰语

荷兰语-英语

英语-法语

法语-英语

英语-德语

德语-英语

英语-印尼语

印尼语-英语

英语-意大利语

意大利语-英语

英语-日语

日语-英语

英语-挪威语

挪威语-英语

英语-波兰语

波兰语-英语

英语-葡萄牙语

葡萄牙语-英语

英语-西班牙语

西班牙语-英语

English–Swedish

Swedish–English

半双语词典

英语-阿拉伯语

英语-孟加拉语

英语-加泰罗尼亚语

英语-捷克语

英语-丹麦语

English–Gujarati

英语-印地语

英语-韩语

英语-马来语

英语-马拉地语

英语-俄语

English–Tamil

English–Telugu

英语-泰语

英语-土耳其语

英语-乌克兰语

English–Urdu

英语-越南语

词典+Plus

词汇表

选择语言

中文 (简体)  

English (UK)

English (US)

Español

Русский

Português

Deutsch

Français

Italiano

正體中文 (繁體)

Polski

한국어

Türkçe

日本語

Tiếng Việt

हिंदी

தமிழ்

తెలుగు

内容

英语-中文(简体) 

 VerbNoun

例句

Translations

语法

所有翻译

我的词汇表

把blink添加到下面的一个词汇表中,或者创建一个新词汇表。

更多词汇表

前往词汇表

对该例句有想法吗?

例句中的单词与输入词条不匹配。

该例句含有令人反感的内容。

取消

提交

例句中的单词与输入词条不匹配。

该例句含有令人反感的内容。

取消

提交

blink是什么意思_blink的翻译_音标_读音_用法_例句_爱词霸在线词典

k是什么意思_blink的翻译_音标_读音_用法_例句_爱词霸在线词典首页翻译背单词写作校对词霸下载用户反馈专栏平台登录blink是什么意思_blink用英语怎么说_blink的翻译_blink翻译成_blink的中文意思_blink怎么读,blink的读音,blink的用法,blink的例句翻译人工翻译试试人工翻译翻译全文简明柯林斯牛津blinkCET6/TOEFL/IELTS英 [blɪŋk]美 [blɪŋk]释义v.眨眼; 闪烁n.眨眼大小写变形:BlinkBLINK点击 人工翻译,了解更多 人工释义词态变化第三人称单数: blinks;过去式: blinked;过去分词: blinked;现在分词: blinking;实用场景例句全部眨眼睛闪烁眨眼一瞬间She bravely blinked back her tears.她勇敢地抑制住了泪水。牛津词典Suddenly a warning light blinked.突然有一盏警告灯开始闪烁。牛津词典When I told him the news he didn't even blink (= showed no surprise at all) .我把那个消息告诉他时,他眼都没眨一下。牛津词典He blinked in the bright sunlight.他在强烈的阳光下直眨眼睛。牛津词典I'll be back before you can blink (= very quickly) .我眨眼工夫就回来。牛津词典Kathryn blinked and forced a smile...凯瑟琳眨了眨眼睛,挤出一丝微笑。柯林斯高阶英语词典Suddenly, Momma's eyes blinked...突然,妈妈眼睛一闪。柯林斯高阶英语词典Green and yellow lights blinked on the surface of the harbour...海港的水面上闪烁着绿色和黄色的灯光。柯林斯高阶英语词典A warning light blinked on.警报灯闪亮了。柯林斯高阶英语词典It was all over in the blink of an eye.转眼之间,一切都结束了。柯林斯高阶英语词典...an old TV that's on the blink.坏了的旧电视机柯林斯高阶英语词典He didn't blink at the idea of leaving his home and going far away.他对于要离家到远方去并不觉得惊讶.《简明英汉词典》You cannot blink the fact that the refugees are suffering.你不能坐视那些难民在受苦的事实.期刊摘选The rapid movement of an object towards the eye triggers the blink reflex.快速朝眼前移动物体,就会引起眨眼反应.《简明英汉词典》My television is on the blink.我的电视机失灵.期刊摘选Two hundred years seems like the blink of an eye in the history of Chinese civilization.二百年时间在中国文明史上只不过是一瞬间.《现代汉英综合大词典》In a blink of an eye, two entirely different outcomes can occur.瞬息变换中, 相差一秒就可能产生两种完全不同的结局.期刊摘选You feel frustrated and anxious, then eat up a lot of things in a blink eye!你感到灰心、焦虑, 然后转眼间吃掉很多东西.期刊摘选Even under normal circumstances people tend to blink less frequently while at a computer.即使是一般情况下,人们电脑前也会减少眨眼频率.期刊摘选All toads blink when they swallow.所有的癞蛤蟆吞食东西时都会眨眼皮.《简明英汉词典》In a blink of an eye he had disappeared.一眨眼的工夫他就没影了.《简明英汉词典》The only light over the deep black sea was the blink shone from the beacon.黑黢黢的海面上唯一的光明就只有灯塔上闪现的亮光了.《简明英汉词典》Blink your headlights on and off.使车前灯闪烁(打信号)吧.辞典例句Objective To obtain the normal value of blink reflex ( BR ) in the elderly.目的了解老年人瞬目反射 ( br ) 的正常分布及变异.期刊摘选I turned to the wall and to blink back my tears.我转向墙,用力眨眼忍住泪水.期刊摘选收起实用场景例句真题例句全部四级六级Isn't it a bit weird that spending it should happen in half a blink ( ' , 眨眼 ) of an eye? Doesn't a wallet—that time-honoured Friday-night feeling of pleasing, promising fatness—represent something that matters? But I'll leave the economics to the experts.出自-2015年12月阅读原文Isn't it a bit weird that spending it should happen in half a blink of an eye?2015年12月四级真题(第三套)阅读 Section CSince luxury is a function of scarcity, the children of tomorrow will long for nothing more than intervals of freedom from all the blinking machines, streaming videos and scrolling headlines that leave them feeling empty and too full all at once.出自-2012年12月阅读原文收起真题例句英英释义Noun1. a reflex that closes and opens the eyes rapidlyVerb1. briefly shut the eyes;"The TV announcer never seems to blink"2. force to go away by blinking;"blink away tears"3. gleam or glow intermittently;"The lights were flashing"收起英英释义词组搭配in the blink of an eye (或 in a blink)(informal)very quickly(非正式)眨眼间,一瞬间not blink an eyeshow no reaction没有反应,无动于衷on the blinkOut of working order.失调:不能正常工作收起词组搭配同义词v.忽略,忽视;躲避,隐蔽的neglectavoideludepassoverlookovershunslightdodgedisregardcutbypassignoreostracizeshirkevadesnubv.畏缩,发抖;震惊startsurprisedblenchbeflinchstartledquakewincefluttershockedshuddertrembleshrinkquiverrecoilv.眨眼睛flickernictitatebatwinknictateflutterv.眯起眼睛,偷看espyaskancedescrylookglanceglimpsespyatperceivespotsquintv.闪烁;发光glimmerbeamscintillateglitterflickerwavertwinklebeflashfulguratebedazzlecoruscatesparkleluminousblazeglowglistershimmerglistenphosphoresceradiategleamdanceshineglarefluttern.眨眼,跳动winkflickerwaverdancefluttern.闪烁;发光glowingflashshimmershiningtwinkleblazegleamsparkleglimmer行业词典计算机闪烁   常用俚语vin blink[无业游民用语] 白酒,烧酒I feel a little overcome by the vin blink.我觉得有一点被这白酒醉倒了。释义词态变化实用场景例句真题例句英英释义词组搭配同义词行业词典常

Chrome浏览器引擎 Blink & V8 - 知乎

Chrome浏览器引擎 Blink & V8 - 知乎首发于前端 - 浏览器工作原理切换模式写文章登录/注册Chrome浏览器引擎 Blink & V8曲迪Make it happen.背景这篇文章是我的前端技术系列文章中浏览器工作原理栏目中的第二篇。浏览器引擎(也被称作布局引擎或渲染引擎)是浏览器的重要组成部分。浏览器引擎最重要的工作就是将HTML文本和其他页面中的资源转换成可以与用户产生交互的页面。除了浏览器引擎外,布局引擎和渲染引擎是另外两个相关的概念,理论上,两个引擎可以独立实现,但在实际情况中,往往很少将二者分开实现。除了包含布局和渲染引擎外,浏览器引擎还遵循文档安全策略(Content Security Policy)以保证站点间相互独立。在运行JavaScript代码的功能上,基本上主流的浏览器都使用独立的引擎,起初JavaScript语言只被用于在浏览器中使用,但现在JavaScript几乎可以在任何地方使用,这需要JavaScript引擎可以独立于浏览器单独使用。而像Electron framework这样的技术就是整合Chromium的渲染引擎和Nodejs而实现的。我想通过这篇文章把V8中的技术尽可能的详述,涵盖的内容会比较多,可反复阅读 :)。常见的浏览器引擎浏览器引擎是Web平台技术中一系列标准(HTML、CSS、ECMAScript、WebGL、Web Storage等等)的具体实现,不同的浏览器引擎在遵循同样的标准下,还实现了额外的功能。Gecko是Mozilla的浏览器引擎,在Firefox中使用,SpiderMonkey是Firefox的JavaScript引擎。Apple为Safari浏览器创造了Webkit引擎,Webkit引擎内置了JavaScriptCore引擎。虽然Apple允许在IOS设备上可以使用其他的浏览器代替Safari,但所用通过App Store分发的浏览器必须使用Webkit引擎。例如,Opera Mini浏览器在IOS设备上使用Webkit引擎,而在其他设备上使用Blink引擎。Google起初使用Webkit作为Chrome浏览器的引擎,后来以Webkit引擎为基础创造了Blink引擎,所有基于Chromium开源浏览器衍生的产品都使用blink引擎。而大名鼎鼎的V8引擎就是Chromium-based浏览器的JavaScript引擎。Microsoft维护着自己的EdgeHTML引擎,作为老的Trident引擎的替代方案。新的Edge的浏览器已经开始使用Chromium的Blink引擎了,而EdgeHTML引擎只在window 10上的Universal Windows Platform中被使用。 天下合久必分,分久必合,随着Edge也加入了Blink的阵营,基本上Webkit内核及Webkit内核的衍生Blink已经统治了浏览器市场。到目前,单单Chrome的市场占有率已有六成。接下来,就让我们来聊聊Blink和V8引擎。Chromium & Blink宽泛的说,Blink实现了在浏览器页签中所有的渲染工作,其中包括:实现了Web平台中的标准,例如HTML标准,包括DOM、CSS等。内置了V8引擎用于运行JavaScript。从网络堆栈中获取资源构建DOM树计算样式和布局内置了Chrome Compositor和绘制图形的能力借助Content public APIs,Blink可以被内置在很多诸如Chromium,Android WebView和Opera这样的应用中。进程/线程架构进程Chromium拥有一套多进程架构。Chromium有一个浏览器进程和多个带有沙盒能力的渲染进程。Blink则运行在渲染进程中。从安全的角度考虑,让不同的站点保持相互隔离是非常重要的,这被称作站点隔离(Site Isolation)。理论上讲,一个渲染进程应该最多只能负责一个站点的渲染工作。但实际上,当用户打开很多页签时,渲染进程与站点1对1的关系会占用大量的内存。所以一个渲染进程可能会被多个iframe或页签所共享,也就是说一个页面中的多个iframe可能被多个渲染进程渲染,而在不同页面中的多个iframe也可能被同一个渲染进程渲染。所以,在iframe,页签和渲染进程间并不存在一对一的关系。由于Blink运行在渲染进程中的沙盒中,当Blink需要访问文件或播放视频或者访问用户信息(cookie、password等)时必须与浏览器进程通信。这种不同进程间的通信方式被Mojo实现。随着Chromium不断向服务化架构演进,Blink可以通过Mojo来降低消息传递过程中对发送方和接收方对于具体实现的依赖(服务可能在多个进程中,也可能在同一个进程中,消息传递方式不同)MojoMojo是一系列库的集合,用于提供一种进程内或跨进程的通信方案,其中包含了与平台无关的通用的IPC方案、消息IDL格式化和可以与不同语言集成的绑定库。 Message pipe一个消息通道(Message pipe)建立其两个端点(endpoint)之间的通道。每一个端点都有一个用于收消息的队列,同时还可以向另一个端点发送消息,而消息通道是双向的。MojomMojom文件描述了消息的类型。有了消息通道和消息类型,通道中的一个端点可以被指定成Remote,它可以发送Mojom文件中定义好类型的消息。另一个端点则可以被指定成Receiver,用于接收消息。线程Blink包含一个主线程,多个Worker线程,还有一些其他的线程。几乎所有重要的工作都运行在主线程上。包括运行JavaScript(除了Workers),DOM生成,CSS样式和布局计算等,所以交互性能的优化关键主要围绕主线程。Blink会为Web workers,Service workers创建出独立的线程。虽然运行的都是JavaScript,但主线程与worker线程的运行环境是不共享的,需要通过消息来传递数据。Blink和V8也可能会创建出其他的用于音视频,数据库和垃圾回收(GC)等功能的线程。对于线程间通信,会使用PostTask提供的api。除了真的因为性能的原因,使用共享内存的方式实现通信并不被推荐,这也是Blink不使用线程锁(MutexLocks)的原因。Page, Frame, Document, DOMWindow概念一个页面(Page)代表一个浏览器页签,一个渲染进程可能负责渲染多个页面。一个框(Frame)代表主框或者一个iframe,一个页面至少包含一个框。一个DOMWindow代表JavaScript中的window对象,每个框只有一个DOMWindow。一个Document代表JavaScript中的window.document对象,每个框只有一个Document。一个ExecutionContext在主线程中抽象一个Document,在worker线程中抽象WorkerGlobalScope。渲染进程 :页面 = 1 :N 页面 :框 = 1 :M Frame : DOMWindow : Document (或ExecutionContext) 在任何情况下都是 1 : 1 : 1 ,但有时引用关系会变化。跨进程iframes(OOPIF)虽然站点隔离机制让页面变的更安全,但却增加了复杂度。站点隔离致力于为每一个站点创建一个渲染进程,例如,https://mail.example.com 和 https://chat.example.com 属于同一个站点,而 https://noodles.com 和 https://pumpkins.com则不属于同一个站点。如果一个页面中存在跨站点的iframe则可能被多个渲染进程承载。从主框的角度看,主框是LocalFrame,iframe则是RemoteFrame。从iframe的角度看,主框则是RemoteFrame,而iframe则是LocalFrame。LocalFrame和RemoteFrame间的通信被浏览器进程管理。Web IDL绑定Web IDL (Web Interface definition language)是用于描述Web平台中定义的标准如何被浏览器实现的接口定义语言,通过浏览器对这些标准中定义的接口的实现,Web开发者可以使用JavaScript对象来调用这些标准功能。Blink在实现这些标准的同时,还需要为V8中的JavaScript提供调用Blink的途径,这就是Web IDL Bindings。通过对Web IDL的实现和Bindings的存在,就实现了类似在JavaScript中访问某个节点的第一个子节点的功能(node.firstChild)。在实现了通用标准的同时,浏览器还实现了自己特有的功能定义,通用的标准被定义在the Web IDL spec,而Blink自己的定义则被定义在Blink-specific IDL extended attributes中。通常在idl文件被构建时,the IDL compiler 会自动为具体的实现类生成Blink-V8的绑定。当在JavaScript中调用node.firstChild时,V8会调用V8Node::firstChildAttributeGetterCallback() ,然后进一步调用Node::firstChild() 。渲染流水线Rendering pipeline定义了从HTML字符到在屏幕上显示像素的过程。 关于这部分的内容可以阅读前一篇文章。V8V8是Google打造的开源的,高性能的JavaScript和WebAssembly引擎,使用C++语言实现。V8引擎被应用在Chrome、Nodejs和其他应用中。V8引擎可以独立运行,也可以运行在任何的C++程序中。一个V8的实例被称作Isolate,每一个isolate都有独立GC的堆栈空间。这就意味着一个Isolate中的JavaScript对象不能直接访问另一个Isolate中的对象。在Chrome中,每个渲染进程都有一个V8 Isolate,所有被同一个渲染进程处理的站点的JavaScript代码在同一个Isolate中运行。但对于Web worker,每一个worker则拥有自己的Isolate。在Isolate中,存在一个或多个JavaScript上下文环境(JavaScript content)。Chrome为每个iframe创建一个JavaScript环境。此外,每个Chrome extension对于一个iframe都有自己的JavaScript环境。Blink通常使用ScriptState对象作为JavaScript环境的引用,blink::ScriptState与v8::Context有着1 : 1的关系。执行流水线JavaScript脚本的运行需要经历一系列的过程。 要运行的JavaScript脚本会从网络或缓存中被加载。 通过对JavaScript脚本文本的分析可以生成用于描述源代码结构化的数据,抽象语法树(AST)。 接下来Ignition解释器会将AST转化成生成体积更小的字节码,字节码中的每行指令代表着对寄存器的操作,当字节码生后以后AST将会被废弃以节省空间,后续的执行和优化都基于字节码。 在解释器执行字节码时,Object Shapes会试图将代码中对象的类型缓存下来生成Type Feedback,当访问这些对象时会尝试从缓存中获取,如果找不到再动态查找并更新缓存。 TurboFan是V8中的代码优化编译器,它会评估函数是否需要被进一步优化成机器码以提高性能,需要被优化的函数被编译成Optimized Code。 但当编译后的函数被发现函数中变量的数据类型与之前缓存的类型不同时,则需要放弃优化的代码回到字节码重新解释执行。接下来让我们逐一了解每个过程。加载(Loading)加载是V8获取JavaScript脚本文本的过程。 V8并不负责资源的下载,所以这些资源可能来自网络、缓存,也可能来自Service worker。V8可以在文件下载的同时进行接下来的分析工作。V8拥有脚本热加载的能力:Warm Load:当V8再次运行同样的脚本时,会将脚本编译后的结果缓存在硬盘中。Hot Load:当第三次访问时,V8可以跳过分析和编译过程直接从硬盘中读取之前被编译的结果。分析(Parsing) 分析是将JavaScript脚本文本转化成抽象语法树(Abstract Syntax Tree)的过程。 **词法分析词法分析(lexical analysis)是将一系列字符转换成标记(token)的过程。这里的标记是表示源代码的最小单位,将输入的字符流转换成标记的过程被称为标记化(tokenization),在这个过程中,词法分析器还会对这些标记进行分类。常见的标记分类有:标识符(identifier):x,color,UP关键字(keyword):if,var,return分隔符(separator):(,}, ;操作符(operator):*,=,>字面量(literal):"Hello world", true, 666注释(comment):// 单行, / 多行 /Scanner扫描器处在词法分析的第一个阶段,通常基于状态机实现,可以在能识别的标记间不断切换。每种标记可以代表一个字符或由多个字符组成的序列。很多时候,根据第一个非空字符就可以推断出标记的类型,然后逐个处理后面的字符,直到出现不属于该类型标记字符集中的字符时结束(最长一致性原则)。扫描器只处理utf-16的字符集,所在在扫描器拿到字符之前会有字符集转换的过程。Evaluator评估器处在词法分析的第二个阶段,用于将某些带有语义的词定义成值(value),一个语义(lexeme)是标记类型和值的组合。有的标记有值,比如标识符类型的标记,而有的标记没有值,比如分隔符类型的标记。例如,在源代码中是这样的: net_worth_future = (assets – liabilities); 生成的语义标记可能是这样的:IDENTIFIER net_worth_future

EQUALS

OPEN_PARENTHESIS

IDENTIFIER assets

MINUS

IDENTIFIER liabilities

CLOSE_PARENTHESIS

SEMICOLON语法分析语法分析(syntactic analysis,也叫 parsing)是根据某种给定的形式文法对由单词序列(如英语单词序列)构成的输入文本进行分析并确定其语法结构的一种过程。语法分析器(parser)的作用是进行语法检查、并根据输入的单词序列生成带有层次的数据结构(通常是语法分析树、抽象语法树等)抽象语法树与作用域抽象语法树(Abstract Syntax Tree)是源代码结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。这里我们以一段代码作为例子function sayHi () {

var str = "hello world";

return str;

}

转化成AST后的结构是这样的 FunctionLiteral代表sayHi函数,Block代表函数体。 左边的VariableDeclaration代表变量str的声明,Assignment代表赋值,ReturnStatement代表return语句。 这里的VariableProxy代表对变量的引用,在目前这个阶段还不知道是引用哪个变量。在分析这个阶段除了要生成AST,还要分析作用域。 通过分析,全局作用域中包含函数sayHi的声明,而sayHi的函数作用域中包含变量str的声明。而两个VariableProxy所引用的变量也可以确定下来。V8有两种分析器:Preparser和Full parser。Preparser分析器可以推迟那些不是立即需要分析的函数以减少代码启动需要的时间。Preparser只会处理语法分析和一些错误的检查而不会生成抽象语法树。V8在这个阶段对各种类型的标记的扫描有着各种的优化手段,感兴趣的同学可以继续阅读Blazingly fast parsing, part 1: optimizing the scanner。在这里推荐一个用于分析抽象语法树的网站:AST Explorer。在各种lint自定义规则,babel、webpack插件等代码分析、生成的场景里都有帮助。解释(Interpreting)解释阶段会将AST转换成字节码(bytecode)。得益于即时编译(just-in-time (JIT) compilation)技术,包括V8在内的现代浏览器JavaScript引擎结合了提前编译(AOT)的高性能和解释的灵活性。起初,代码首先被编译器快速的编译成没有被优化过的机器码,在运行的同时再有选择的将需要优化的代码通过更高级的编译器进行优化再编译。这样做虽然提高了运行速度,但也浪费了资源。其中比较显著的问题是被编译过的机器码会占用大量的内存,即使有的代码可能只会被执行一次。为了解决这些问题,V8团队提出了新的JavaScript解释器,Ignition。借助Ignition,V8可以将AST先转化成更简洁的字节码,其大小与以往的机器码相比缩小到50%至25%的空间。 由Ignition生成的字节码会被用于优化的编译器和调试工具当作数据源,当字节码生成以后,抽象语法树就可以被废弃掉以节省内存。在生成字节码的同时,还会在字节码上增加一些元数据,比如源代码的位置和用于执行字节码的处理函数。接下来我们利用d8近距离观察一下bytecode,这里我们将下面的JavaScript放在名为bytecode.js的文件中,并运行d8的调试工具。function sayHi () {

var str = 'hello world'

return str

}

可以得到下面的结果# d8 --print-bytecode bytecode.js

[generated bytecode for function: (0x300d082d25e5 )]

Parameter count 1

Register count 2

Frame size 16

0x300d082d26ae @ 0 : 12 00 LdaConstant [0]

0x300d082d26b0 @ 2 : 26 fa Star r0

0x300d082d26b2 @ 4 : 27 fe f9 Mov , r1

0x300d082d26b5 @ 7 : 62 3e 01 fa 02 CallRuntime [DeclareGlobals], r0-r1

0x300d082d26ba @ 12 : 0d LdaUndefined

0x300d082d26bb @ 13 : ab Return

Constant pool (size = 1)

0x300d082d2681: [FixedArray] in OldSpace

- map: 0x300d08042201

- length: 1

0: 0x300d082d2631

Handler Table (size = 0)

Source Position Table (size = 0)第6行到第11行的输出就是转化以后的字节码。其中的LdaConstant、Star、Mov等等的就是指令。字节码对应的指令比较多,这里截取一部分,更多的指令及解释可以在v8的源代码文件src/interpreter/http://interpreter-generator.cc中查看。 在开始分析代码之前需要先介绍累加器(Accumulator),累加器是V8中的一个特殊的寄存器,用于存放中间结果。LdaConstant [0]

Star r0

Mov , r1

CallRuntime [DeclareGlobals], r0-r1

LdaUndefined

ReturnLdaConstant [0]代表从常量池中取出0号下标的常量并放入累加器中。Star r0表示将累加器中的内容存放到r0寄存器中。Mov , r1表示将寄存器的内容放到r1寄存器中。CallRuntime [DeclareGlobals], r0-r1表示用r0和r1寄存器中的内容作为参数调用DeclareGlobals函数。LdaUndefined代表将Undefined加载到累加器中。Return代表返回累加器中的内容。JavaScript对象被分配在堆中,并不能直接被嵌入到字节码中。所以在字节码中,用数组下标代表JavaScript对象的引用的位置。我们将源代码稍作修改,然后分析更复杂的字节码function sayHi () {

console.log(str)

var str = 'hello world'

}

sayHi()

[generated bytecode for function: (0x3da0082d25e5 )]

Parameter count 1

Register count 3

Frame size 24

0x3da0082d26b2 @ 0 : 12 00 LdaConstant [0]

0x3da0082d26b4 @ 2 : 26 f9 Star r1

0x3da0082d26b6 @ 4 : 27 fe f8 Mov , r2

0x3da0082d26b9 @ 7 : 62 3e 01 f9 02 CallRuntime [DeclareGlobals], r1-r2

0x3da0082d26be @ 12 : 13 01 00 LdaGlobal [1], [0]

0x3da0082d26c1 @ 15 : 26 f9 Star r1

0x3da0082d26c3 @ 17 : 5d f9 02 CallUndefinedReceiver0 r1, [2]

0x3da0082d26c6 @ 20 : 26 fa Star r0

0x3da0082d26c8 @ 22 : ab Return

Constant pool (size = 2)

0x3da0082d2681: [FixedArray] in OldSpace

- map: 0x3da008042201

- length: 2

0: 0x3da0082d2631

1: 0x3da0082d25b1

Handler Table (size = 0)

Source Position Table (size = 0)

[generated bytecode for function: sayHi (0x3da0082d2641 )]

Parameter count 1

Register count 3

Frame size 24

0x3da0082d280a @ 0 : 13 00 00 LdaGlobal [0], [0]

0x3da0082d280d @ 3 : 26 f8 Star r2

0x3da0082d280f @ 5 : 28 f8 01 02 LdaNamedProperty r2, [1], [2]

0x3da0082d2813 @ 9 : 26 f9 Star r1

0x3da0082d2815 @ 11 : 5a f9 f8 fa 04 CallProperty1 r1, r2, r0, [4]

0x3da0082d281a @ 16 : 12 02 LdaConstant [2]

0x3da0082d281c @ 18 : 26 fa Star r0

0x3da0082d281e @ 20 : 0d LdaUndefined

0x3da0082d281f @ 21 : ab Return

Constant pool (size = 3)

0x3da0082d27d5: [FixedArray] in OldSpace

- map: 0x3da008042201

- length: 3

0: 0x3da00824a15d

1: 0x3da00824a1d1

2: 0x3da0082d278d

Handler Table (size = 0)

Source Position Table (size = 0)

undefined

这里我们主要看第二段字节码LdaGlobal [0], [0]代表从常量池下标为0的位置读取内容并存储在累加器中,也就是console。而第二个[0]代表反馈向量槽(feedback vector slot)中相应的位置,目的为了帮助后面的优化编译器提供优化信息。Star r2代表将累加器中的内容存储到r2寄存器中,此时r2中存放的就是console。LdaNamedProperty r2, [1], [2]代表获取r2寄存器中的对象的在常量池中1号位的属性。常量池1号位存放的是log,LdaNamedProperty r2, [1]也就是console.log,并存放在累加器中。Star r1将累加器中的console.log存放在r1寄存器中。CallProperty1 r1, r2, r0, [4]表示调用r1寄存器中的console.log,以r2、r0寄存器中的内容为参数。r2中是console,当我们发现r0直到第32行才会存放常量hello world,所以调用console.log会打印出undefined。执行(Execution)JavaScript是一种动态语言,一行简单的属性访问可以包含复杂的语义。Object.foo可能是简单的属性访问,也可能会调用Getter,甚至可能需要遍历原型链查找。这种动态性需要消耗更多的时间查找属性,会降低运行的速度。为了提高性能,V8将第一次分析的结果缓存起来,当再次访问属性时直接从缓存中读取。V8会调用GetProperty(object, "foo", feedback_cache),如果feedback中缓存了对于object.foo的操作则跳过任何查找步骤。Object ShapesObject Shapes也被叫做Hidden Classes或Maps,代表着JavaScript对象的结构,属性和元素如何被存储。JavaScript作为一种动态语言在实例化对象之后可以轻易的添加或删除对象中的属性。class Point {

constructor(x, y) {

this.x = x

this.y = y

}

}

const point = new Point(1, 1)

point.version = '1.0.0'

像Java这样的静态语言,一个对象中的属性结构可以在编译前就确定下来,所以这些属性的值可以存储在一段连续的内存空间中,属性间的偏移量可以通过属性的类型计算出来。但由于JavaScript的动态性,属性的查找会慢于那些静态语言。为了解决这个问题,V8使用Hidden Classes来描述对象的结构。let point = { x:1, y:1, '2': '1', in: {} };

point.out = {};

point[1] = 1;

利用d8调试工具运行上面的代码可以得到下面的结果。DebugPrint: 0xe4a08148b69: [JS_OBJECT_TYPE]

- map: 0x0e4a083074d5 [FastProperties]

- prototype: 0x0e4a082c3c69

- elements: 0x0e4a08148bc5 [HOLEY_ELEMENTS]

- properties: 0x0e4a08148cc9

- All own properties (excluding elements): {

0xe4a082d25c5: [String] in OldSpace: #x: 1 (const data field 0), location: in-object

0xe4a082d25d5: [String] in OldSpace: #y: 1 (const data field 1), location: in-object

0xe4a082d25f5: [String] in OldSpace: #in: 0x0e4a08148c1d (const data field 2), location: in-object

0xe4a082d2605: [String] in OldSpace: #out: 0x0e4a08148c6d (const data field 3), location: properties[0]

}

- elements: 0x0e4a08148bc5 {

0: 0x0e4a08042429

1: 1

2: 0x0e4a08044939

3-19: 0x0e4a08042429

}

0xe4a083074d5: [Map]

- type: JS_OBJECT_TYPE

- instance size: 24

- inobject properties: 3

- elements kind: HOLEY_ELEMENTS

- unused property fields: 2

- enum length: invalid

- stable_map

- back pointer: 0x0e4a083074ad

- prototype_validity cell: 0x0e4a082d277d

- instance descriptors (own) #4: 0x0e4a08148c89

- prototype: 0x0e4a082c3c69

- constructor: 0x0e4a082c38a1

- dependent code: 0x0e4a080421b5

- construction counter: 0map 描述了point对象的类型的详细信息prototype 描述了point对象的原型引用elements 用于存放元素类型的属性properties 用于存放命名类型的属性in-object 代表属性的值直接存放在对象中在JavaScript对象类型中,属性可以分成命名属性(Named properties)和元素(Elements)。命名属性是那些属性名是非数字的属性,而元素属性是那些类似数组下标的属性。Hidden Class中命名属性和元素分别存储在不同的空间中,它们的存储方式既可能是数组也可能是字典。在JavaScript中的每个对象都有一个Hidden Class用于描述对象的类型信息。而有个这些对象的类型信息后,多个拥有相同属性名称和属性数量的对象可以共享一个类型信息。 ** 在对象被初始化之后,对象中属性的修改会形成新的类型信息。当对象的属性新增出现不同的顺序时,v8创建新的分支。同时属性的存储位置也会发生改变。0xe4a082d25f5: [String] in OldSpace: #in: 0x0e4a08148c1d (const data field 2), location: in-object

0xe4a082d2605: [String] in OldSpace: #out: 0x0e4a08148c6d (const data field 3), location: properties[0]这里我们重点分析point对象中的in和out属性,我们发现在对象初始化定义时的in属性被存储在对象内部(in-object),而在对象初始化之后被添加的out属性则被添加到properties中,而访问in-object的属性速度要快于properties中的属性。所以属性的动态修改会产生新的Hidden Class及属性存储位置的变化。在实际开发中尽量不要在对象初始化好以后再动态的增加或删除对象中的属性。 ** 有了Hidden Classes,访问JavaScript对象的属性时就可以像静态语言那样通过坐标偏移量来快速的定位。Inline CacheV8通过内联缓存(Inline Cache)策略优化访问对象的性能。IC为函数创建名叫反馈向量(FeedBack Vector)的用于存放对象及对象属性的信息。function load(o) {

return o.x

}

load({ x: 10 })

此时IC会在反馈向量中存储 { x: 10 }对象的类型信息和x属性的信息。 反馈向量与数据库表结构相似,0代表在表中的位置 LOAD_IC代表操作的类型 Monomorphic是当前这条反馈向量的状态是单态,状态是IC中非常重要的概念,除了单态还有多态(Polymorphic)和复态(Megamorphic)。在函数运行过程中随着参数类型的变化,状态可能会发生变化。 Map中存放对象的类型信息。 Bitfield中放置对象属性的信息。有了反馈向量,load函数被反复调用时如果参数类型没有发生变化,就可以通过bitfield中存储的属性信息快速的找到属性中的值,避免反复的动态查询。当参数的类型发生变化时:load({ x: 100 })

load({ y: 1, z: 2 })

需要把两种类型都缓存起来。此时,反馈向量中的状态就会从单态变成多态,反馈向量的结构也会发生变化。 反馈向量从原本存储一个类型信息变化成数组结构存储多个类型信息。接下来我们通过d8工具和Indicium工具分析IC的变化过程。class Test {

constructor(a, b, c, d, e) {

if (a) {

this.a = a;

}

if (b) {

this.b = b;

}

if (c) {

this.c = c;

}

if (d) {

this.d = d;

}

if (e) {

this.e = e;

}

}

}

const util = {

merge(test) {

return test.a + test.b + test.c + test.d + test.e;

}

};

let rst;

console.time('Test');

const test1 = new Test(1);

for (let i = 0; i < 10e6; i++) {

rst = util.merge(test1);

}

const test2 = new Test(null, 1);

for (let i = 0; i < 10e6; i++) {

rst = util.merge(test2);

}

const test3 = new Test(null, null, 1);

for (let i = 0; i < 10e6; i++) {

rst = util.merge(test3);

}

const test4 = new Test(null, null, null, 1);

for (let i = 0; i < 10e6; i++) {

rst = util.merge(test4);

}

const test5 = new Test(null, null, null, null, 1);

for (let i = 0; i < 10e6; i++) {

rst = util.merge(test5);

}

console.timeEnd('Test');

这里我们在Test实例化的过程中动态的添加a, b, c, d, e属性中的一个来创造出5中类型信息。并记录5次循环的运行时间。d8 ic.js --trace-maps --trace_ic --log-source-code

console.timeEnd: Test, 12668.593000 通过Indicium对日志的分析,我们发现在调用merge函数时,反馈向量的状态从0到复态改变了3次。merge函数第一次调用时原本为空的反馈向量被放入了 { a: 1 } 的类型信息,此时反馈向量的状态从0变成单态第二次调用时 { b: 1 } 被放入反馈向量中,参数类型发生了改变,反馈向量的状态从单态变成多态第三、四次是 { c: 1 } 和 { d: 1 } 的类型信息被放入反馈向量,状态多态变成多态当第五种对象 { e: 1 } 被传入函数merge时,反馈向量中存储的类型信息已经达到5种,此时V8不再缓存类型信息来优化运行速度,状态从 多态变成复态 当反馈向量中的对象只有1种类型信息时为状态为单态,2-4种时为多态,超过4种以后变成复态。 现在我们将代码中Test构造函数的中if去掉,让由Test构造出的对象结构保持一致,重新运行调试命令可以得到下面的结果。onsole.timeEnd: Test, 560.487000 我们发现运行时间大幅降低的同时,反馈向量状态由原本的4种变化变成1种。通过对IC的分析,在实际开发中,要尽量减少函数参数的类型种类的数量。 **优化(Optimizing)优化过程是V8利用TurboFan编译器将字节码编译成机器码的过程。 TurboFan是一个"Sea-of-nodes"基于图的编译器,它将代码中的数据、流程控制和副作用依赖以节点的方式表达。通过不同阶段的优化,将代码编译成机器码。 在解释运行的过程中,TurboFan会选择个别的函数进行优化以保证优化是有意义的。相比以前的编译器,TurboFan以Ignition生成的字节码作为数据源,而不再需要重新构建AST结构。TurboFan的优化过程可参见下图 在TurboFan将字节码编译成机器码的过程中,还进行了简化处理 通过TurboFan对字节码的进一步优化,让JavaScript代码中的函数可以拥有与编译语言同样的运行速度。 之所以TurboFan可以像编译静态语言那样编译JavaScript是需要建立在Type Feedback上,也就是说在函数中的对象类型信息不变的情况下编译才有意义。所以当被优化的函数在运行过程中发现数据类型发生变化时就需要放弃优化的代码,回到解释执行的过程中执行并更新类型信息。内存管理V8的垃圾回收器被称作Orinoco。在一次垃圾回收过程中,Orinoco通过对象的引用访问程序中的所有对象,那些回收器无法访问的对象所占用的内存会被回收掉。window.obj = new Object()

window.obj = new Object()

由于obj指向了新的对象,所以图中红色虚线的部分就会被回收。Orinoco将存放对象的堆空间分成新、老两个生代。新创建的对象被放在新生代中,存活时间较长的对象则被存放在老生代中。新生代的存储空间最大可以达到32M,而老生代可以达到2G。除了对象的存储空间,还需要为用于执行的代码分配独立的内存空间。JavaScript中的对象由Orinoco回收,其他如DOM之类的对象则由Blink的垃圾回收器Oilpan处理,所以V8通过Orinoco解决了跨JS/C++的对象引用访问的功能。V8有着不同的垃圾回收策略:Minor GC(Scavenge)用于新生代Major GC(Full Mark-Compact)用于整个堆空间Minor GC新生代中的内存空间被分成两个同样大的空间,一个用于放新创建的对象,另一个则是空的。 当Minor GC触发时会将对象区中可以被访问的对象复制到空闲区中,然后形成新的对象区和空闲区。 如果一个对象经历了两次Minor GC后依然存活则会被复制到老生代中。Major GCMajor GC包括几个阶段标记(Marking)这个阶段V8会尝试访问所有的对象以标记那些可访问和不可访问的对象。压实(Compaction)压实是碎片整理的过程,由于复制对象是一种高成本的操作,所以V8只会压实那些高度碎片化的页(Page) 。 在压实过程中,会将原本已经碎片化的页中的对象复制到新的页中。清除(Sweep)清除这个阶段会将页中无法访问的对象内存清空,同时在Free List中更新这些空白的区域。这个过程与压实过程基本上是同时开始的,对于那些不需要压实的页的不可访问对象的内存空间会直接清除掉。 Major GC会运行Blink Oilpan GC过程,所以Oilpan中需要清除的对象也会在Major GC过程中被销毁。State of GC in V8如果GC工作完全在主线程上进行,则可能会对用户体验产生影响。通常让垃圾回收兼顾低延迟和高吞吐是困难的,为了让垃圾回收过程不会阻塞主线程上其他的工作,V8将整个垃圾回收过程以增量的方式拆分成多个阶段,这些不同阶段的回收过程可以穿插在主线程上其他的工作间隙处。与此同时,用多线程并行的方式让垃圾回收工作在非主线程上进行。Minor GC在新生代GC过程中,V8将GC任务分配给帮助线程。每个线程会收到一些指针,并立即开始访问这些对象并将他们复制到空闲区中。由于在多个线程执行任务的过程中可能会访问同一个对象,所以这些任务必须以原子化并同步的方式运行。当一个线程移动了一个对象,则会将对象的指针更新成新的位置,当其他线程访问这个对象时位置就已经发生了变化。 Major GC当堆空间接近极限时,并行的标记工作在帮助线程中开始运行,与Minor GC不同的是这部分工作完全在帮助线程中,主线程只负责汇总。 当帮助线程中标记工作完成后,主线程会暂停JavaScript的执行并快速的确认所有存活下来的对象已经被标记过,然后与一部分帮助线程同时完成压实的工作,与此同时,另外一部分线程会开始清除那些需要销毁的对象并在Free List中更新这部分空间。通过多年来的演进,现在的V8垃圾回收性能已经有了显著的提升。在开发过程中,绝大多数情况我们并不需要考虑垃圾回收的问题,但通过对这部分内容的学习,可以让我们更好的掌握垃圾回收的原理,而这些原理在不同的语言中是通用的。总结Blink作为Chrome的内核运行在渲染进程中,负责几乎所有发生在浏览器页签中的工作。 Blink在实现Web规范中定义的标准的同时也实现了属于Chrome特有的功能。 V8是Blink的JavaScript引擎,负责运行JavaScript脚本。一个JavaScript脚本运行要经历加载、分析、解释执行、优化和反优化几个过程,其中Ignition负责将抽象语法树转化成字节码以节省存储空间,TurboFan则根据对象类型信息将部分函数的字节码编译成机器码加速执行。编译后的函数运行过程中发现对象类型变化了则回退到字节码解释阶段执行。V8将内存分成新生代、老生代和代码空间分别存储新创建的对象、长期存活的对象和可执行代码。 新生代中的垃圾回收使用Scavenge策略,快速的在两个相同大小的空间交换的过程中将不再存活的对象释放掉。 而另一种Full Mark-Compact策略则负责整个堆的垃圾回收,经过在不同的线程中完成标记-压实-清除工作保证垃圾回收过程在低延迟的同时可以实现高吞吐量。到此,这篇文章终于要结束了,希望这篇文章能帮助你搭建起Blink和V8的概要视图,为你的前端知识体系点亮一颗新的技能树。在最后的相关资料中罗列了我在学习V8过程中参考的文档和视频,这里一并奉上。最后的最后,谢谢你的阅读。相关资料Life of a scriptV8 Trash talkOrinoco: The new V8 Garbage Collector Peter MarshallChromium blink-gcSea of NodesV8: Behind the Scenes (February Edition feat. A tale of TurboFan)V8 and How It Listens to YouIndicium: V8 runtime tracer toold8V8 function optimizationFast properties in V8Understanding V8’s BytecodeV8 Internals: Porting to RISC-V Build & Run, Igni-on BytecodesUnderstanding Why The New V8 Is So Fast, One Demo At A TimeBlinkOn 6 Day 1 Talk 2: Ignition - an interpreter for V8Firing up the Ignition interpreterIgnition: An Interpreter for V8 [BlinkOn]How Blink worksMojo编辑于 2020-11-09 22:18Google Chrome网页浏览器排版引擎(浏览器)​赞同 45​​7 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录前端 - 浏览器工作原理浏览器工

阿里云开源的 Blink 有多厉害?实时计算是未来么? - 知乎

阿里云开源的 Blink 有多厉害?实时计算是未来么? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册互联网软件架构阿里云开源Blink(计算平台)阿里云开源的 Blink 有多厉害?实时计算是未来么?原文: 阿里云开源实时计算平台Blink 2019年1月28日,阿里云正式宣布向ApacheFlink开源实时计算平台Blink开源。Blink源自F…显示全部 ​关注者96被浏览30,953关注问题​写回答​邀请回答​好问题​1 条评论​分享​11 个回答默认排序阿里云云栖号​已认证账号​ 关注阿里资深技术专家大沙,将为大家详细介绍本次开源的Blink主要功能和优化点,希望与业界同仁共同携手,推动Flink社区进一步发展。Blink简介Apache Flink是德国柏林工业大学的几个博士生和研究生从学校开始做起来的项目,早期叫做Stratosphere。2014年,StratoSphere项目中的核心成员从学校出来开发了Flink,同时将Flink计算的主流方向定位为流计算,并在同年将Flink捐赠Apache,后来快速孵化成为Apache的顶级项目。现在Flink是业界公认的最好的大数据流计算引擎。阿里巴巴在2015年开始尝试使用Flink。但是阿里的业务体量非常庞大,挑战也很多。彼时的Flink不管是规模还是稳定性尚未经历实践,成熟度有待商榷。为了把这么大的业务体量支持好,我们不得不在Flink之上做了一系列的改进,所以阿里巴巴维护了一个内部版本的Flink,它的名字叫做Blink。基于Blink的计算平台于2016年正式上线。截至目前,阿里绝大多数的技术部门都在使用Blink。Blink一直在阿里内部错综复杂的业务场景中锻炼成长着。对于内部用户反馈的各种性能、资源使用率、易用性等诸多方面的问题,Blink都做了针对性的改进。虽然现在Blink在阿里内部用的最多的场景主要还是在流计算,但是在批计算场景也有不少业务上线使用了。例如,在搜索和推荐的算法业务平台中,它使用Blink同时进行流计算和批处理。Blink被用来实现了流批一体化的样本生成和特征抽取这些流程,能够处理的特征数达到了数千亿,而且每秒钟处理数亿条消息。在这个场景的批处理中,我们单个作业处理的数据量已经超过400T,并且为了节省资源,我们的批处理作业是和流计算作业以及搜索的在线引擎运行在同样的机器上。所以大家可以看到流批一体化已经在阿里巴巴取得了极大的成功,我们希望这种成功和阿里巴巴内部的经验都能够带回给社区。Blink开源的背景其实从我们选择Flink的第一天开始我们就一直和社区紧密合作。过去的这几年我们也一直在把阿里对Flink 的改进推回社区。从2016年开始我们已经将流计算SQL的大部分功能,针对runtime的稳定性和性能优化做的若干重要设计都推回了社区。但是Blink本身发展迭代的速度非常快,而社区有自己的步伐,很多时候可能无法把我们的变更及时推回去。对于社区来说,一些大的功能和重构,需要达成共识后,才能被接受,这样才能更好地保证开源项目的质量,但是同时就会导致推入的速度变得相对较慢。经过这几年的开发迭代,我们这边和社区之间的差距已经变得比较大了。Blink 有一些很好的新功能,比如性能优越的批处理功能,在社区的版本是没有的。在过去这段时间里,我们不断听到有人在询问Blink的各种新功能。期望Blink尽快开源的呼声越来越大。我们一直在思考如何开源的问题,一种方案就是和以前一样,继续把各种功能和优化分解,逐个和社区讨论,慢慢地推回Flink。但这显然不是大家所期待的。另一个方案,就是先完整的尽可能的多的把代码开源,让社区的开发者能够尽快试用起来。第二个方案很快收到社区广大用户的支持。因此,从2018年年中开始我们就开始做开源的相关准备。经过半年的努力,我们终于把大部分Blink的功能梳理好,开源了出来。Blink开源的方式我们把代码贡献出来,是为了让大家能先尝试一些他们感兴趣的功能。Blink永远不会单独成为一个独立的开源项目来运作,他一定是Flink的一部分。开源后我们期望能找到办法以最快的方式将Blink merge到Flink中去。Blink开源只有一个目的,就是希望 Flink 做得更好。Apache Flink 是一个社区项目,Blink以什么样的形式进入 Flink 是最合适的,怎么贡献是社区最希望的方式,我们都要和社区一起讨论。在过去的一段时间内,我们在Flink社区征求了广泛的意见,大家一致认为将本次开源的Blink代码作为Flink的一个branch直接推回到Apache Flink项目中是最合适的方式。并且我们和社区也一起讨论规划出一套能够快速merge Blink到Flink master中的方案(具体细节可以查看Flink社区正在讨论的FLIP32)。我们期望这个merge能够在很短的时间内完成。这样我们之后的Machine Learning等其他新功能就可以直接推回到Flink master。相信用不了多久,Flink 和 Blink 就完全合二为一了。在那之后,阿里巴巴将直接使用Flink用于生产,并同时协助社区一起来维护Flink。本次开源的Blink的主要功能和优化点本次开源的Blink代码在Flink 1.5.1版本之上,加入了大量的新功能,以及在性能和稳定性上的各种优化。主要贡献包括,阿里巴巴在流计算上积累的一些新功能和性能的优化,一套完整的(能够跑通全部TPC-H/TPC-DS,能够读取Hive meta和data)高性能Batch SQL,以及一些以提升易用性为主的功能(包括支持更高效的interactive programming, 与zeppelin更紧密的结合, 以及体验和性能更佳的Flink web)。未来我们还将继续给Flink贡献在AI,IoT以及其他新领域的功能和优化。更多的关于这一版本Blink release的细节,请参考Blink代码根目录下的README.md文档。下面,我来分模块介绍下Blink主要的新的功能和优化点。Runtime为了更好的支持batch processing,以及解决阿里巴巴大规模生产场景中遇到的各种挑战,Blink对Runtime架构、效率、稳定性方面都做了大量改进。在架构方面,首先Blink引入了Pluggable ShuffleArchitecture,开发者可以根据不同的计算模型或者新硬件的需要实现不同的shuffle策略进行适配。此外Blink还引入新的调度架构,容许开发者根据计算模型自身的特点定制不同调度器。为了优化性能,Blink可以让算子更加灵活的chain在一起,避免了不必要的数据传输开销。在Pipeline Shuffle模式中,使用了ZeroCopy减少了网络层内存消耗。在BroadCast Shuffle模式中,Blink优化掉了大量的不必要的序列化和反序列化开销。此外,Blink提供了全新的JM FailOver机制,JM发生错误之后,新的JM会重新接管整个JOB而不是重启JOB,从而大大减少了JM FailOver对JOB的影响。最后,Blink也开发了对Kubernetes的支持。不同于Standalone模式在Kubernetes上的拉起方式,在基于Flink FLIP6的架构上基础之上,Blink根据job的资源需求动态的申请/释放Pod来运行TaskExecutor,实现了资源弹性,提升了资源的利用率。SQL/TableAPISQL/TableAPI架构上的重构和性能的优化是Blink本次开源版本的一个重大贡献。首先,我们对SQL engine的架构做了较大的调整。提出了全新的Query Processor(QP), 它包括了一个优化层(Query Optimizer)和一个算子层(Query Executor)。这样一来,流计算和批计算的在这两层大部分的设计工作就能做到尽可能的复用。另外,SQL和TableAPI的程序最终执行的时候将不会翻译到DataStream和DataSet这两个API上,而是直接构建到可运行的DAG上来,这样就使得物理执行算子的设计不完全依赖底层的API,有了更大的灵活度,同时执行代码也能够被灵活的codegen出来。唯一的一个影响就是这个版本的SQL和TableAPI不能和DataSet这个API进行互相转换,但仍然保留了和DataStream API互相转换的能力(将DataStream注册成表,或将Table转成DataStream后继续操作)。未来,我们计划把dataset的功能慢慢都在DataStream和TableAPI上面实现。到那时DataStream和SQL以及tableAPI一样,是一个可以同时描述bounded以及unbounded processing的API。除了架构上的重构,Blink还在具体实现上做了较多比较大的重构。首先,Blink引入了二进制的数据结构BinaryRow,极大的减少了数据存储上的开销以及数据在序列化和反序列化上计算的开销。其次,在算子的实现层面,Blink在更广范围内引入了CodeGen技术。由于预先知道算子需要处理的数据的类型,在QP层内部就可以直接生成更有针对性更高效的执行代码。Blink的算子会动态的申请和使用资源,能够更好的利用资源,提升效率,更加重要的是这些算子对资源有着比较好的控制,不会发生OutOfMemory 的问题。此外,针对流计算场景,Blink加入了miniBatch的执行模式,在aggregate、join等需要和state频繁交互且往往又能先做部分reduce的场景中,使用miniBatch能够极大的减少IO,从而成数量级的提升性能。除了上面提到的这些重要的重构和功能点,Blink还实现了完整的SQL DDL,带emit策略的流计算DML,若干重要的SQL功能,以及大量的性能优化策略。有了上面提到的诸多架构和实现上的重构。Blink的SQL/tableAPI在功能和性能方面都取得了脱胎换骨的变化。在批计算方面,首先Blink batch SQL能够完整的跑通TPC-H和TPC-DS,且性能上有着极大的提升。如上图所示,是这次开源的Blink版本和spark 2.3.1的TPC-DS的benchmark性能对比。柱状图的高度代表了运行的总时间,高度越低说明性能越好。可以看出,Blink在TPC-DS上和Spark相比有着非常明显的性能优势。而且这种性能优势随着数据量的增加而变得越来越大。在实际的场景这种优势已经超过 Spark的三倍。在流计算性能上我们也取得了类似的提升。我们线上的很多典型作业,它的性能是原来的3到5倍。在有数据倾斜的场景,以及若干比较有挑战的TPC-H query,流计算性能甚至得到了数十倍的提升。除了标准的Relational SQL API。TableAPI在功能上是SQL的超集,因此在SQL上所有新加的功能,我们在tableAPI也添加了相对应的API。除此之外,我们还在TableAPI上引入了一些新的功能。其中一个比较重要是cache功能。在批计算场景下,用户可以根据需要来cache计算的中间结果,从而避免不必要的重复计算。它极大的增强了interactive programming体验。我们后续会在tableAPI上添加更多有用的功能。其实很多新功能已经在社区展开讨论并被社区接受,例如我们在tableAPI增加了对一整行操作的算子map/flatMap/aggregate/flatAggregate(Flink FLIP29)等等。Hive的兼容性我们这次开源的版本实现了在元数据(meta data)和数据层将Flink和Hive对接和打通。国内外很多公司都还在用 Hive 在做自己的批处理。对于这些用户,现在使用这次Blink开源的版本,就可以直接用Flink SQL去查询Hive的数据,真正能够做到在Hive引擎和Flink引擎之间的自由切换。为了打通元数据,我们重构了Flink catalog的实现,并且增加了两种catalog,一个是基于内存存储的FlinkInMemoryCatalog,另外一个是能够桥接Hive metaStore的HiveCatalog。有了这个HiveCatalog,Flink作业就能读取Hive的metaData。为了打通数据,我们实现了HiveTableSource,使得Flink job可以直接读取Hive中普通表和分区表的数据。因此,通过这个版本,用户可以使用Flink SQL读取已有的Hive meta和data,做数据处理。未来我们将在Flink上继续加大对Hive兼容性的支持,包括支持Hive特有的query,data type,和Hive UDF等等。Zeppelin for Flink为了提供更好的可视化和交互式体验,我们做了大量的工作让Zeppelin能够更好的支持Flink。这些改动有些是在Flink上的,有些是在Zeppelin上的。在这些改动全部推回Flink和Zeppelin社区之前,大家可以使用这个Zeppelin image(具体细节请参考Blink代码里的docs/quickstart/zeppelin_quickstart.md)来测试和使用这些功能。这个用于测试的Zeppelin版本,首先很好的融合和集成了Flink的多种运行模式以及运维界面。使用文本SQL和tableAPI可以自如的查询Flink的static table和dynamic table。此外,针对Flink的流计算的特点,这一版Zeppelin也很好的支持了savepoint,用户可以在界面上暂停作业,然后再从savepoint恢复继续运行作业。在数据展示方面,除了传统的数据分析界面,我们也添加了流计算的翻牌器和时间序列展示等等功能。为了方便用户试用,我们在这一版zeppelin中提供3个built-in的Flink tutorial的例子: 一个是做StreamingETL的例子, 另外两个分别是做Flink Batch,Flink Stream的基础样例。Flink Web我们对Flink Web的易用性与性能等多个方面做了大量的改进,从资源使用、作业调优、日志查询等维度新增了大量功能,使得用户可以更方便的对Flink作业进行运维。在资源使用方面,新增了Cluster、TaskManager与Job三个级别的资源信息,使得资源的申请与使用情况一目了然。作业的拓扑关系及数据流向可以追溯至 Operator 级别,Vertex 增加了InQueue,OutQueue等多项指标,可以方便的追踪数据的反压、过滤及倾斜情况。TaskManager 和 JobManager 的日志功能得到大幅度加强,从Job、Vertex、SubTask 等多个维度都可以关联至对应日志,提供多日志文件访问入口,以及分页展示查询和日志高亮功能。另外,我们使用了较新的Angular 7.0 对Flink web进行了全面重构,页面运行性能有了一倍以上的提升。在大数据量情况下也不会发生页面卡死或者卡顿情况。同时对页面的交互逻辑进行了整体优化,绝大部分关联信息在单个页面就可以完成查询和比对工作,减少了大量不必要的跳转。未来的规划Blink迈出了全面开源的第一步,接下来我们会和社区合作,尽可能以最快的方式将Blink的功能和性能上的优化merge回Flink。本次的开源版本一方面贡献了Blink多年在流计算的积累,另一方面又重磅推出了在批处理上的成果。接下来,我们会持续给Flink社区贡献其他方面的功能。我们期望每过几个月就能看到技术上有一个比较大的亮点贡献到社区。下一个亮点应该是对机器学习的支持。要把机器学习支持好,有一系列的工作要做,包括引擎的功能,性能,和易用性。这里面大部分的工作我们已经开发完成,并且很多功能都已经在阿里巴巴内部服务上线了。除了技术上创新以及新功能之外,Flink的易用性和外围生态也非常重要。我们已经启动了若干这方面的项目,包括Python以及Go等多语言支持,Flink集群管理,Notebook,以及机器学习平台等等。这些项目有些会成为Flink自身的一部分贡献回社区,有些不是。但它们都基于Flink,是Flink生态的一个很好的补充。独立于Flink之外的那些项目,我们都也在认真的考虑开源出来。总之,Blink在开源的第一天起,就已经完全all-in的融入了Flink社区,我们希望所有的开发者看到我们的诚意和决心。未来,无论是功能还是生态,我们都会在Flink社区加大投入,我们也将投入力量做 Flink 社区的运营,让 Flink 真正在中国、乃至全世界大规模地使用起来。我们衷心的希望更多的人加入,一起把Apache Flink开源社区做得更好!发布于 2019-02-01 15:20​赞同 22​​1 条评论​分享​收藏​喜欢收起​网易数帆​已认证账号​ 关注是的,未来离不开实时计算,比如市内交通状况需要实时监控,推荐系统用户画像标签需要实时更新……实时流计算和 Apache Flink 在当前大数据平台建设中是很重要的一块,这个话题值得讨论。首先,Blink 开源,佐证了云计算未来属于开源这一论断。其次,被誉为最好的流计算引擎,Flink 的开源版本确实需要优化,事实上各大互联网公司都有自己的优化工作,比如网易基于 Flink 的实时计算平台 Sloth,支持毫秒级延迟,单台 TPS 超过 100 万(可线性扩容)。至于 Blink 的优化,官方文章总结很到位了,这里不多说。再看 Blink 开源,我们关注的事情是:Blink 和 Flink 未来是什么关系?Blink 的特性将如何合到 Flink 中,需要多久?前一个问题,官方已经明确表态未来 Blink 和 Flink 会是同一个项目 (“Blink 永远不会成为另外一个项目,如果后续进入 Apache 一定是成为 Flink 的一部分”),而 Blink 完全开源,是希望社区用户能先用起来 Blink 的新功能,也是希望加速实现 Blink 和 Flink 的合并,让 Flink 早日获得 Blink 的好的地方。所以,已经选择了 Flink ,不需要再搞 Blink,最终还是可以享受到 Blink 的那些新功能的。后一个问题,按照文章,merge Blink 到 Flink Master 中的方案,还在讨论规划。发布于 2019-01-30 16:20​赞同 7​​添加评论​分享​收藏​喜欢

权威详解 | 阿里新一代实时计算引擎 Blink,每秒支持数十亿次计算-阿里云开发者社区

权威详解 | 阿里新一代实时计算引擎 Blink,每秒支持数十亿次计算-阿里云开发者社区

产品解决方案文档与社区权益中心定价云市场合作伙伴支持与服务了解阿里云

售前咨询

95187-1

在线服务

售后咨询

4008013260

在线服务

其他服务

我要建议我要投诉更多联系方式备案控制台开发者社区首页MaxComputeHologresFlinkE-MapReduceDataWorksElasticsearchPAI智能搜索推荐免费试用

探索云世界

新手上云云上应用构建云上数据管理云上探索人工智能云计算弹性计算无影存储网络倚天云原生容器serverless中间件微服务可观测消息队列数据库关系型数据库NoSQL数据库数据仓库数据管理工具PolarDB开源向量数据库热门Modelscope模型即服务弹性计算云原生数据库物联网云效DevOps龙蜥操作系统平头哥钉钉开放平台大数据大数据计算实时数仓Hologres实时计算FlinkE-MapReduceDataWorksElasticsearch机器学习平台PAI智能搜索推荐人工智能机器学习平台PAI视觉智能开放平台智能语音交互自然语言处理多模态模型pythonsdk通用模型开发与运维云效DevOps钉钉宜搭支持服务镜像站码上公益

开发者社区

大数据与机器学习

实时计算 Flink

文章

正文

权威详解 | 阿里新一代实时计算引擎 Blink,每秒支持数十亿次计算

2018-02-08

21534

版权

版权声明:

本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《

阿里云开发者社区用户服务协议》和

《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写

侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

本文涉及的产品

实时计算 Flink 版,5000CU*H 3个月

推荐场景:

实时发现最热Github项目

简介:

阿里巴巴需要研发世界级一流的流式计算引擎,实时处理海量数据,提供在线统计、学习和预测能力,不仅支持阿里巴巴自己的核心电商场景,同时也能通过阿里云向外部中小企业提供流式计算服务,输出实时计算能力,这就是我今天要分享的最新一代阿里巴巴实时计算引擎Blink。

作者介绍 王峰,淘宝花名”莫问",2006年毕业后即加入阿里巴巴集团,长期从事搜索和大数据基础技术研发工作,目前在计算平台事业部,负责实时计算北京研发团队。

在阿里巴巴的11年工作期间,持续专注大数据计算与存储技术领域,基于Hadoop开源生态打造的数据基础设施一直服务于搜索、推荐等阿里核心电商业务场景,最近一年带领团队对Apache Flink进行了大量架构改进、功能完善和性能提升,打造出了阿里新一代实时计算引擎: Blink。目前数千台规模的Blink生产集群已经开始在线支持搜索、推荐、广告、蚂蚁金服等核心实时业务场景。王峰在清华大学演讲实时计算时代来临 随着互联网应用的普及、智能硬件的发展,数据的种类和规模都呈现了爆炸式的增长,各行各业都希望能够从大数据中发掘出更深层次的信息和知识,并产生实际价值。数据挖掘手段也逐渐从基本的数据统计向更高层次的机器学习和深度学习演变,但这些都需要强大的计算能力作为支撑,因此大数据价值的体现离不开大数据计算平台的发展。

目前大数据业界在计算技术上已经取得了显著的成果,例如:第一代开源的大数据处理技术Hadoop已经可以处理超大规模的数据集合,第二代开源的大数据处理技术Spark更好的利用了内存,并进一步加快了大数据处理的性能。

各大公司也都基于自身业务场景和数据规模定制了自己的大数据计算平台,但这些大数据计算平台大都是批处理系统,虽然具备海量数据处理能力,但在时效性上有明显的滞后。显然,数据的价值不仅体现在空间维度上,同时也在时间维度上进行伸展,很多场景下数据的价值也会随着时间的流逝而逐渐消失。因此,大数据计算平台需要能够尽可能的提升计算的时效性,越快地从数据中挖掘出信息就意味着能够获取到更大的价值。

时效性对数据价值的影响尤其在电子商务领域更加明显。通常人们在不同时刻会有着不同的消费需求和潜在目标。很多时候,这些需求和目标都是临时的(即和历史行为关联度较低),并且从产生到结束之间的时间是非常有限的。这种情况在阿里巴巴双十一大促这样的场景中表现的尤为明显。

大促场景下,用户会由于丰富的促销活动和环境而临时产生更多的购物需求,并且每个购物需求的有效期是有限的。因此,搜索和推荐系统需要及时发现用户的需求变化,在数据有效期内完成模型更新,推荐用户当前感兴趣的商品。此外,阿里巴巴的数据大屏也需要在大促期间实时展示成交额等大家关注的统计信息,而不是大促结束后第二天再让大家看到数据。

其实目前不仅在阿里巴巴,各个行业都对大数据时效性的计算需求在日益增加,因此,阿里巴巴需要研发世界级一流的流式计算引擎,实时处理海量数据,提供在线统计、学习和预测能力,不仅支持阿里巴巴自己的核心电商场景,同时也能通过阿里云向外部中小企业提供流式计算服务,输出实时计算能力,这就是我今天要分享的最新一代阿里巴巴实时计算引擎Blink。

流式计算介绍 显然批量计算模型是无法满足当前大数据实时计算需求的,只有流式计算模型才是实时计算的天然计算模型,因此我先介绍下流式计算的基本思想,尤其是区别于传统批量计算的一些概念。批量计算是对于有限固定的数据集合进行处理,流式计算是对无限数据流的处理,即计算无法确定数据何时会结束。从另一个角度看,批量计算其实也可以认为是流式计算的一种特例,因此批量计算可以看做是一个数据流中的片段,即有明确开始和结束标记的数据流,如下图所示: 完善的流式计算不仅应该提供实时计算能力,还应该支持计算过程中的状态管理,状态主要是指计算过程中需要的数据或者变量,例如:统计计算中的aggregation(sum/min/max…),机器学习中的feature和model,状态管理包括这些数据的存储、备份、恢复,版本管理,提供读写访问API,并保证一致性,如下图所示: 此外,完善的流计算还需要考虑数据的时序问题,因为现实场景中,数据的产生顺序和接收顺序未必一致,因此需要给数据附带时间戳属性,即:event time,计算逻辑可以按照数据的event time来处理,这样可以解决数据的乱序问题,配合watermark机制,可以较好的解决time window计算,如下图所示:流和批统一的计算引擎完整的生态系统状态管理和一致性 Chandy-Lamport算法是Flink支持状态管理和强一致性的核心理论基础,算法基础思想如下图所示: Chandy-Lamport算法的核心思想就是定期在流式计算任务中插入Barrier,然后触发整个流做一次Checkpoint,即将任务的State做一次Snapshot持久化保存。在下次任务重启的时候,可以基于上次成功的Checkpoint进行恢复,过程如下图所示:Flink的问题 综上所述,Flink是一套理念和架构设计非常先进的流处理引擎,并几乎支持了流式计算所有的特质,但Flink发展尚在初期,在活跃度和成熟度上稍有欠缺,并且尚未在业内得到大规模生产实践的检验,因此是无法直接应用在阿里巴巴这种级别的生产场景中的,因此我们在2015年下半年启动了Blink项目,目标是扩展、优化、完善Flink,使其能够应用在阿里巴巴大规模实时计算场景,并将此项目命名为Blink,下面我将介绍Blink的设计以及在阿里巴巴的应用。Blink介绍Blink产生背景 在2015年,当时我们还是阿里巴巴搜索事业部的数据技术团队,负责阿里巴巴所有商品搜索后台的数据处理,包括淘宝,天猫,B2B等全球商品,面对海量商品的数据处理,我们需要在维护两套数据处理流程,一套是每天晚上的全量流程,同时还要一套白天的实时增量流程,为了降低开发和维护成本,我们开始探索一套流和批统一的计算引擎。

当时我们重点分析对比了Spark和Flink两套技术,最后虽然觉得Spark相对成熟稳定,但Spark是从Batch出发,模拟Streaming,而Flink正好相反是从Streaming出发,认为Batch是Streaming的Special Case,因此我们感觉Flink的设计思想更先进,更适合未来的计算发展方向,更适合我们的需求,因此我们决定选择Flink技术方向。Blink - Alibaba Flink 虽然Flink具备流计算的各种优势,但Flink在成熟度和活跃度上的不足,使得我们无法在阿里巴巴业务场景中直接使用,因此我们启动了Blink项目,目标就是扩展、优化、完善Flink,使其能够应用在阿里巴巴大规模实时计算场景,并将我们在阿里巴巴对Flink的改进都回馈给开源社区。

最近一年中Blink已经将多项架构、功能和性能改进贡献给Flink社区,例如:

Flink架构升级,插件化原生支持不同调度系统,并实现了原生运行在Hadoop YARN上

Failover稳定性改进,优化了Task/TaskManager以及JobManager各种组件Fail的场景处理

提出并实现了增量式Checkpoint的架构,使得Flink的Checkpoint/Recovery速度大幅提升,成本明显下降

提出并实现了Async Operator,通过异步方式,让I/O密集型计算节点的性能大幅提升

提出了大量Table API的全新设计,以及流和批在SQL层面的统一概念和方案

Blink在阿里巴巴的现状

Blink实时计算引擎在阿里巴巴内部是运行在Hadoop集群上的,Blink计算任务会根据自己的需求向YARN申请计算资源,运行过程中周期性将计算状态持久化到HDFS上,以方便随时恢复,因此可以看出新型的Blink计算平台也可以很好的leverage成熟的Hadoop生态。

在API层,Blink提供了基础的DataStream/DataSet API,用户可以利用基础API有较高自由度的开发。此外,Blink重点提供了Table API/SQL这种高级语言API,可以降低门槛让更多开发人员以更低成本进行开发,这对于更多更快速的业务接入是非常有价值了,而且在SQL层Flink之前的进展是非常缓慢的,Blink对Flink给与了非常及时的补充和完善。

此外,基于Blink,我们建设出了一套在线机器学习平台Porsche,其为算法人员提供了一套非常丰富的算法插件机制,帮助算法人员快速搭建各种常用的机器学习流程。因此,Porsche完全leverage了Blink的实时计算能力,并释放了Blink在实时在线机器学习领域的力量。

目前Blink已经在阿里巴巴生产环境运行将近一年时间,支持了阿里巴巴多条核心业务线,例如:搜索,推荐,推荐,蚂蚁和安全等,大致的生产运行规模如下所示:

运行的总机器数已经超过3000台

最大的生产集群机器数已经超过1500台

每秒支持数十亿次的实时计算

最大的生产任务已经超过5000个并发,包含10TB级的State,亿级TPS

Blink在去年阿里巴巴双11购物节中完成了第一次正式的挑战,搜索和推荐全实时链路全天稳定运行,不仅保证了淘宝、天猫商品实时更新无延迟,同时基于Blink的在线机器学习平台Porsche由于能够较好的将用户和商品行为实时学习,因此产生了非常好的时效性效果,大幅提升了双11商品成交转化率。

例如:双11当天有很多爆款商品,销售速度非常快,可能很快售罄,如果将用户都引导到这些商品上,会导致用户实际没有成交机会,浪费大量流量,良好的时效性数据可以让在线学习平台较快的预测到这种场景,并将用户流量进行更加合理的分配。因此可以看出,基于实时计算的在线机器学习平台其实已经开始真正走向舞台,并产生巨大价值。Blink在阿里巴巴的经典案例

实时A/B Test A/B Test的目标就是通过实时数据分析和统计反馈,不断调整在线系统的算法模型,自动适应到最佳效果, A/B Test数据收集和处理流程大致如下图所示,Blink任务从线上日志实时同步用户行为数据,然后解析、过滤、统计,最终将各项统计指标写入OLAP系统中,让算法或者运营人员可以实时看到线上实际效果,从而合理调整配置各种模型,逐步达到最佳效果。

商品数索引构建流程 淘宝的搜索引擎是用户在淘宝购物的最主要入口,淘宝的商品数据处理和索引构建流程大致如下图所示,淘宝的商品库都存储的阿里巴巴的MySQL集群中,搜索的数据处理流程需要从MySQL将数据同步到搜索引擎后台的HBase存储中(类似:Google都将网页抓取到BigTable中),然后进行各种业务逻辑处理和索引构建,最终将索引推送到在线搜索引擎中提供搜索服务。

由于淘宝的商品搜索引擎需要在每天白天不断进行实时商品更新,同时晚上还需要一套额外的全量商品更新流程,因此基于Blink的统一计算模型,流式计算和批量计算可以使用一套用户逻辑代码完成。Porsche – 在线机器学习平台

在线机器学习平台利用了Blink强大的实时计算能力,能够实时的对海量用户和商品行为数据进行流式特征提取以及训练学习,并将实时更新的特征和模型实时同步给在线的搜索和推荐引擎,实现个性化搜索和推荐,数据流程如下图所示:Blink技术架构

从Blink的架构图中可以看出,Blink在内部模块组成上和Flink是有着非常清晰的界限的,绿色部分是和Flink共享的基础核心框架,Blink在这些框架、协议和接口上的改进都会回馈给社区,保证兼容性。

但蓝色部分是扩展层,例如:资源管理,状态存储,运维监控、Debug工具,输入输出层等,Blink都会根据阿里巴巴技术生态和业务场景进行定制开发,使得Blink能够在和Flink共享基础内核和生态的前提下,依然能够灵活支持阿里巴巴自身的场景需求。

这种架构设计,将之前开源技术的开放通用化和企业需要定制需求的矛盾进行了解耦,使得我们既可以和开源社区密切合作,享受开源的红利,同时也可以根据阿里巴巴自身需求进行高度定制和优化,不会受制于外部不可控因素。

Blink的未来

目前Blink已经在阿里巴巴内部达成共识,成为阿里巴巴统一的实时计算引擎,接下来我们将继续加大在Blink技术发展上的投入,并与开源社区更加密切的合作,突进流式计算的发展。应用场景上,一方面会继续扩大计算规模,并提推出内部统一实时计算服务,统一支持阿里内部的所有实时计算业务;另一方面也将会通过阿里云的公有云和专有云渠道向外界输出我们的实时计算能力,让更多行业和用户也都能享受到阿里巴巴实时计算的技术成果。

总之,Blink的实时计算之路刚刚开启,未来必将有更大的挑战和机遇,也非常欢迎各位对实时计算有兴趣的技术爱好者以及高校学子们投身到这件开创新一代计算平台的事情上来。 作者:王峰

原文链接

阿里云实时计算Flink

目录

热门文章

最新文章

为什么选择阿里云什么是云计算全球基础设施技术领先稳定可靠安全合规分析师报告产品和定价全部产品免费试用产品动态产品定价价格计算器云上成本管理解决方案技术解决方案文档与社区文档开发者社区天池大赛培训与认证权益中心免费试用高校计划企业扶持计划推荐返现计划支持与服务基础服务企业增值服务迁云服务官网公告健康看板信任中心关注阿里云关注阿里云公众号或下载阿里云APP,关注云资讯,随时随地运维管控云服务售前咨询:95187-1售后服务:400-80-13260法律声明及隐私权政策Cookies政策廉正举报安全举报联系我们加入我们阿里巴巴集团淘宝网天猫全球速卖通阿里巴巴国际交易市场1688阿里妈妈飞猪阿里云计算AliOS万网高德UC友盟优酷钉钉支付宝达摩院淘宝海外阿里云盘饿了么© 2009-2024 Aliyun.com 版权所有 增值电信业务经营许可证: 浙B2-20080101 域名注册服务机构许可: 浙D3-20210002 京D3-20220015浙公网安备 33010602009975号浙B2-20080101-4

Blink - 维基百科,自由的百科全书

Blink - 维基百科,自由的百科全书

跳转到内容

主菜单

主菜单

移至侧栏

隐藏

导航

首页分类索引特色内容新闻动态最近更改随机条目资助维基百科

帮助

帮助维基社群方针与指引互助客栈知识问答字词转换IRC即时聊天联络我们关于维基百科

搜索

搜索

创建账号

登录

个人工具

创建账号 登录

未登录编辑者的页面 了解详情

贡献讨论

目录

移至侧栏

隐藏

序言

1发展

2参考资料

3参见

开关目录

Blink

24种语言

العربيةБеларускаяবাংলাCatalàDeutschEnglishEspañolفارسیSuomiFrançaisMagyarItaliano日本語한국어മലയാളംBahasa MelayuPolskiPortuguêsРусскийСрпски / srpskiSvenskaTürkçeУкраїнська吴语

编辑链接

条目讨论

大陆简体

不转换简体繁體大陆简体香港繁體澳門繁體大马简体新加坡简体臺灣正體

阅读编辑查看历史

工具

工具

移至侧栏

隐藏

操作

阅读编辑查看历史

常规

链入页面相关更改上传文件特殊页面固定链接页面信息引用本页获取短URL下载二维码维基数据项目

打印/导出

下载为PDF可打印版

维基百科,自由的百科全书

此条目可参照英语维基百科相应条目来扩充。 (2022年7月14日)若您熟悉来源语言和主题,请协助参考外语维基百科扩充条目。请勿直接提交机械翻译,也不要翻译不可靠、低品质内容。依版权协议,译文需在编辑摘要注明来源,或于讨论页顶部标记{{Translated page}}标签。

  此条目介绍的是由Google主导开发的开源浏览器排版引擎。关于BLACKPINK官方歌迷,请见“BLACKPINK § 歌迷名称”。

Blink开发者The Chromium Project及贡献者首次发布2013年4月3日,​10年前​(2013-04-03)[1]源代码库chromium.googlesource.com/chromium/src/+/master/third_party/blink/

编程语言C++操作系统跨平台类型排版引擎许可协议GNU宽通用公共许可证v2.1和BSD许可证v2.0网站chromium.org/blink

Blink是一个由Google主导开发的开源浏览器排版引擎,Google计划将这个渲染引擎作为Chromium计划的一部分。其代码贡献来自Google、Facebook、Microsoft、Opera Software、Adobe Systems、Intel、IBM、Samsung等[2][3]。它于2013年4月首次发表[4]。

发展[编辑]

Blink渲染引擎是开源引擎WebKit中WebCore组件的一个分支[5],并且在Chrome(28及往后版本)、Opera(15及往后版本)、Yandex、Vivaldi及Microsoft Edge(79及往后版本)等诸多基于Chromium的浏览器中使用[6]。

Chrome的开发者由于希望在浏览器的开发上拥有更大的自由度,同时避免与上游冲突,更可透过移除Chrome没有使用的组件而简化自己的程序库,所以决定开发WebKit的分支版本。根据提交统计,Google自2009年年底以来一直是WebKit代码库的最大贡献者[7]。

Blink命名源自Netscape Navigator浏览器的非标准元素Blink[8][9][10][11]。

参考资料[编辑]

^ Log of /releases/28.0.1463.0/DEPS. [2015-08-31]. (原始内容存档于2018-09-25). 

^ AUTHORS - chromium/src.git - Git at Google. googlesource.org. [2021-02-06]. (原始内容存档于2021-03-31). 

^ Google, Opera Fork WebKit. Samsung Joins Firefox to Push Servo. infoq.com. April 2013 [2021-02-06]. (原始内容存档于2013-04-07). 

^ Blink: A rendering engine for the Chromium project. The Chromium Blog. [3 April 2013]. (原始内容存档于2013-04-21). 

^ Google going its own way, forking WebKit rendering engine. Ars Technica. [3 April 2013]. (原始内容存档于2013-04-06). 

^ Hello Blink. Bruce Lawson's Blog. [2013-04-03]. (原始内容存档于2013-04-04). 

^ Siracusa, John. Hypercritical: Code Hard or Go Home. Hypercritical.co. 2013-04-12 [2013-06-15]. (原始内容存档于2013-06-02). 

^ Google Forks WebKit And Launches Blink, A New Rendering Engine That Will Soon Power Chrome And Chrome OS. TechCrunch. 2013-04-03 [2015-12-02]. (原始内容存档于2015-12-15). 

^ Google parts ways with Apple over WebKit, launches Blink. CNET. 2013-04-03 [2015-12-02]. (原始内容存档于2015-12-03). 

^ The Evolution of the Web, in a Blink. The New Yorker. 2013-05-10 [2015-12-02]. (原始内容存档于2015-12-08). 

^ Kobie, Nicole. Firefox 23 finally kills "blink" tag. PC Pro. 2013-08-07 [2013-11-25]. (原始内容存档于2013-12-02). 

参见[编辑]

Dart编程语言

查论编排版引擎活跃

Blink

Gecko

Goanna

MARTHA

Prince(英语:Prince (software))

Servo

WebKit

停止开发

Elektra

KHTML

Mariner

Presto

Tasman

Tkhtml(英语:Tkhtml)

Trident

EdgeHTML

比较

比较

HTML

CSS

查论编网页浏览器

比较

列表

时间线

使用率

分类

特点

广告拦截

增强浏览(英语:Augmented browsing)

书签

小书签

即时书签(英语:Features of Firefox#Live bookmarks)

智能书签(英语:Smart Bookmarks)

扩展

安全(英语:Browser security)

同步

比较(英语:Comparison of browser synchronizers)

Cookie

下载管理器

Favicon

增量查找(英语:Incremental search)

插件

无痕浏览

标签页

通用编辑按钮(英语:Universal Edit Button)

网页标准

Acid测试

HTML

HTML5

CSS

SVG

XHTML

WebGL

JavaScript

数学置标语言

协议

超文本传输协议

超文本传输安全协议

在线证书状态协议

SPDY

传输层安全性协议

WebSocket

网络代理自动发现协议

相关主题

BrowserChoice.eu

证书吊销列表

iLoo(英语:iLoo)

网络包

浏览器中间人攻击(英语:Man-in-the-browser)

移动端网页(英语:Mobile Web)

离线浏览

代理自动配置

Pwn2Own

丰富互联网应用程序

指定网站浏览器(英语:Site-specific browser)

控件

万维网

XML

 计算机平台Blink排版引擎

Chromium

Google Chrome

科摩多龙安全浏览器

Avast Secure Browser

Naver Whale

SuperBird

SRWare Iron

Catalina Citrio

CocCoc Corom

Brave

Vivaldi

Opera(15~)

Yandex Browser

Microsoft Edge

Torch

CCleaner Browser

Catsxp

Coowon

Orbitum

BlackHawk

uCoz Uran

Ortigra Titanium

HiddenReflex EpicPrivacy

PlayFree

Beamrise

Baidu Spark

红芯浏览器

七星浏览器

Jutao Caimao

Rambler Nichrome

Ishenyou 265gChrome

WebKit排版引擎

Safari

Amazon Silk(英语:Amazon Silk)

Konqueror

Epiphany(2.28~)

iCab(4.0~)

OmniWeb(4.0~)

ABrowse

Uzbl

Falkon

Dooble

Midori

Rekonq

SkyKruzer

Arora

Flock

Shiira

Gecko排版引擎

Firefox浏览器

GNU IceCat

Waterfox

IceWeasel

Comodo IceDragon

Cyberfox

K-Meleon

SeaMonkey

Galeon

SwiftWeasel

XB Browser

Netscape

Camino

Beonex Communicator

Trident排版引擎

Internet Explorer

GreenBrowser

SlimBrowser

2345加速浏览器

MyIE

KKman

PCMan Combo

MSN Explorer

WebbIE

MenuBox

Crazy Browser

Deepnet Explorer

GOSURF

iRider

mxie

NeoPlanet

AOL Explorer

Deepnet Explorer

NeoPlanet

NetCaptor

MediaBrowser

SpaceTime

UltraBrowser

混合排版引擎

Sleipnir

Lunascape

猎豹安全浏览器

淘宝浏览器

爱帆浏览器

枫树浏览器

太阳花浏览器

世界之窗浏览器

360极速浏览器

360极速浏览器X

搜狗高速浏览器(2.0~)

傲游浏览器(3.0~)

QQ浏览器(5.0~)

其他排版引擎

NetSurf

abaco(英语:abaco (web browser))

Amaya

KidZui(英语:KidZui)

Charon(英语:Charon (web browser))

Dillo

Gazelle

IBM Watson Explorer

Arachne(英语:Arachne (web browser))

Arena

IBM Home Page Reader

IBrowse

Links

Mosaic

Mothra(英语:Mothra (web browser))

NetPositive

苍月浏览器(26~)

纯文字排版引擎

ELinks(英语:ELinks)

Lynx

w3m

Emacs/W3

Line Mode Browser

Net-Tamer

 移动平台Blink排版引擎

Chromium

Google Chrome

Avast Secure Browser

三星浏览器

Naver Whale

Brave

Vivaldi

Opera

Yandex Browser

Microsoft Edge

Via浏览器

Android浏览器

WebKit排版引擎

Safari

Amazon Silk(英语:Amazon Silk)

Konqueror

海豚浏览器

S60 web browser

Steel

BOLT

Firefox for iOS

Naver Whale for iOS

Gecko排版引擎

Firefox

GNU IceCat

Waterfox

MicroB

Minimo

Trident排版引擎

UC浏览器

傲游云浏览器

Internet Explorer Mobile

其他

Blazer

ibisBrowser

NetFront

Obigo Browser

Skweezer

Skyfire

Teashark

ThunderHawk

uZard Web

Vision

WinWAP

Smooz(日语:Smooz)

Galio

Deepfish

Iris浏览器

 电视机和电子游戏机Gecko排版引擎

Kylo

Presto排版引擎

Internet Channel

Opera设备浏览器

Nintendo 3DS Internet Browser

WebKit排版引擎

Google TV

NetFront

Steam

其他

MSN TV

Galio

删除线格式为停止开发的项目

查论编Opera软件软件

Opera

历史(英语:History of the Opera web browser)

特色(英语:Features of the Opera web browser)

Opera Coast(英语:Opera Coast)

Opera Dragonfly(英语:Opera Dragonfly)

Opera Mail(英语:Opera Mail)

Opera Mobile

Opera Mini

Nintendo DS Browser

技术

Blink

Presto

Opera Show Format(英语:Opera Show Format)

网站

My Opera

相关

哈肯·维姆·莱

谭咏文

盖尔·伊瓦尔绥

挪威电信

Vivaldi

取自“https://zh.wikipedia.org/w/index.php?title=Blink&oldid=80051109”

分类:​自由排版引擎Webkit衍生软件隐藏分类:​自2022年7月需要从英语维基百科翻译的条目需要从英语维基百科翻译的条目

本页面最后修订于2023年12月9日 (星期六) 09:51。

本站的全部文字在知识共享 署名-相同方式共享 4.0协议之条款下提供,附加条款亦可能应用。(请参阅使用条款)

Wikipedia®和维基百科标志是维基媒体基金会的注册商标;维基™是维基媒体基金会的商标。

维基媒体基金会是按美国国内税收法501(c)(3)登记的非营利慈善机构。

隐私政策

关于维基百科

免责声明

行为准则

开发者

统计

Cookie声明

手机版视图

开关有限宽度模式

Blink首页、文档和下载 - 阿里数据处理平台 - OSCHINA - 中文开源技术交流社区

Blink首页、文档和下载 - 阿里数据处理平台 - OSCHINA - 中文开源技术交流社区

Gitee

资讯

专区

问答

活动

软件库

Tool

博客

培训

众包

登录

注册

开源软件库

/

数据处理

/

大数据

/

Blink

Blink

阿里数据处理平台

收藏63

评论0

分享

微信

QQ

微博

纠错

Blink 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!

Blink 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!

2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!

2021 年度 OSC 中国开源项目评选 >>> 中场回顾

Blink 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !

授权协议

Apache

开发语言

Java

查看源码 »

操作系统

跨平台

软件类型

开源软件

所属分类

大数据、 数据处理

开源组织

地区

不详

投 递 者

红薯

适用人群

未知

收录时间

2013-04-09

软件首页

软件文档

官方下载

极速下载

概览

资讯

博客

问答

安全信息

软件简介

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告

Blink 最初是阿里巴巴内部的 Apache Flink 版本代号,基于阿里的场景做了大量的优化和稳定性改造工作。在经过一些讨论之后,我们决定将Blink的所有代码捐赠给Flink社区,并将其开源从而成为Flink社区的一部分。我们希望Blink的代码和经验能够帮助更多使用Flink的人,解决一些我们已经碰到过的问题。最终我们也希望和社区一起讨论和努力,将Blink中比较好的一些特性反馈回社区,为繁荣社区也出上我们一份力。

这次开源的Blink版本,主要是基于flink 1.5.1,也从社区的后续版本pick了一些比较有用的新特性和bugfix。除此之外,我们也加入了大量的新功能,在性能和稳定性上也做了很多优化。接下来我们会按模块来简单介绍下一些重要的新特性和改动。

API兼容性

DataStream和DataSet API基本和Flink 1.5.1版本兼容,只有OneInputStreamOperator、TwoInputStreamOperator、StreamOperator、RuntimeContext接口有变化,主要原因是为了使stream operator具有运行batch作业的能力

TableAPI和SQL有部分不兼容的修改

UDF、UDTF、UDAF的接口定义移到api包目录下,同时在涉及到返回类型的API上不兼容

Runtime

为了解决阿里巴巴生产场景中遇到的各种挑战,Blink对Runtime架构、效率、稳定性方面都做了大量改进:

架构

Blink设计了新的调度架构,开发者可以根据计算模型自己的特点定制不同调度器;

新的计算模型或者新的硬件都需要不同Shuffle进行适配,Blink引入的Pluggable Shuffle Architecture,方便用户对Flink Shuffle 生态进行扩展;

Blink Runtime的全栈上都支持用户对资源的精确控制和匹配。

效率

Blink引入了Operator DAG机制,替换了原有的OperatorChain,避免了不必要的数据传输开销;

Pipeline Shuffle经过ZeroCopy的改造之后,网络层内存消耗大量减少;

优化BroadCast Shuffle中大量不必要的序列化和反序列化开销;

稳定性

提供了新的JM FailOver机制,大大减少了JMFailOver对JOB的影响——JM发生错误之后,重新接管整个JOB而不是重启JOB

生态和功能

原生支持Kubernetes(实验功能),不同于Standalone模式在K8s上的拉起,新功能在FLIP-6提出的架构上实现原生的融合,根据job的资源需求动态的申请/释放Pod来运行TaskExecutor,实现资源弹性提升资源的利用率

实现了基于Yarn的External Shuffle Service,可以让任务执行完成之后及时归还资源

增加了sorted map state

SQL

我们在SQL层进行了大量的重构和优化,包括类型系统重构,基础数据结构的升级统一。同时我们也做了技术架构上的调整,SQL和TableAPI的程序最终执行的时候将不会翻译到DataStream和DataSet这两个API上,而是直接构建可运行的DAG。因此这个版本的SQL和TableAPI不能和DataSet这个API进行互相转换,但保留了和DataStream API互相转换的能力(将DataStream注册成表,或将Table转成DataStream后继续操作)。一些主要的并且流和批共享的新功能和优化如下:

加入了DDL的支持,主要是CREATE TABLE语法,支持primary key,unique key等constraint,同时还支持计算列和watermark

加入了多Sink的支持,在SQL中如果同时有多个insert into语句,我们会尝试将多个sink编译在一个DAG中,并且将中间部分进行复用(最典型的比如source)减小代价

从社区较新版本pick了SQL CLI的功能,方便用户体验SQL的一些基本功能

基于配置项来设置并发和资源,同时也支持最细粒度到算子级别的资源配置

增加了对Decimal的支持,可自定义precision和scale

增加了隐式转换的支持

增加了数十个优化规则,以及多种统计信息的收集和推导,帮助我们基于代价的优化器选择更优的plan

精确控制所有算子使用的内存,最大限度的避免运行时OOM的产生

内置支持Parquet和Orc两种文件格式

接下来将分为streaming和batch分别介绍各自特有的一些优化和实现:

Streaming SQL

Streaming SQL部分积累了我们内部线上业务过去一两年间所做的大量新特性和优化,主要包括:

维表Join支持,通过继承LookupableTableSource接口的source即可被作为维表使用

MiniBatch执行模式,在aggregate、join等需要和state频繁交互的算子中,我们加入了基于小batch来执行的一种模式。用户可以配置一个batch的大小同时控制端到端的延迟,我们会基于这两个因素来动态影响batch的策略

InnerJoin的state优化,我们针对常用的双流inner join进行了大量的和state相关的性能优化

TopN支持,我们会识别用户基于over window以及rank来实现类似topn需求的执行计划,并将其优化为一种高效的实现

Aggregate数据倾斜处理,我们增加了2阶段改写的功能,能够有效避免aggregate尤其是涉及到distinct后聚合时容易造成数据倾斜的问题

Batch SQL

Batch SQL也是我们优化和实现新feature的一个重点,主要包括:

支持所有join的类型,包括inner、left、right、full。同时也包括semi和anti join

支持hash join,sort merge join,nestedloop join等实现策略

支持sort aggregate和hash aggregate

支持多种over window语法

支持多种sub query的写法比如in,exits等,并且会生成比较高效的执行计划

支持tumbling和sliding window

支持多种高级分析语法,如cube、rollup、grouping set等

算子spill数据加入了压缩的支持

支持Runtime Filter,可以在join之前使用bloom filter过滤大量无用的数据

支持基于统计信息的join reorder

支持在优化过程中移除不必要的shuffle和排序

支持所有TPCH和TPCDS的query

TableAPI

TableAPI在功能上是SQL的超集,因此上面提到的新增加的stream/batch SQL的功能,我们在tableAPI也添加了相对应的API。除此之外,我们还在TableAPI上引入了一些新的功能。这里我们列举一个比较重要的功能。

为了增强interactive programming体验,我们添加了cache功能。有了这个功能之后用户可以根据需要来cache计算的中间结果,从而避免不必要的重复计算。这个功能目前只对batch job有效

后续我们会在tableAPI上添加更多有用的功能。很多新功能已经在社区展开讨论。

Catalog

在catalog上做了如下修改和优化:

通过引入全新的 ReadableCatalog and ReadableWritableCatalog 接口统一了 Flink 的内部和外部 catalog。Flink 所有的 catalog 会被 TableEnvironment 中的 CatalogManager管理。

实现了两种新的 catalog - FlinkInMemoryCatalog and HiveCatalog。FlinkInMemoryCatalog 会将所有元数据存在内存中。HiveCatalog 会连接 Hive metastore 并桥接 Flink 和 Hive 之间的元数据。目前,这个HiveCatalog 可以提供读取 Hive 元数据的能力,包括数据库(databases),表(tables),表分区(table partitions), 简单的数据类型(simple data types), 表和列的统计信息(table and column stats)。

重新清晰定义了引用目标的层级,即 'mycatalog.mydatabase.mytable'。通过定义默认 catalog 和默认数据库,用户可以将引用层级简单化为 'mytable’。

未来,我们还将加入对更多类型的元数据以及catalog的支持。

Hive兼容性

我们的目标是在元数据(meta data)和数据层将 Flink 和 Hive 对接和打通。

在这个版本上,Flink可以通过上面提到的HiveCatalog读取Hive的metaData。

这个版本实现了HiveTableSource,使得Flink job可以直接读取Hive中普通表和分区表的数据,以及做分区的裁剪。

通过这个版本,用户可以使用Flink SQL读取已有的Hive meta和data,做数据处理。未来我们将在Flink上继续加大对Hive兼容性的支持,包括支持Hive特有的data type,和Hive UDF等等。

Zeppelin for Flink

为了提供更好的可视化和交互式体验,我们做了大量的工作让Zeppelin能够更好的支持Flink。这些改动有些是在Flink上的,有些是在Zeppelin上的。在全部推回Flink和Zeppelin社区之前,可以使用这个Zeppelin image(具体细节请参考docs/quickstart/zeppelin_quickstart.md)来测试和使用这些功能。新添加的Zeppelin功能包括:

支持3种运行模式提交Flink job:Local, Remote和Yarn

支持运行tableAPI和文本SQL

支持对静态table和动态table的查询

能够自动关联Job URL

支持cancel Job, 支持resume job with savepoint

在Flink Interpreter里可以使用ZeppelinContext的高级功能,比如创建控件

提供3个built-in的Flink tutorial的例子: Streaming ETL, Flink Batch Tutorial, Flink Stream Tutorial

Flink Web

我们在 Flink Runtime Web 的易用性与性能等多个方面进行了改进,从资源使用、作业调优、日志查询等维度新增了大量功能,使得用户可以更方便的对 Flink 作业进行运维。

资源使用:新增 Cluster、TaskManager 与 Job 三个级别的资源信息,资源的申请与使用情况一目了然。

作业调优:作业的拓扑关系及数据流向可以追溯至 Operator 级别,Vertex 增加 InQueue,OutQueue等多项指标,可以方便的追踪数据的反压、过滤及倾斜情况。

日志查询:TaskManager 和 JobManager 的日志功能得到大幅度加强,从Job、Vertex、SubTask 等多个维度都可以关联至对应日志,提供多日志文件访问入口,以及分页展示查询和日志高亮功能。

交互优化:对页面交互逻辑进行了整体优化,绝大部分关联信息在单个页面就可以完成查询和比对工作,减少了大量不必要的跳转。

性能提升:使用 Angular 7.0 进行了整体重构,页面运行性能有了一倍以上的提升。在大数据量情况下也不会发生页面假死或者卡顿情况。

展开阅读全文

代码

的 Gitee 指数为

超过 的项目

评论

点击引领话题

发布并加入讨论

给软件打分:

程六金

发表于AI & 大数据专区

2019/01/28 08:49

选择理由,精准屏蔽

不看该作者

不感兴趣

内容质量不好

广告

内容已过时

取消

确定

阿里 Blink 正式开源,重要优化点解读

Apache Flink 是德国柏林工业大学的几个博士生和研究生从学校开始做起来的项目,早期叫做 Stratosphere。2014 年,StratoSphere 项目中的核心成员从学校出来开发了 Flink,同时将 Flink 计算的主流方向定位为流计算,并在同年将 Flink 捐赠 Apache,后来快速孵化成为 Apache 的顶级项目。 阿里巴巴在 2015 年开始尝试使用 Flink。但是阿里的业务体量非常庞大,挑战也很多。彼时的 Flink 不管是规模还是稳定性尚未经历实践,成熟...

18

56

微信

QQ

微博

举报

oschina

发表了资讯

2014/01/15 00:00

选择理由,精准屏蔽

不看该作者

不感兴趣

内容质量不好

广告

内容已过时

取消

确定

Chrome 渲染引擎 Blink 的 2014 年计划

Google工程师公布了Chrome渲染引擎Blink的2014年工作目标。Google在2013年4月宣布从WebKit切换到Blink。Blink的2014年目标主要是集中在改进移动版性能,包括改进平滑滚动、动画和输 入响应,以及减少内存占用和电力消耗。 其它目标集中在改进浏览器移动Web平台,模糊本地应用和浏览器Web应用的界限,支持应用离线模式,Web应用支 持推送通知和硬件特定功能。 Google还将继续从Blink中清理它不需要的代码。Blink的路线图过度向移...

10

8

微信

QQ

微博

举报

oschina

发表了资讯

2013/04/16 00:00

选择理由,精准屏蔽

不看该作者

不感兴趣

内容质量不好

广告

内容已过时

取消

确定

谷歌宣布改用Blink引擎不到一周 商标被微软抢注

据国外媒体报道,就在谷歌宣布放弃WebKit转而开发自主浏览器渲染引擎Blink后不到一周,微软就向美国专利商标局提交了Blink商标申请。 谷歌在4月3日宣布,将放弃WebKit转而开发、使用自主渲染引擎Blink。距此还不到一周时间,微软就在4月9日向美国专利商标局提交了Blink商标申请。 在质疑微软动机之前需要指出的是,该软件巨头此前已经开发了一款名为Blink的Windows Phone 8应用。该应用允许用户使用手机进行连拍,从而挑选最佳照...

30

4

微信

QQ

微博

举报

没有更多内容

加载失败,请刷新页面

点击加载更多

加载中

下一页

{{o.author.name}}

发表了博客

{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}

{{parseInt(o.viewCount) | bigNumberTransform}}

微信

QQ

微博

举报

没有更多内容

暂无内容

{{o.author.name}}

发表了问答

{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}

{{parseInt(o.viewCount) | bigNumberTransform}}

微信

QQ

微博

举报

没有更多内容

暂无内容

暂无内容

Awesome 软件

换一换

13层 - 基于文本的冒险游戏

OpenSCAD - 3D建模软件

Datav.js - 可视化 JavaScript 库

croc - 跨平台文件传输工具

MathOCR - 数学公式识别系统

LITIENGINE - 纯 Java 2D 游戏引擎

Tor Browser

BudiBase - 构建内部工具的开源低代码平台

Openfire - 即时消息传输平台

Bottom - 跨平台图形化进程监控器

QLExpress - java表达式计算

SOFAEnclave - 机密计算解决方案

Electron - 跨平台桌面应用开发工具

Skyve - 业务软件构建平台

Kity Minder - 在线脑图编辑器

PPSSPP - PSP 游戏模拟器

ChatHub - 多合一聊天机器人客户端

RobWork - C++ 机器人库

JS-Flappy-Bird - Flappy Bird 的 JS 开源汉化版

赫蹏 - 中文排版样式增强

LaWGPT - 基于中文法律知识的大语言模型

餐厅放置 - 策略挂机放置类小游戏

KnightOS - 计算器操作系统

Fathom - 使用 Go 和 Preact 构建的网站分析工具

spaCy - NLP 自然语言文本处理库

Solvespace - 参数化的3D CAD程序

GPT4All - GPT4 平替版本

Octotree - 树形展示 GitHub 项目代码

PrimiHub - 隐私计算平台

SU2 - 多物理场仿真与设计

热门内容

更多精彩内容

开源日报 | 买手机送大模型;“钓鱼式维权”须遏制;“AI原生”骗局江湖

Vue 团队开源 Rolldown:基于 Rust 的 JavaScrip 打包工具

FreeBSD 13.3 发布

OpenAI CEO Altman 重新加入董事会

重磅发布|AutoMQ 1.0.0 GA 版本官宣:已验证生产环境可用性

中国开发者团队打造、AI原⽣编程语⾔——MoonBit(月兔)宣布开源核心库

ShopWind v4.7 更新,多语言外贸商城系统

阿里巴巴集团 CEO 吴泳铭:通义千问正加快追赶 GPT-4

开源日报 | RISC-V 能否和 x86、Arm 一起成为三大主流架构;给阎王开发地府管理系统

工信部:准备试点开放互联网数据中心

央视评“某自助建站软件”系列案:知识产权“钓鱼式维权”

微软计划 3 月底发布首款 AI PC

Visual Studio 2022 v17.9:面向 C++ 开发人员的全面更新

Socket.D v2.4.6 发布

开源 OA 办公系统 — 勾股 OA 4.97.38 发布

大模型在产品原型生成中的应用实践

go-carbon v2.3.10 发布,轻量级、语义化、对开发者友好的 golang 时间处理库

IntelliJ IDEA 2024.1 Beta 发布,解绑 AI 助手

PieCloudDB Database 3 月产品动态丨功能再度升级,安全机制更加完善

Bytebase 2.14.0 - 自定义角色支持自定义权限

用户案例|Milvus 助力 Credal.AI 实现 GenAI 安全与可控

可视化监控云平台/智能监控EasyCVR如何使用脚本创建ramdisk挂载并在ramdisk中临时运行

涛思数据公布「2023 年度中国时序数据应用创新奖」,这些企业的数字化转型值得借鉴

直播分享 | 基于OpenVINO与文心大模型实现多场景下关键信息抽取

星环科技基于第五代英特尔®至强®可扩展处理器的分布式向量数据库解决方案重磅发布

智能视频监控平台EasyCVR级联后,上级平台如何获取下级的云端录像?

技术创新,照见未来 | 2023 开放原子开发者大会 OpenHarmony 分论坛圆满举行

实战干货!基于ERNIE Bot SDK的数字诗人聊天开发教程

用 CloudCanal 快速验证阿里云 EMR for StarRocks 和 Doris

2024年Apache DolphinScheduler RoadMap:引领开源调度系统的未来

打造创新的金融数据平台,加速数字化和智能化转型丨PingCAP 官网金融行业专区上线

创见工坊|Zilliz 合伙人和技术总监 栾小凡 《解密大模型时代下的 AI Native 数据库 Milvus》

JeecgBoot Vue3前端项目性能优化&按需加载方案

Last Week in Milvus

TinyEngine 开源低代码引擎使用手册正式上线啦~~~

限时开发、码力全开、2w奖金!AGI Hackathon等你挑战!

权威整理!2023年度数据库回顾:Databases in 2023: A Year in Review

高能有料 | 第二届OpenHarmony技术大会议程速递

AI视频智能识别技术在智慧农业大棚升级改造管理场景中的应用方案

Java 函数方法指南:如何获取给定日期的月份最后一天

2023 年度国内低代码平台排名榜 (这5款低平台备受欢迎!)

WhaleStudio 分钟级构建 AI 模型,强大 Ops 能力简化模型调度与部署

JeecgBoot官方已经推出了SpringBoot 3分支(支持jdk17和springboot3)

WorkPlus构建安全高效的内网通信平台,助力企业内部协作

Apache DolphinScheduler 3.1.9 版本发布:提升系统的稳定性和性能

私域流量怎么运营最有效?

如何评估 RAG 应用的质量?最典型的方法论和评估工具都在这里了

WorkPlus Meet实现企业局域网视频会议的领先解决方案

脑力碰撞,技术盛宴!飞桨护航计划集训营来啦!

“AI换脸”竟骗走2亿元!视频会议中,怎么识别诈骗分子?

全球领先的即时通讯厂家,为企业提供卓越沟通解决方案

行业首家!百度通过DCMM 4级乙方云服务商最高认证,数据管理能力行业领先

腾讯蓝鲸 游戏服务全链路、真全栈无盲点可观测实践

Apache DolphinScheduler 在联想作为统一调度中心的落地实践

【精彩回顾】恒拓高科亮相第十一届深圳军博会

一文讲清楚StoneDB的时间日期类型格式串用法

「模问题」AI原生小游戏强势来袭,一起为AI失眠吧!

科普:什么是视频监控平台?如何应用在场景中?

文心ERNIE Bot SDK+LangChain:基于文档、网页的个性化问答系统

领跑 AI 时代,开放原子开发者大会——2023 龙蜥操作系统大会圆满举办

信息与数据安全前沿分论坛圆满举办

日历管理:应对金融服务行业数据调度的复杂挑战

打造安全可靠的阅后即焚聊天平台,保护你的隐私

江铃晶马 X 袋鼠云:搭建企业级数据资产中心,推进打造“智数晶马”

智能远程监考方案助力企业考试化繁为简

【中秋国庆不断更】OpenHarmony定义扩展组件样式:@Extend装饰器

从理论到实践,实时湖仓功能架构设计与落地实战

视频推拉流EasyDSS平台直播通道重连无法转推的原因排查与解决

PingCAP 受邀参加 FICC 2023,获 Open100 世纪全球开源贡献奖

浅述无人机技术在地质灾害应急救援场景中的应用

「X」Embedding in NLP|Token 和 N-Gram、Bag-of-Words 模型释义

开发者实战 | 在英特尔独立显卡上加速 HALCON AI 模型推理

以 Kubernetes 原生方式实现多集群告警

数据迁移原理(从 MySQL 5.7/8.0 迁移到 StoneDB 2.0)及技术答疑 | StoneDB 使用教程 #3

视频共享融合系统EasyCVR点击通道后页面分页不显示是什么原因?如何解决?

AI赋能,轻松出爆文!AI新闻创作新时代,你准备好了吗?

实战|如何低成本训练一个可以超越 70B Llama2 的模型 Zephyr-7B

run-llm.sh,一键在本地跨平台运行大语言模型

DolphinDB x 龙蜥社区,打造多样化的数据底座

社区供稿 | QLoRA 增量预训练与指令微调,及汉化 Llama2 的实践

2024 年 Kotlin Multiplatform 发展路线图 | 官方博客

AI智能分析平台/可视化监控云平台EasyCVR邮箱验证功能的实现操作

五周年活动周历!AutoGen解析·技术畅聊·3大城市工坊本周启动!

Databend 源码阅读: Storage 概况和 Read Partitions

邀请函 | JetBrains 联合上海 KUG,仅限开发者参加的返工派对!

开发者实战 | 行人摔倒检测 - 在英特尔开发套件上基于 OpenVINO™ C# API 部署 PP-Human

Databend 开源周报第 134 期

如何成功将 API 客户的 transformer 模型推理速度加快 100 倍

TDengine 资深研发深夜爆肝整理,又一篇技术干货出炉了!

开发者实战 | AI for Science:OpenVINO™ + 英特尔显卡解薛定谔方程

社区供稿 | Mixtral-8x7B MoE 大模型微调实践,超越 Llama2-65B

视频监控管理平台/智能监测/检测系统EasyCVR出现内核报错导致无法播放,该如何解决?

如何在uniapp框架中集成H.265流媒体视频播放器EasyPlayer.js?

WorkPlus Meet私有化视频会议内网部署

一镜到底 ElasticSearch 数据迁移同步技术

浅析利用AI智能识别与视频监控技术打造智慧水产养殖监管系统

软件定义世界 开源共筑未来 首届“开放原子开源大赛”火热进行中

数智化视频AI技术为智慧防汛筑基,构建防汛“数字堤坝”

百度安全获评工信部移动互联网应用服务能力提升优秀案例

全站热门评论

梅子酒好吃 2024-03-09 10:06

让更多人用上,也是“生态”的重要内容:)。。。已经有人提议做更多的对比测试了,让他们了解更多情况。。。到时候,欢迎再来评论:)

roomsss 2024-03-05 09:48

小心我们僧哥自创个redis 中国. 然后自封为redis mvp. mpp,

闲大赋 2024-02-18 20:49

我对此专利的解读『 https://my.oschina.net/xiandafu/blog/11043929』

c

cassan 2024-03-01 22:19

开源了,我们国内的公司又可以申请知识产权了

dantezhu 2024-02-28 11:20

那,这就叫专业。

l

liaoxuewei 2024-03-02 12:58

你小心被咬

2

2cong 2024-02-26 11:21

如果让我抄,我就会!

小xu中年 2024-03-09 16:51

rust

o

osc_91760530 2024-03-09 20:52

rust

小xu中年 2024-03-08 22:05

支持

johng 2024-03-09 08:50

pyton是啥?

gmg 2024-02-26 22:23

有点好奇为什么发布这种表面看起来吸引眼球的标题。

d

dwcz 2024-02-18 22:12

中国法治的水平:二创可以演绎原创,三创不能演绎二创。

Soi 2024-03-09 13:48

记事本

i

iVista 2024-03-07 13:04

张小龙没()

小xu中年 2024-03-08 22:03

太酷了

osc_94406955 2024-03-01 09:29

预计该问题会在 24 小时内彻底解决............. 今天3月1日了,bug神奇的消失

杜福忠 2024-03-09 13:55

谢大 NB~

天朝八阿哥 2024-02-29 10:32

虽然不懂,但表示很赞,比随便就冠以“国产”“自主研发”之类的让人舒心太多了

一个喷嚏是思念 2024-03-09 11:14

虽然没太看懂,但是感觉很牛逼

luwenhua 2024-03-05 18:18

其实用用惯了,比windows省心多了

z

zyhhb 2024-03-08 20:21

哈库纳 2024-03-09 14:26

感谢你的测试,我看到了你的 issue。你可能没有理解那个 demo,dbVisitor 中 spring boot demo 工程本身就不是 web 工程。启动后调用 dao 结束后进程就会退出不会驻留。它的测试类入口是 DemoApplicationTests

t

tedx53 2024-02-27 09:42

高考状元的试卷给我抄,我也能轻松上清华

听枫2005 2024-03-09 17:28

OpenAI是开源的吗?

swpcsoft 2024-03-09 05:14

通义千问正在等待OpenAI后续开源。

小肥侠 2024-02-19 17:51

所以将开源软件打包到应用商店,是真的有市场。

高排量低炭烧 2024-02-26 21:29

鸿蒙只是人家现学的,人家本来薪水就这么高,而不是新手培训完就值这个数

卢温禾 2024-03-09 16:02

编译器源码开源好评,不知是否自举

大风起兮9527 2024-02-06 08:57

这事没啥好讨论的啊,代码如果开始的时候是开源,那么你有闭源的权利,但是要从声明之后的版本开始,不能回溯。文档也是如此,但是有一点,如果文档虽然没有声明开源,但是自己在公开场合发布过,你可以建议请求不要随意传播,但是不能强硬的禁止。关于白嫖,这个说法过分了,对于这些想要商业化的项目,开源伊始的初心,无非是面推广费、免费测试。各有所图,不要互相指责。

魔力猫 2024-02-01 14:19

最近这些事件的主角,初心绝对不是什么为了创造啥,为的只是赚钱。开源只是赚钱手段,而且是觉得自己为了钱放弃很多的那种心态,心理先把自己当成了牺牲者,然后认为所有人都应该补偿自己。不拿钱补偿就是忘恩负义的白眼狼!

CCCZZCCC 2024-03-07 08:46

每次看到你,就想着进来看看笑话,结果咱是首评...

复二呆 2024-03-08 22:58

AutoMQ怎么不兼容RocketMQ

漫步海边小路 2024-03-09 20:23

直接用rust写wasm得了,哈哈

贰零壹8 2024-03-09 20:32

为什么啊?

朋克 2024-02-28 11:36

这才是正常的盈利模式

monkey_cici 2024-02-26 11:39

开源系统还是要看民企的深度统信和华为欧拉...

o

osc_91229770 2024-02-18 12:03

这也申请专利,这个不是正常crud,常规操作吗

Yoona520 2024-02-24 17:44

国外那个P站的技术水准可不低,毕竟服务全世界除CN之外的人

程序人生2015 2024-03-09 09:37

如果啊:joy:。我觉得搞一篇吸引流量的软文没毛病,主要精力放在功能性好生态上更加务实一些,加油啊,为爱发电!

小xu中年 2024-03-09 16:52

优秀,支持算各种时间差吗?

t

troika 2024-03-08 14:54

外企:你继续说,我在走。

单一结构 2024-03-09 01:29

看不懂,但是觉得很牛逼

zhangjinsongok 2024-02-01 16:29

开源世界的孤胆英雄。

monkey_cici 2024-03-09 18:14

图片广告软文....oschina现在收软文推广费了?

孤独的探索号 2024-03-09 12:48

欢迎 点亮 ⭐️ Star、使用及反馈,还可以推荐给 测试、测试开发、自动化、Android 开发 人员哈~

三刀_sandao 2024-03-08 19:47

个人学习免费,企业赞助授权

zoujiaqing 2024-03-09 14:00

FreeBSD 14 开始非常值得学习使用了

jojy 2024-03-09 09:55

开源中国你们关闭评论吧。什么都屏蔽

fjp203 2024-03-09 09:32

大家别成天贬低,我觉得阿里的ai,包括ant design等开源项目都还可以,在国产里面算做的比较好的。

yl-yue 2024-02-18 13:49

操作也是相当炸裂,原来还可以这样玩,字太多了没读透,我的理解,就算是鸡肋专利也够他们吹嘘了,要是限制性专利,那是相当牛逼,开源行业要炸。

u

unameuname 2024-02-19 14:02

第一次钓鱼,别TM给我鱼竿,我只要鱼。

msscn 2024-03-09 14:35

通义千问比文心一言好多了,但是跟GPT综合比起来有很强差距,Code差距倒是不是特别大。多多加油!

J

JesseChain 2024-03-09 20:31

我感觉现在的前端工具链速度慢最主要的原因是不能很好的利用多核cpu,大部分工具都不支持多线程。如果用其它语言重构后还是只依靠单核,则现状不会被改变

k

kylexy 2024-02-26 10:38

大实话。。。。

LibreSoftc 2024-03-08 19:30

再整个油猴脚本自动翻译就完美了

记得小蘋初见123 2024-02-29 16:53

百小僧,出列

CheckStyle 2024-02-21 18:45

关键是什么业务?10个人,2023年,一年,赚2000多万,泼天的富贵啊

开源中国首席路人王 2024-03-09 11:32

现在写C都用什么IDE?

风一样的Man 2024-03-06 10:50

我还没开始用, 你就砍掉了

软件作者

本软件还没有认证的作者

认证为作者

邀请作者认证

此软件还没有被作者认证,快来邀请作者认证吧!

成功邀请奖励:

开源伯乐勋章

专属邀请文案:

你的软件 “Blink” 被开源中国社区收录啦,快点击 https://www.oschina.net/p/blink 认证为软件作者吧!

复制邀请文案

同类软件推荐

更多

ezdata数据处理分析和任务调度系统

ezdata 是基于python后端和vue3前端开发的数据处理分析和任务调度系统。 其主要功能如下 多数据源管理,支持连接文件,关系型数据库,nosql数据库,时序数据库,图数据库等多种数据源...

OneTableLakehouse 表格式间全方位互操作

OneTable 是一种表格式的全方位转换器,可促进数据处理系统和查询引擎之间的互操作性。Apache Hudi、Delta Lake 和 Apache Iceberg 之间无缝互操作。 One...

esProc SPL数据分析引擎

esProc SPL 是一款面向结构化和半结构化数据的计算和处理引擎,可以用做分析型数据库和数据计算中间件。 esProc SPL 具有精心设计的丰富库函数和强大的语法,可通过 JDBC 接口在...

DIDI-ALITA基于图层的数据分析工具

ALITA(A Layered Instrument To Analysis)是一个基于分层分析来展示数据的工具,通过大量的业务需求沉淀抽象概括了“点”、“线”、“面”三种数据模型,完美融合地图...

FHIRModelsFHIR 资源数据模型 Swift 库

FHIRModels 是一个用于 FHIR® 资源数据模型的 Swift 库。 特征 FHIR 资源、元素和数据类型的本机 Swift 表示 DSTU2、STU3、R4、R4B、R5 和最新构建...

热门资讯

1

微信即将推出原生 Linux 版本

2

倒了一个 Yuzu,还有千千万万个“转世”开源模拟器

3

IntelliJ IDEA 2024.1 Beta 发布,解绑 AI 助手

4

"Java 将继续存在",60% 的公司计划扩招 Java 开发人员

5

全球最流行开源 Switch 模拟器 Yuzu 删除代码仓库、向任天堂支付 240 万美元

6

新款 MacBook Air:搭载 M3 芯片、可外接 2 台显示器、全球最好的 AI 消费级笔记本电脑

7

Visual Studio 2022 v17.9:面向 C++ 开发人员的全面更新

8

织梦 CMS “混沌”往事二十年

9

前谷歌软件工程师被控窃取机密 AI 技术

10

Swift 5.10 发布

0 评论

63 收藏

微信

QQ

微博

分享

登录后可查看更多优质内容

使用微信快捷登录

OSCHINA 社区

关于我们

联系我们

加入我们

合作伙伴

Open API

在线工具

Gitee.com

企业研发管理

CopyCat-代码克隆检测

实用在线工具

国家反诈中心APP下载

攻略

项目运营

Awesome 软件(持续更新中)

QQ群

229767317

公众号

视频号

©OSCHINA(OSChina.NET)

工信部

开源软件推进联盟

指定官方社区

社区规范

深圳市奥思网络科技有限公司版权所有

粤ICP备12009483号

顶部

Blink(浏览器内核) - 知乎

Blink(浏览器内核) - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册Blink(浏览器内核)Blink是一个由Google主导开发的开源浏览器排版引擎,Google计划将这个渲染引擎作为Chromium计划的一部分,并且在2013年4月的时候公布了这一消息。 https://www.ch…查看全部内容关注话题​管理​分享​简介讨论精华视频等待回答​切换为时间排序MotionMark 浏览器图形性能测试套件深入分析易旭昕THINK.DESIGN.CODEMotionMark 是 Apple 开发的一个浏览器图形性能测试套件,用来测试和评估 Safari/WebKit 的图形性能 ,这里的图形性能并不仅仅包括光栅化和合成,而是涵盖了完整的浏览器渲染流水线,包括 DOM API,样式计算,排版等。MotionMark 虽然不能涵盖浏览器图形性能的所有方面,但是作为衡量浏览器图形性能的其中一项指标,还是有不错的参考价值。Chromium 目前也会使用 MotionMark 分数作为其中一项指标来衡量自身图形性能优化的成果。 …阅读全文​​赞同 11​​1 条评论​分享​收藏如何汉化Chromium(包括V8和Blink)草蟒老吴万法唯识忘了在开发工具中演示中文DOM操作,大家脑补吧。基于视频中的方法,还可以汉化node.js和electron。阅读全文​​赞同 6​​5 条评论​分享​收藏​喜欢​ 举报阿里巴巴,果然开始拥有“预测未来”的能力了阿里云云栖号​已认证账号顶灯闪烁,笛声响彻。 救护车载着病人,冲向茫茫车海,在时间的赛道上狂奔。 高德地图、GPS 卫星导航、路面磁感线圈、1300 个路口摄像头同时开动,为这辆救护车勘探最快路线; GPS 传回实时数据,后台根据辅助数据纠偏,锚定救护车每一刻的精确位置; 救护车将要经过的沿途,车辆情况被实时计算。确保路口绿灯提前亮起,在救护车通过之前,刚好所有社会车辆已经行驶一空。这不是演习,这是杭州城市大脑每天都在执行的任务。依靠…阅读全文​​赞同 63​​10 条评论​分享​收藏Chromium代码文化系列(1):名词解释一灯大师Chromium/Blink 开发Google ChromeGoogle Chrome 是 Google 的 浏览器产品(Product),基于 Chromium 制造,但本身并非自由软件,包含非开放源代码。Chrome 本意是 镀铬的 ,受众很容易关联到发动机和汽车上,暗含 速度 之意。另外,在设计术语中,Chrome 表示浏览器界面中非网页内容的部分,包括工具栏、标签栏等,而 Google 的设计理念 “Content, not chrome” 正是为了最小化浏览器的 Chrome 部分,命名为 Chrome 也是沿袭 Google 喜欢反讽的传…阅读全文​​赞同 21​​5 条评论​分享​收藏Chromium WebView - In Renderer 渲染技术解析易旭昕THINK.DESIGN.CODE我在之前的文章 以 Renderer 为中心的系统架构的思考 讨论了 Chromium WebView 新的优化方向,而文章 In Renderer 渲染流水线的思考 讨论了以 Renderer 为中心的系统架构中最重要的 In Renderer 渲染流水线。这篇文章主要对In Renderer 渲染技术进行解析,并给出一些初步的测试结果。 In Renderer 渲染技术解析原生非 OOPR 渲染模式 [图片] 原生 OOPR 渲染模式 [图片] In Renderer 渲染模式 [图片] 对比说明Chromium 目前同时存在 OOPR 和非 OOPR 的传统光…阅读全文​​赞同 20​​添加评论​分享​收藏本人blink唯双J,为什么很多人不喜欢朴彩英(客观一点)?匿名用户客观一点?看这个? 你为什么不喜欢朴彩英? 或者这个? 为什么现在朴彩英万人嘲了? 还有这个? blackpink的队内关系怎么样? 亦或者这个? 你们觉得BLACKPINK朴彩英怎么样? 看完你就知道了,这几个都是图或者视频证明的,主要是3粉惹人厌呀……虽然本人骚操作也挺多,但这些最多让我对她无感……虽说粉丝行为不要上升蒸煮,但应该很少人做到完全不迁怒吧?至少我做不到…………阅读全文​​赞同 3​​添加评论​分享​收藏​喜欢路过的Blink们可以留下一张blackpink神图吗 ?Eunice现高中生,喜欢jennie路过路过,喜欢的图实在太多了 [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片]阅读全文​​赞同 3​​添加评论​分享​收藏​喜欢Chromium代码文化系列(3):文件名一灯大师Chromium/Blink 开发Chromium 代码中的文件数不胜数,读懂文件名可以帮我们快速定位某个文件的用途。好的文件命名方式应该是自解释的,能够实现 “望文生义” 的效果。不过 Chromium 只对代码风格做了指引,并未对名称的遣词做统一规定,所以文件的命名更多是所在目录的约定俗成,受 Owner 的文化背景影响,比如有 Mac 或 iOS 开发背景的 Owner 更有可能将一个类的回调对象命名为 Delegate,而非此背景下的开发者则有可能命名为 Client。 *_{platfor…阅读全文​​赞同 22​​12 条评论​分享​收藏Flutter 渲染流水线浅析易旭昕THINK.DESIGN.CODE我在之前的文章: [文章: 关于 Flutter 的一些想法] 谈了 Flutter 是什么?它在客户端开发的技术栈中处于什么位置?跟哪些技术比较相似,跟哪些技术存在相互竞争的可能?它的优点是什么? 在 Flutter 渲染流水线浅析这篇文章里,我想谈一下自己对 Flutter 渲染流水线的理解,它和其他 UI Toolkit,和浏览器渲染流水线的相似和相异之处。 Flutter 渲染流水线概览 总的说来 Flutter 的渲染流水线,整体架构上(包括线程架构)跟 And…阅读全文​​赞同 87​​6 条评论​分享​收藏本人blink唯双J,为什么很多人不喜欢朴彩英(客观一点)?forwyiaaaRomantique et gratuit客观一点 我想说一点 首先我先声明 我不完全讨厌R 或者说 有时候还会挺喜欢她 有时候就会讨厌 主要对事 1、hard to love 我想说的是,团专里放个人solo曲,不合适吧?还有粉丝说什么很常见啊很正常啊。我这么跟你举例子, 我买了一箱苹果,里面有个梨,我很愤怒,因为我想不要梨,你居然跟我说:没关系啊很正常啊,某某商家也会在一箱子苹果里塞两个梨。您没事吧???被诈骗久了连正常该是啥样也不知道了是吧?还有说Rose主打曲…阅读全文​​赞同 40​​69 条评论​分享​收藏​喜欢浅析前端页面渲染机制极乐君作为一个前端开发,最常见的运行环境应该是浏览器吧,为了更好的通过浏览器把优秀的产品带给用户,也为了更好的发展自己的前端职业之路,有必要了解从我们在浏览器地址栏输入网址到看到页面这期间浏览器是如何进行工作的,进而了解如何更好的优化实践,本篇主要围绕这两点展开阐述。前端页面渲染机制可谓是老生常谈,但又很有必要再谈的话题,于是还是决定写一篇,即是对知识的回顾总结,又能与大家分享,何乐而不为。网上相关类…阅读全文​​赞同 121​​16 条评论​分享​收藏从 Blink 内核渲染架构演进看浏览器技术发展教主浏览器内核,blinkBlink 内核的前身是 WebKit。刚接触浏览器的内核的时候还没有 Blink 内核,所以就根据我的经历从 WebKit 开始讲起吧。本文主要是从渲染任务的分解这个角度来讲渲染的演进的。 一、早期的 chrome刚开始做内核大概是2011年吧。记得那时候 Android4.0 才刚刚面世。这个时候还没有 Blink,都是基于 WebKit 的。Chromium 开源项目渲染的核心代码 CC(chromium compositor)也还是放在 WebKit 下面的 platform/graphics/cc 中的。 我们…阅读全文​​赞同 78​​8 条评论​分享​收藏Codeday#4 广州站的演讲 - U4内核与小程序易旭昕THINK.DESIGN.CODE相关的演讲视频和讲稿已经在蚂蚁社区上线: 蚂蚁金服金融科技 - 活动阅读全文​​赞同 3​​8 条评论​分享​收藏本人blink唯双J,为什么很多人不喜欢朴彩英(客观一点)?Serein我团偏秀。难受死了,知乎好多肉骑骂智秀,各种难听的词,我挺喜欢肉的,但是每天看别人骂智秀真的难受 偏题了,肉很好啦。蜜嗓不是白叫的澳洲野玫瑰 ,就是有些肉粉说话太极端了 [图片] 越来越好阅读全文​​赞同 4​​3 条评论​分享​收藏​喜欢请问各位blink朴彩英女士这是在干什么?RONNIE JUNGUAENA+BLINK看到下面的全都在说甚么露肉x暗示?? 我真的是很无奈耶 我刷她限动的时候真的很正常的在注意那个美甲,还特地点进了那个美甲师的帐号看…我看的时候真的没有多想多看,不知道会引起这么多人的关注… 不知道是怎么回事,反正如果问我的话我真的没有觉得甚么问题,就纯粹秀指甲卖广告(那个tiffany&co珠宝和玫瑰有合作,那个美甲师也是一直和BLACKPINK有合作),看到这个问题我认真看了看图,觉得就是纯粹坐在类似沙发的椅子然后把…阅读全文​​赞同 52​​28 条评论​分享​收藏​喜欢Chromium代码文化系列(2):目录结构一灯大师Chromium/Blink 开发Chromium 代码庞杂,初学者很难入手,接下来本系列文章将与您一起探索 Chromium 代码的脉络,解构 Chromium 代码背后的故事。建议大家比对一份 Chromium 代码进行阅读,没有本地代码的朋友可以访问 Chromium 的线上代码搜索网站 https://cs.chromium.org/ 。概览Chromium 代码光一级目录就有50~60,每个一级目录下子目录和代码文件数不胜数,全部都了解完全不现实。在工作过程中,很多目录实际上也都用不上,这里我们就以 Android We…阅读全文​​赞同 49​​4 条评论​分享​收藏Chromium WebView - In Renderer 渲染和进程架构易旭昕THINK.DESIGN.CODE我在之前的文章 以 Renderer 为中心的系统架构的思考 讨论了 Chromium WebView 新的优化方向,而文章 In Renderer 渲染流水线的思考 讨论了以 Renderer 为中心的系统架构中最重要的 In Renderer 渲染流水线。这篇文章主要讨论渲染流水线的配置(是否使用 In Renderer 渲染)和进程架构(包括多 Renderer 的使用)之间的关系。 可能的进程架构1. 单进程单进程架构下,Browser 同时兼做 GPU 和 Renderer 进程,该进程架构下不支持多 …阅读全文​​赞同 8​​添加评论​分享​收藏本人blink唯双J,为什么很多人不喜欢朴彩英(客观一点)?匿名用户因为solo真的很一般 otg我第一次听的时候直接接唱了霉的空白格 非常不喜欢这种相似的感觉(没说抄袭) gone本来挺期待的 结果她没唱过转音 而且otg和gone好像只有一首打歌舞台是开麦了的?还不是很好听 至少肉的solo没有表现出作为主唱的实力吧 而且一个人还撑不起来舞台 其次就是solo过后3f跟疯了一样到处乱踩 踩队友踩别的团 很败人好感。虽说粉丝行为不上升正主 但很影响对正主的感觉(对她从路好-无感-偶尔路黑) 还有就是 …阅读全文​​赞同 7​​添加评论​分享​收藏​喜欢请问各位blink朴彩英女士这是在干什么?匿名用户没意思 删了阅读全文​​赞同 237​​69 条评论​分享​收藏​喜欢一个 Blink 小白的成长之路阿里云云栖号​已认证账号写在前面写过blink sql的同学应该都有体会,明明写的时候就很顺滑,小手一抖,洋洋洒洒三百行代码,一气呵成。结果跑的时候,吞吐量就是上不去。导致数据延迟高,消息严重积压,被业务方疯狂吐槽。这时候,老鸟就会告诉你,同学,该优化优化你的代码了,再丢过来一个链接,然后留下一脸懵逼的你。笔者就是这么过来的,希望本文能帮助到跟我有过同样困惑,现在还一筹莫展的同学。 背景故事先说一下相关背景吧,笔者作为一个刚入职…阅读全文​​赞同 3​​添加评论​分享​收藏浏览量2850 万讨论量9888  帮助中心知乎隐私保护指引申请开通机构号联系我们 举报中心涉未成年举报网络谣言举报涉企虚假举报更多 关于知乎下载知乎知乎招聘知乎指南知乎协议更多京 ICP 证 110745 号 · 京 ICP 备 13052560 号 - 1 · 京公网安备 11010802020088 号 · 京网文[2022]2674-081 号 · 药品医疗器械网络信息服务备案(京)网药械信息备字(2022)第00334号 · 广播电视节目制作经营许可证:(京)字第06591号 · 服务热线:400-919-0001 · Investor Relations · © 2024 知乎 北京智者天下科技有限公司版权所有 · 违法和不良信息举报:010-82716601 · 举报邮箱:jubao@zhihu.

Blink产品公告_实时计算 Flink版(Flink)-阿里云帮助中心

Blink产品公告_实时计算 Flink版(Flink)-阿里云帮助中心

产品解决方案文档与社区权益中心定价云市场合作伙伴支持与服务了解阿里云售前咨询 95187-1 在线服务售后咨询 4008013260 在线服务其他服务 我要建议 我要投诉更多联系方式备案控制台

文档产品文档输入文档关键字查找

实时计算 Flink版

产品概述

快速入门

操作指南

实践教程

开发参考

服务支持

视频专区

首页

实时计算 Flink版

产品概述

动态与公告

实时计算Blink产品公告(已停止新购)

实时计算Blink产品公告(已停止新购)更新时间:一键部署产品详情相关技术圈我的收藏

本文为您介绍实时计算Blink产品的相关动态。公有云实时计算Blink产品进入产品收敛期,请下载查看PDF版公有云实时计算Blink产品进入产品收敛期,Flink产品详情请参见产品形态。实时计算Blink文档详情请单击阿里云实时计算Blink独享模式(公共云已停止新购)下载后进行查看。2022年11月15日起,Blink独享集群将停止接收新建订单和扩容订单,即进入EOM2阶段。为了提供更全面的服务体系,聚焦满足客户需求,提供更清晰简化的使用体验,2022年11月15日起暂停实时计算Blink独享模式新用户购买和已经购买客户的扩容订单,续费订单时长不超过4个月,保留阿里云的产品支持。Blink独享集群的产品生命周期策略和EOS时间详情请参见生命周期策略和产品形态。实时计算产品已推出更全面的全托管Flink产品,在不增加您成本的基础上,支持您使用UDF或JAR等多种开发方式,告别单一SQL的模式,为您提供更好更全面的实时能力。实时计算产品也提供完整的迁移工具协助您完成迁移,详情请参见迁移方案。非常感谢您对阿里云实时计算产品的支持。2022年8月15日起,Blink共享集群将停止接收新建订单和扩容订单,即进入EOM2阶段。为了提供更全面的服务体系,聚焦满足客户需求,提供更清晰简化的使用体验,2022年8月15日起暂停实时计算Blink共享模式新用户购买和已经购买客户的扩容订单,续费订单时长不超过4个月,保留阿里云的产品支持。Blink共享集群的产品生命周期策略和EOS时间详情请参见生命周期策略和产品形态。实时计算产品已推出更全面的全托管Flink产品,在不增加您成本的基础上,支持您使用UDF或JAR等多种开发方式,告别单一SQL的模式,为您提供更好更全面的实时能力。实时计算产品也提供完整的迁移工具协助您完成迁移,详情请参见迁移方案。非常感谢您对阿里云实时计算产品的支持。2021年4月28日-独享模式暂停新购实时计算Flink版独享模式已于2021年4月28日暂停新购,目前仅支持原有项目的扩缩容和续费操作。如果您有新购需求,推荐使用实时计算Flink全托管。RocketMQ接入点变更导致实时计算作业适配升级公告升级公告因消息队列RocketMQ接入点地域化变更(详情请参见关于TCP内网接入点设置的公告),如果您已使用了Blink 3.7.10以下版本的RocketMQ Connector,则您需要将您的实时计算作业升级至Blink 3.7.10及以上版本,并将作业中EndPoint参数取值更改为新的RocketMQ接入点,EndPoint参数详情请参见:Blink RocketMQ源表文档:详情请参见Blink PDF文档中的5.6.2.6章节。Blink RocketMQ结果表文档:详情请参见Blink PDF文档中的5.6.3.7章节。注意事项旧的RocketMQ接入点在2021年11月后完全不可用,且使用旧的RocketMQ接入点的作业可能存在稳定性风险,因此请您尽快安排作业升级,务必在2021年11月之前完成升级工作。RocketMQ产品承诺:2021年11月前不会下线旧的RocketMQ接入点,但旧的RocketMQ接入点无法保证作业稳定性。本次升级会导致作业的State无法兼容,请结合业务情况合理安排升级时间,尽量减少对业务的影响。2021年11月1日以后,实时计算Flink版产品侧不再对使用了旧的RocketMQ接入点的作业进行维护和支持。2020年8月10日21:00-2020年8月11日02:00-升级公告2020年8月10日21:00-2020年8月11日02:00,对杭州独享模式管控平台进行升级,升级期间现有运行作业不受影响,但集群创建和扩缩容功能不可用,请知悉。2020年4月28日21:00-2020年4月29日02:00-升级公告2020年4月28日21:00-2020年4月29日02:00,对上海独享模式管控平台进行升级,升级期间现有运行作业不受影响,但集群扩缩容功能不可用,请知悉。2020年4月20日-2020年4月22日-升级公告2020年4月20日-2020年4月22日,对上海和深圳共享集群的存储服务进行版本升级,旨在为您提供更加稳定的实时计算Flink版服务。正常情况下,此次升级不会对用户的业务造成影响;特殊情况下,Blink3.2和Blink3.3版本的作业会Failover一次后恢复正常。2019年12月24日-共享模式正式下线实时计算Flink版共享模式已于2019年12月24日正式下线,将不再支持共享模式新项目的购买,仅支持原有项目的扩缩容和续费操作。如果您有新购需求,推荐使用实时计算Flink版独享模式或Flink半托管模式。2019年8月27日-新增资源配置页签开发页面右侧,新增资源配置页签。原控制台基本属性页签下的资源配置跳转链接已下线。2019年8月21日-华东2(上海)共享集群扩容通知2019年8月23日,华东2(上海)共享集群将新增11.53.0.0/16,11.50.0.0/16网段。如果您使用的上下游存储涉及到例如RDS、HBase等需要添加白名单的组件,请提前将11.53.0.0/16,11.50.0.0/16网段添加至现有的白名单中,防止发生连接异常。2019年5月30日-实时计算Flink版3.0.0以上版本新功能运行信息 新增Vertex相关信息查询功能,详情请参见Blink PDF文档中的6.5.2章节。数据曲线 新增AutoScaling相关曲线,详情请参见Blink PDF文档中的6.5.3章节。Timeline 新增Timeline功能,详情请参见Blink PDF文档中的6.5.4章节。属性参数 新增AutoScale迭代的历史详情查询功能,详情请参见Blink PDF文档中的6.5.10章节。2019年5月29日-北京、上海地区实时计算Flink版共享模式停止售卖自2019年5月29日起,停止售卖北京和上海地区共享模式的实时计算Flink版。2019年3月14日-共享模式默认版本升级为2.2.7自2019年3月14日起,实时计算Flink版共享模式默认版本升级为2.2.7,此次升级仅影响新增作业,不影响原有运行作业。2019年1月24日-Blink-2.2.7版本发布Blink-2.2.7 是Blink-2.x系列中最新稳定版本,在Blink-1.x版本(最新稳定版本为Blink-1.6.4)进行了全面的升级,采用了自主研发的新一代存储Niagara作为Statebackend的底层存储,优化了SQL的性能,增加了一系列新功能: 主要特性 SQL 新增Window Emit机制,可以控制Window结果的输出策略,例如:1小时窗口,每1分钟输出一次。双流Join支持miniBatch,针对不同场景优化了Retraction处理和State存储结构,提高了性能。AGG支持Filter语法,可以只聚合满足条件的行。对Local-global AGG进行优化。重构了SQL的Optimize阶段,解决了SQL编译时间过长的问题。SortedMapView中KEY支持多种数据类型:BOOLEAN、BYTE、SHORT、INT、LONG、FLOAT、DOUBLE、BIGDECIMAL、BIGINT、BYTE[]和STRING。优化了MIN、MAX、FIRST和LAST函数存在Retraction场景的性能。新增多种标量函数,例如时区相关的解析TO_TIMESTAMP_TZ、格式化DATE_FORMAT_TZ和转换函数CONVERT_TZ。对SQL和Connector模块的错误信息进行了归类,并对每种类型设计了相应的ERROR_CODE。Connector 支持用户自定义的TableFactory注册源表和结果表的Connector。支持用户通过UDTF方式直接解析数据源类型。支持读取和写入Kafka。支持写入到ElasticSearch。Runtime 通过Blink Session机制,统一了用户提交Job、获取执行结果等行为。开放了调度插件机制,允许计算模型根据需求自定义调度逻辑。在有限流的情况下,通过避免不必要的全图重启,提高了JobManager和Task FailOver的处理效率。StateBackend 使用NiagaraStateBackend替换RocksDBStateBackend,具备更好的读写性能。(Experimental) NiagaraStateBackend支持计算存储分离,支持Failover过程中State秒级恢复。与Blink1.6.4不兼容的语法 功能项影响解决办法TableFunction接口修改所有使用自定义TableFunction的用户。更新代码,实现新的getResultType接口。ScalarFunction接口修改所有使用自定义ScalarFunction的用户。实现新的getResultType接口。AggregateFunction接口修改所有使用自定义AggregateFunction的用户。实现新的getAccumulatorType和getResultType接口。例如,accumulator类型为Row(STRING, LONG),Agg result的类型为STRING,则需要实现如下代码。 public DataType getAccumulatorType\(\) { return

DataTypes.createRowType\(DataTypes.String, DataTypes.LONG\); } public DataType

getResultType\(\) { return DataTypes.String; }MapView构造函数修改MapView构造函数形参类型由之前的TypeInformation变更为DataType。所以在自定义UDAF中声明了MapView的Job都会受影响。更新代码,按DataType去构造MapView。例如MapView map = new MapView<>(Types.STRING, Types.INT);需要更新为MapView map = new MapView<>(DataTypes.STRING, DataTypes.INT);。当参数是LONG或INT时,除法和AVG返回类型改为DOUBLE以前的除法和AVG函数返回的是入参的字段类型,现在是DOUBLE,会导致类型不匹配的错误。例如:除法和AVG的结果直接写入结果表,可能会报结果表与Query字段类型不匹配的错误。在除法和AVG的结果上强制加上CAST。在比较BigDecimal 和Decimal数据类型的数据时,会考虑精度用到Decimal的Job,可能会报BigDecimal类型不匹配的错误。用到Decimal类型的Job,全局替换成带精度的声明方式,Decimal(38, 18)。NULL与字符串的比较语义1.x版本NULL与字符串比较返回True,在2.x版本后遵循了SQL语法语义改为返回False。所有NULL与字符串比较的地方,例如:WHERE SPLIT_INDEX(shop_list, ':', 1) <> shop_id,如果SPLIT_INDEX(shop_list, ':', 1)返回了NULL,在1.x版本上WHERE条件会返回True,在2.x上会返回False,将数据过滤。如何升级到Blink-2.x使用Blink-1.x版本的Job升级到Blink-2.x,需要进行数据回溯升级,数据回溯是指用户根据业务需要,在启动Job的时候,指定启动位点,具体操作如下: 停止待升级Job(清除State)。开发界面单击右下角的Flink版本下拉箭头,修改Job的Blink版本为Blink-2.2.7,上线Job。启动修改后的Job并指定启动位点。 如果步骤3执行不成功,需要人工介入查明原因后,进行如下操作: 快速修复SQL,重复步骤1、2、3。如果无法修复SQL,回退到原有Blink版本。如果无法生成Json Plan,可以尝试设置如下参数: blink.job.option.jmMemMB=4096blink.job.submit.timeoutInSeconds=600Blink-2.0.1的UDX第三方插件安装包详情,请参见Blink PDF文档中的5.11.1章节。类似如下的异常,是因为UDX包的版本太低或者包冲突导致的。 code:[30016], brief info:[get app plan failed], context info:[detail:[java.lang.NoClassDefFoundError: org/apache/flink/table/functions/aggfunctions/DoubleSumWithRetractAggFunction

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:788)

at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)

at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)

at java.net.URLClassLoader.access$100(URLClassLoader.java:73)

反馈本页导读 (1)文档反馈

为什么选择阿里云什么是云计算全球基础设施技术领先稳定可靠安全合规分析师报告产品和定价全部产品免费试用产品动态产品定价价格计算器云上成本管理解决方案技术解决方案文档与社区文档开发者社区天池大赛培训与认证权益中心免费试用高校计划企业扶持计划推荐返现计划支持与服务基础服务企业增值服务迁云服务官网公告健康看板信任中心关注阿里云关注阿里云公众号或下载阿里云APP,关注云资讯,随时随地运维管控云服务售前咨询:95187-1售后服务:400-80-13260法律声明及隐私权政策Cookies政策廉正举报安全举报联系我们加入我们阿里巴巴集团淘宝网天猫全球速卖通阿里巴巴国际交易市场1688阿里妈妈飞猪阿里云计算AliOS万网高德UC友盟优酷钉钉支付宝达摩院淘宝海外阿里云盘饿了么© 2009-2024 Aliyun.com 版权所有 增值电信业务经营许可证: 浙B2-20080101 域名注册服务机构许可: 浙D3-20210002 京D3-20220015浙公网安备 33010602009975号浙B2-20080101-4