【akka】akka框架介紹

一、背景

????????大型服務系統(tǒng)由于業(yè)務或功能的復雜性,為了維護和升級的便利廷没,往往在架構(gòu)上按對系統(tǒng)進行拆分宪彩,按不同功能拆分成不同的子服務,并進行分布式的部署主届。但在我們的實踐中赵哲,對于服務間調(diào)用的容錯、擴展性君丁、并發(fā)性能等問題還需要做嚴謹?shù)目紤]或設計枫夺,而由于各種各樣的原因工程師們的設計往往有所欠缺。
????????對于多線程編程绘闷,經(jīng)常會出現(xiàn)的缺點:線程維護困難橡庞、子線程出錯后難以恢復较坛、線程阻塞時浪費時間和資源;另外對于密集的計算任務扒最,我們的系統(tǒng)需要達到很高的并發(fā)性能丑勤,單機系統(tǒng)資源無法滿足計算需求,而類似java的fork/join框架又很難在分布式環(huán)境下簡易地對并發(fā)計算進行架構(gòu)設計吧趣。
????????而akka框架非常適合解決上述問題法竞。akka框架是一款高性能、高容錯性的分布式并發(fā)應用框架强挫。akka底層采用scala語言實現(xiàn)岔霸,并基于actor并發(fā)模型,天然擁有異步俯渤、分布式能力呆细,且具有很好的并發(fā)性能和容錯機制。

二稠诲、akka特點

akka典型的特點:

  1. 并發(fā)模型:基于actor模型侦鹏,對并發(fā)進行高層次的抽象;
  2. 異步能力:基于actor模型進行通信臀叙,天然具有異步非阻塞的特點略水;
  3. 高容錯性:通過父子actor監(jiān)督機制進行容錯處理,為akka分布式模型提供高容錯特性劝萤;
  4. 輕量級: 每個actor只占300bytes左右的內(nèi)存渊涝,1G內(nèi)存即可容納百萬級數(shù)量的actor;
  5. 位置透明:akka對actor地址進行了抽象床嫌、屏蔽了本地地址和遠程地址的差異跨释,對開發(fā)者透明
  6. 持久化:actor狀態(tài)或消息可以被持久化,在jvm宕機后actor可以恢復厌处;

三鳖谈、akka的actor模型

????????actor模型是對并發(fā)模型的高層次抽象,從底層屏蔽了線程阔涉、鎖機制的管理缆娃,為應用開發(fā)提供了簡單易用的高層次api。


actor模型.png

????????actor模型的幾個特征:

  1. 程序的計算都在actor中進行瑰排。actor實例是程序的最小運算單元贯要;
  2. actor之間只能通過消息進行通信。消息是異步傳遞的椭住,每個actor都有一個郵箱崇渗,該郵箱接收其它actor發(fā)送的消息,actor實例從郵箱中取出消息進行處理。actor實例內(nèi)部一次只能同步處理一個消息宅广,因此可以安全的進行狀態(tài)處理不用進行程序加鎖葫掉。由于對消息的處理是異步的,所以發(fā)送完消息后可以立即返回進行下一步處理(當然也可以等待處理完成)乘碑。
  3. actor可以響應其它actor發(fā)送的消息挖息,并可以更改本身的狀態(tài)或行為、發(fā)送消息給其它actor兽肤、創(chuàng)建子actor套腹、對其它actor進行監(jiān)督

四、akka架構(gòu)體系

????????在akka中资铡,整個actor體系被抽象成一個公共的actor系統(tǒng)电禀,即ActorSystem,ActorSystem是一個層級結(jié)構(gòu)笤休,通過"父監(jiān)督"模式和DeathWatch模式限定了actor的管理策略尖飞。
????????akka還提供了諸多的配套組件,例如網(wǎng)絡服務店雅、持久化等政基。

ActorSystem
actor組件

????akka中actor組件具有幾個特征:

  • actor引用(Actor Reference)
    ???? akka不能通過new的方式創(chuàng)建引用。代替new的方式是闹啦,通過actorOf(創(chuàng)建actor)或actorSelection(查找actor)等方式返回Actor對象引用沮明。對開發(fā)者而言,actor位置透明(可能存在于本地或遠程)窍奋。
  • 狀態(tài)(State)
    ???? actor在不同時刻的狀態(tài)通常用變量來標識荐健。akka在底層為每個actor抽象一個輕量級的執(zhí)行“線程”,實現(xiàn)了對狀態(tài)的隔離琳袄。
  • 行為(Behavior)
    ???? actor在接受到消息后可以對消息進行處理江场,或者轉(zhuǎn)發(fā)給其它actor處理。
  • 監(jiān)督策略 (Supervisor Strategy)
    ???? actorSystem是一個層級結(jié)構(gòu)窖逗,父actor對子actor具有監(jiān)管的能力址否,可以針對子actor的異常進行:恢復、重啟碎紊、停止在张、失敗上溯等處理方案,另外提供了One-For-One(默認矮慕,只對異常的子actor進行處理)和All-For-One(對所有子actor進行處理)兩種監(jiān)督策略。
郵箱

???? 每個actor都擁有自己的郵箱啄骇,所有接受的消息會先進入郵箱痴鳄,actor從郵箱中取出消息進行處理。akka自帶多種郵箱類型缸夹,并提供RequiresMessageQueue接口供開發(fā)者自定義特定類型的郵箱痪寻。

路由

???? actor消息也可以通過路由進行發(fā)送螺句,路由可以是一個Router對象,也可以是一個自包含的actor:管理者所有的Routee(路由目標)橡类。開發(fā)者可以根據(jù)需要選擇不同的路由類型蛇尚,如:輪詢、隨機顾画、廣播等取劫。

網(wǎng)絡服務

????????提供遠程actor和分布式集群的基礎能力,包含I/O研侣、網(wǎng)絡通信谱邪、序列化配置、gossip通信協(xié)議庶诡、節(jié)點管理惦银、集群分片等

http、websocket模塊

????????akka提供了處理 http末誓、websocket協(xié)議的基礎模塊扯俱,可以在此基礎上進行開發(fā)。

持久化

????????akka提供actor的狀態(tài)持久化方案喇澡,在程序出錯迅栅、宕機等場景下進行恢復。

五撩幽、總結(jié)

????????akka具有異步库继、分布式、高容錯等特性窜醉,適合作為分布式應用的基礎開發(fā)框架宪萄,比如,目前比較火的流計算引擎flink也采用akka作為分布式通信框架榨惰。開發(fā)者也可以用akka打造自己分布式應用服務拜英!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市琅催,隨后出現(xiàn)的幾起案子居凶,更是在濱河造成了極大的恐慌,老刑警劉巖藤抡,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侠碧,死亡現(xiàn)場離奇詭異,居然都是意外死亡缠黍,警方通過查閱死者的電腦和手機弄兜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人替饿,你說我怎么就攤上這事语泽。” “怎么了视卢?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵踱卵,是天一觀的道長。 經(jīng)常有香客問我据过,道長惋砂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任蝶俱,我火速辦了婚禮班利,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榨呆。我一直安慰自己罗标,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布积蜻。 她就那樣靜靜地躺著闯割,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竿拆。 梳的紋絲不亂的頭發(fā)上宙拉,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音丙笋,去河邊找鬼谢澈。 笑死,一個胖子當著我的面吹牛御板,可吹牛的內(nèi)容都是我干的锥忿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼怠肋,長吁一口氣:“原來是場噩夢啊……” “哼敬鬓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起笙各,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钉答,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杈抢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體数尿,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年惶楼,在試婚紗的時候發(fā)現(xiàn)自己被綠了砌创。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虏缸。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嫩实,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窥岩,我是刑警寧澤甲献,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站颂翼,受9級特大地震影響晃洒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朦乏,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一球及、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呻疹,春花似錦吃引、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至并思,卻和暖如春庐氮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宋彼。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工弄砍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人输涕。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓音婶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親占贫。 傳聞我的和親對象是個殘疾皇子桃熄,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Actor系統(tǒng)的實體 在Actor系統(tǒng)中,actor之間具有樹形的監(jiān)管結(jié)構(gòu)型奥,并且actor可以跨多個網(wǎng)絡節(jié)點進行透...
    JasonDing閱讀 3,341評論 2 6
  • 傳統(tǒng)的游戲服務器要么是單線程要么是多線程瞳收,過去幾十年里CPU一直遵循摩爾定律發(fā)展,帶來的結(jié)果是單核頻率越來越高厢汹。而...
    JunChow520閱讀 66,552評論 14 58
  • 前言 一 不得不說的Actor模型 1.1 Actor模型的誕生與發(fā)展 1.2 Actor模型是什么螟深? 1.3 A...
    hedgehog1112閱讀 413評論 0 0
  • 持久化 當我們在集群系統(tǒng)中,一臺機器向另一臺機器發(fā)送一段數(shù)據(jù)烫葬,負責接收的機器在接收數(shù)據(jù)前突然宕機界弧,就會造成數(shù)據(jù)丟失...
    mango_knight閱讀 4,539評論 0 4
  • 這篇文章主要介紹了Flink通過Akka實現(xiàn)的分布式通信凡蜻。它第一次在0.9版本中出現(xiàn)。通過Akka垢箕,所有的遠程程序...
    alvin_wang閱讀 9,721評論 0 12