自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

老曹眼中的Lambda世界

開(kāi)發(fā) 開(kāi)發(fā)工具
“ λ ”像一個(gè)雙手插兜兒,獨(dú)自行走的人,有“失意、無(wú)奈、孤獨(dú)”的感覺(jué)。λ 讀作Lambda,是物理上的波長(zhǎng)符號(hào),放射學(xué)的衰變常數(shù),線性代數(shù)中的特征值……在程序和代碼的世界里,它代表了函數(shù)表達(dá)式,系統(tǒng)架構(gòu),以及云計(jì)算架構(gòu)。

“ λ ”像一個(gè)雙手插兜兒,獨(dú)自行走的人

“ λ ”像一個(gè)雙手插兜兒,獨(dú)自行走的人,有“失意、無(wú)奈、孤獨(dú)”的感覺(jué)。λ 讀作Lambda,是物理上的波長(zhǎng)符號(hào),放射學(xué)的衰變常數(shù),線性代數(shù)中的特征值……在程序和代碼的世界里,它代表了函數(shù)表達(dá)式,系統(tǒng)架構(gòu),以及云計(jì)算架構(gòu)。

代碼中的Lambda

Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名,可以看作是匿名函數(shù),可以代替表達(dá)式,函數(shù),閉包等,也支持類(lèi)型推論,可以遠(yuǎn)離匿名內(nèi)部類(lèi)。

為什么使用Lambda呢?

1)代碼更緊湊

2)擁有函數(shù)式編程中修改方法的能力

3)有利于多核計(jì)算

Lambda的目的是讓程序員能夠?qū)Τ绦蛐袨檫M(jìn)行抽象,把代碼行為看作數(shù)據(jù)。

Java

Java 8的一個(gè)大亮點(diǎn)是引入Lambda表達(dá)式,在編寫(xiě)Lambda表達(dá)式時(shí),也會(huì)隨之被編譯成一個(gè)函數(shù)式接口。

一個(gè)典型的例子是文件類(lèi)型過(guò)濾 :

  1. File dir = new File("/an/dir/");   FileFilter directoryFilter = new FileFilter() {      public boolean accept(File file) {         return file.isDirectory();      } }; 

用lambda 重寫(xiě)后:

  1. File dir = new File("/an/dir/");  File[] dirdirs = dir.listFiles((File f) -> f.isDirectory()); 

Lambda 表達(dá)式本身沒(méi)有類(lèi)型,因?yàn)槌R?guī)類(lèi)型系統(tǒng)沒(méi)有“Lambda 表達(dá)式”這一內(nèi)部概念。

Python

與Java語(yǔ)言不同,Python的Lambda表達(dá)式的函數(shù)體只能有唯一的一條語(yǔ)句,也就是返回值表達(dá)式語(yǔ)句。Python編程語(yǔ)言使用lambda來(lái)創(chuàng)建匿名函數(shù)。

一個(gè)典型的例子是求一個(gè)列表中所有元素的平方。

一般寫(xiě)法

  1. def sq(x):    return x * x map(sq, [y for y in range(108)]) 

使用Lambda 的寫(xiě)法

  1. map( lambda x: x*x, [y for y in range(108)] ) 

在spark 中,用python 操作RDD時(shí),Lambda 更是隨處可見(jiàn)。

  1. out_rdd = in_rdd.filter( # filter the empty record 
  2.           lambda x:x[1] is not None and x[1] != {} 
  3.                ).map(  
  4.           lambda x:utils.parse_data(x[1],es_relations) 
  5.                ).filter( # filter the empty record   
  6.           lambda x:x is not None 
  7.                ).filter( # filter the record   
  8.           lambda x:x[u'timestamp']>time_start) 

大數(shù)據(jù)架構(gòu)中的Lambda

Lambda架構(gòu)的目標(biāo)是設(shè)計(jì)出一個(gè)能滿足實(shí)時(shí)大數(shù)據(jù)系統(tǒng)關(guān)鍵特性的架構(gòu),包括有:高容錯(cuò)、低延時(shí)和可擴(kuò)展等。Lambda架構(gòu)整合離線計(jì)算和實(shí)時(shí)計(jì)算,融合不可變性(Immunability),讀寫(xiě)分離和復(fù)雜性隔離等一系列架構(gòu)原則,可集成Hadoop,Kafka,Storm,Spark,Hbase等各類(lèi)大數(shù)據(jù)組件。

大數(shù)據(jù)架構(gòu)中的Lambda

Batch Layer進(jìn)行預(yù)運(yùn)算的作用實(shí)際上就是將大數(shù)據(jù)變小,從而有效地利用資源,改善實(shí)時(shí)查詢(xún)的性能。主要功能是:

  • 存儲(chǔ)Master Dataset,這是一個(gè)不變的持續(xù)增長(zhǎng)的數(shù)據(jù)集
  • 針對(duì)這個(gè)Master Dataset進(jìn)行預(yù)運(yùn)算

Serving Layer就要負(fù)責(zé)對(duì)batch view進(jìn)行操作,從而為最終的實(shí)時(shí)查詢(xún)提供支撐。主要作用是:

  • 對(duì)batch view的隨機(jī)訪問(wèn)
  • 更新batch view

speed layer與batch layer非常相似,它們之間***的區(qū)別是前者只處理最近的數(shù)據(jù),后者則要處理所有的數(shù)據(jù)。另一個(gè)區(qū)別是為了滿足最小的延遲,speed layer并不會(huì)在同一時(shí)間讀取所有的新數(shù)據(jù),在接收到新數(shù)據(jù)時(shí),更新realtime view,而不會(huì)像batch layer那樣重新運(yùn)算整個(gè)view。speed layer是一種增量的計(jì)算,而非重新運(yùn)算(recomputation)。Speed Layer的作用包括:

  • 對(duì)更新到serving layer帶來(lái)的高延遲的一種補(bǔ)充
  • 快速、增量的算法
  • 最終Batch Layer會(huì)覆蓋speed layer

大數(shù)據(jù)系統(tǒng)一般具有如下屬性:

* 健壯性和容錯(cuò)性(Robustness和Fault Tolerance)

* 低延遲的讀與更新(Low Latency reads and updates)

* 可伸縮性(Scalability)

* 通用性(Generalization)

* 可擴(kuò)展性(Extensibility)

* 內(nèi)置查詢(xún)(Ad hoc queries)

* 維護(hù)最小(Minimal maintenance)

* 可調(diào)試性(Debuggability)

個(gè)人覺(jué)得,有了spark streaming 之后,spark 本身就是一種Lambda架構(gòu)。

云計(jì)算中的Lambda

云計(jì)算中的Lambda,是指serverless architecture,無(wú)需配置或管理服務(wù)器即可運(yùn)行代碼。借助 Lambda,幾乎可以為任何類(lèi)型的應(yīng)用程序或后端服務(wù)運(yùn)行代碼,而且全部無(wú)需管理。

以AWS 為例,云計(jì)算中的Lambda 示意流程如下:

以AWS 為例,云計(jì)算中的Lambda 示意流程

只需上傳代碼,Lambda 會(huì)處理運(yùn)行和擴(kuò)展高可用性代碼所需的一切工作。還可以將代碼設(shè)置為自動(dòng)從其他服務(wù)觸發(fā),或者直接從任何 Web 或移動(dòng)應(yīng)用程序調(diào)用。

ETL 是數(shù)據(jù)挖掘與數(shù)據(jù)分析中的必備環(huán)節(jié),可以方便的通過(guò)AWS的Lambda實(shí)現(xiàn),示例如下:

ETL 是數(shù)據(jù)挖掘與數(shù)據(jù)分析中的必備環(huán)節(jié)

其實(shí),在spark 上實(shí)現(xiàn)Lambda 云服務(wù)也不是太費(fèi)力的事。

 

總之,了解越多,越會(huì)喜歡上它,神奇而有趣的Lambda。

【本文來(lái)自51CTO專(zhuān)欄作者老曹的原創(chuàng)文章,作者微信公眾號(hào):喔家ArchiSelf,id:wrieless-com】

責(zé)任編輯:趙寧寧 來(lái)源: 喔家ArchiSelf
相關(guān)推薦

2016-12-01 14:16:18

GitSCM配置

2016-12-01 15:03:36

緩存技術(shù)客戶端

2016-12-19 09:43:59

軟件開(kāi)發(fā)架構(gòu)

2016-12-01 14:47:05

負(fù)載均衡DNS

2016-12-02 08:55:18

Linux系統(tǒng)

2017-05-18 14:11:22

CRM圖解交付

2017-02-05 16:51:35

網(wǎng)絡(luò)編程網(wǎng)絡(luò)系統(tǒng)

2016-12-01 13:53:41

2016-12-02 09:09:18

MySQL調(diào)優(yōu)數(shù)據(jù)庫(kù)

2016-12-06 20:01:56

數(shù)據(jù)架構(gòu)數(shù)據(jù)機(jī)器學(xué)習(xí)

2024-01-15 15:11:03

物聯(lián)網(wǎng)5G數(shù)字孿生

2020-04-13 10:37:46

API編程設(shè)計(jì)

2018-10-17 22:01:06

2017-09-18 08:21:42

碼農(nóng)AI人工智能

2016-12-08 15:52:09

互聯(lián)網(wǎng)數(shù)據(jù)計(jì)算

2017-03-27 08:45:47

全棧技術(shù)管理

2017-04-17 08:44:43

構(gòu)造函數(shù)線程安全

2012-08-29 11:24:51

2018-01-16 15:02:20

存儲(chǔ)RAIDSAN

2011-06-03 12:38:05

GeekApp
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)