標簽 ‘ Framework

設計一個百萬級的消息推送系統

前言

首先遲到的祝大家中秋快樂。

最近一周多沒有更新了。其實我一直想憋一個大招,分享一些大家感興趣的干貨。

鑒于最近我個人的工作內容,于是利用這三天小長假憋了一個出來(其實是玩了兩天?)。

先簡單說下本次的主題,由于我最近做的是物聯網相關的開發工作,其中就不免會遇到和設備的交互。

最主要的工作就是要有一個系統來支持設備的接入、向設備推送消息;同時還得滿足大量設備接入的需求。

所以本次分享的內容不但可以滿足物聯網領域同時還支持以下場景:

  • 基于?WEB?的聊天系統(點對點、群聊)。
  • WEB?應用中需求服務端推送的場景。
  • 基于 SDK 的消息推送平臺。

閱讀全文

我的阿里面試之路

前言

最近有些朋友在面試阿里,加上?Java-Interview?項目的原因也有小伙伴和我討論,近期也在負責部門的招牌,這讓我想起年初那段長達三個月的奇葩面試經歷?。

本來沒想拿出來說的,畢竟最后也沒成。但由于那幾個月的經歷讓我了解到了大廠的工作方式、對候選同學的考察重點以及面試官的套路等都有了全新的認識。

當然最重要的是這段時間的查漏補缺也讓自己精進不少。

閱讀全文

Java Fork/Join框架

原文鏈接:A Java Fork/Join Framework(PDF)?–?Doug Lea

譯序

Doug Lea?大神關于Java 7引入的他寫的Fork/Join框架的論文。

響應式編程Reactive Programming?/?RP)作為一種范式在整個業界正在逐步受到認可和落地,是對過往系統的業務需求理解梳理之后對系統技術設計/架構模式的提升總結。Java作為一個成熟平臺,對于趨勢一向有些穩健的接納和跟進能力,有著令人驚嘆的生命活力:

  1. Java 7提供了ForkJoinPool,支持了Java 8提供的Stream。
  2. 另外Java 8還提供了Lamda(有效地表達和使用RP需要FP的語言構件和理念)。
  3. 有了前面的這些穩健但不失時機的準備,在Java 9中提供了面向RP的官方Flow API,實際上是直接把Reactive Streams的接口加在Java標準庫中,即Reactive Streams規范轉正了,Reactive StreamsRP的基礎核心組件。Flow API標志著RP由集市式的自由探索階段 向 教堂式的統一使用的轉變。

通過上面這些說明,可以看到ForkJoinPool的基礎重要性。

對了,另外提一下Java 9Flow API@author也是?Doug Lee?哦~

PS:基于Alex/蕭歡?翻譯、方騰飛?校對的譯文稿:Java Fork Join 框架,補譯『結論』之后3節,調整了格式和一些用詞,整理成完整的譯文。譯文源碼在GitHub的這個倉庫中,可以提交Issue/Fork后提交代碼來建議/指正。

0. 摘要

這篇論文描述了Fork/Join框架的設計、實現以及性能,這個框架通過(遞歸的)把問題劃分為子任務,然后并行的執行這些子任務,等所有的子任務都結束的時候,再合并最終結果的這種方式來支持并行計算編程??傮w的設計參考了為Cilk設計的work-stealing框架。就設計層面來說主要是圍繞如何高效的去構建和管理任務隊列以及工作線程來展開的。性能測試的數據顯示良好的并行計算程序將會提升大部分應用,同時也暗示了一些潛在的可以提升的空間。

閱讀全文

Apache Storm 官方文檔中文版

原文鏈接? ? 譯者:魏勇

About

本項目是 Apache Storm 官方文檔的中文翻譯版,致力于為有實時流計算項目需求和對 Apache Storm 感興趣的同學提供有價值的中文資料,希望能夠對大家的工作和學習有所幫助。

雖然 Storm 的正式推出已經有好幾個年頭了,發行版也已經到了 1.0.x,但是目前網絡上靠譜的學習資料仍然不多,很多比較有價值的資料都過時了(甚至官方網站自己的資料都沒有及時更新,這大概也是發展太快的社區的通?。?,而較新的資料大多比較零碎,在關鍵內容的描述上也有些模棱兩可,給初學者帶來了很大的困擾。本人自己在初學 Storm 的階段就非常痛苦,一直想有一份較系統、實用的資源來方便學習。最近借著整理工作的機會,就下定決心通過官方文檔的翻譯梳理出 Storm 的技術路線,于是就有了這個翻譯項目。非常感謝并發編程網對本項目的支持,由于本人水平有限,翻譯中仍然存在不少問題,還請大家不吝斧正。如果對本項目有任何問題,歡迎在評論中或者本項目的 Github 頁面中(https://github.com/weyo/Storm-Documents)提出,另外也可以直接給本人發郵件(ivicoco at gmail.com),謝謝。

閱讀全文

Sharing Data Among Threads Without Contention

原文地址:http://www.oraclejavamagazine-digital.com/javamagazine/20120304/?pg=56&pm=1&u1=friend? 作者?Trisha

The London Multi-Asset Exchange (LMAX) Disruptor is an open source concurrency framework that recently won the 2011 Duke’s Choice Award for Innovative Programming Framework. In this article, I use diagrams to describe what the Disruptor is; what it does; and, to some extent, how it works.

閱讀全文

線程間共享數據無需競爭

原文?地址??作者 ?Trisha? ?譯者:李同杰

LMAX Disruptor 是一個開源的并發框架,并獲得2011 Duke’s 程序框架創新獎。本文將用圖表的方式為大家介紹Disruptor是什么,用來做什么,以及簡單介紹背后的實現原理。

Disruptor是什么?

Disruptor 是線程內通信框架,用于線程里共享數據。LMAX 創建Disruptor作為可靠消息架構的一部分并將它設計成一種在不同組件中共享數據非??斓姆椒?。
基于Mechanical Sympathy(對于計算機底層硬件的理解),基本的計算機科學以及領域驅動設計,Disruptor已經發展成為一個幫助開發人員解決很多繁瑣并發編程問題的框架。
很多架構都普遍使用一個隊列共享線程間的數據(即傳送消息)。圖1 展示了一個在不同的階段中通過使用隊列來傳送消息的例子(每個藍色的圈代表一個線程)。 閱讀全文

Disruptor(無鎖并發框架)-發布

原文:http://blog.codeaholics.org/2011/the-disruptor-lock-free-publishing/

譯者:羅立樹

假如你生活在另外一個星球,我們最近開源了一套高性能的基于消息傳遞的開源框架。

下面我給大家介紹一下如何將消息通過Ring buffer在無鎖的情況下進行處理。

在深入介紹之前,可以先快速閱讀一下Trish發表的文章,該文章介紹了ring buffer和其工作原理。

閱讀全文

如何使用Disruptor(二)如何從Ringbuffer讀取

作者:Trisha ?譯者:古圣昌 ?校對:方騰飛

上一篇文章中我們都了解了什么是Ring Buffer以及它是如何的特別。但遺憾的是,我還沒有講述如何使用DisruptorRing Buffer寫數據和從Ring?Buffer中讀取數據。

閱讀全文

通過Axon和Disruptor處理1M tps

原文地址:http://blog.trifork.nl/2011/07/20/processing-1m-tps-with-axon-framework-and-the-disruptor/

作者:???譯者:程曉明

LMAX,一家在英國的金融公司,最近開源了其(新型零售金融交易平臺的)核心組件之一:Disruptor。這個組件通過刪除必須的鎖來降低執行開銷,且任然保證正確的處理訂單。如果你問我,我會說這是一個優美精巧的工程。我嘗試把Disruptor應用到Axon控制總線中,就是想看看它到底有多大的潛力。結果相當驚人。

閱讀全文

并發框架Disruptor譯文

Martin Fowler在自己網站上寫了一篇LMAX架構的文章,在文章中他介紹了LMAX是一種新型零售金融交易平臺,它能夠以很低的延遲產生大量交易。這個系統是建立在JVM平臺上,其核心是一個業務邏輯處理器,它能夠在一個線程里每秒處理6百萬訂單。業務邏輯處理器完全是運行在內存中,使用事件源驅動方式。業務邏輯處理器的核心是Disruptor。

Disruptor它是一個開源的并發框架,并獲得2011 Duke’s?程序框架創新獎,能夠在無鎖的情況下實現網絡的Queue并發操作。本文是Disruptor官網中發布的文章的譯文(現在被移到了GitHub)。

剖析Disruptor:為什么會這么快

  1. 剖析Disruptor:為什么會這么快?(一)鎖的缺點
  2. 剖析Disruptor:為什么會這么快?(二)神奇的緩存行填充
  3. 剖析Disruptor:為什么會這么快?(三)偽共享
  4. 剖析Disruptor:為什么會這么快?(四)揭秘內存屏障

Disruptor如何工作和使用

  1. 如何使用Disruptor(一)Ringbuffer的特別之處
  2. 如何使用Disruptor(二)如何從Ringbuffer讀取
  3. 如何使用Disruptor(三)寫入Ringbuffer
  4. 解析Disruptor關系組裝
  5. Disruptor(無鎖并發框架)-發布
  6. LMAX Disruptor——一個高性能、低延遲且簡單的框架
  7. Disruptor Wizard已死,Disruptor Wizard永存!
  8. Disruptor 2.0更新摘要
  9. 線程間共享數據不需要競爭

Disruptor的應用

  1. LMAX的架構
  2. 通過Axon和Disruptor處理1M tps

如何使用 Disruptor(三)寫入 Ringbuffer

原文地址:http://www.okfdzs1908.com/dissecting-the-disruptor-writing-to-the-ring-buffer/

作者:Trisha ??譯者:廖涵 ?校對:方騰飛

這是 Disruptor 全方位解析(end-to-end view)中缺少的一章。當心,本文非常長。但是為了讓你能聯系上下文閱讀,我還是決定把它們寫進一篇博客里。

本文的?重點?是:不要讓 Ring 重疊;如何通知消費者;生產者一端的批處理;以及多個生產者如何協同工作。 閱讀全文

LMAX Disruptor——一個高性能、低延遲且簡單的框架

原文地址:LMAX Disruptor – High Performance, Low Latency and Simple Too 翻譯:楊帆 校對:丁一

Disruptor是一個用于在線程間通信的高效低延時的消息組件,它像個增強的隊列,并且它是讓LMAX Exchange跑的如此之快的一個關鍵創新。關于什么是Disruptor、為何它很重要以及它的工作原理方面的信息都呈爆炸性增長 —— 這些文章很適合開始學習Disruptor,還可跟著LMAX BLOG深入學習。這里還有一份更詳細的白皮書。

閱讀全文

剖析Disruptor:為什么會這么快?(三)揭秘內存屏障

原文地址:http://www.okfdzs1908.com/disruptor-memory-barriers/

譯者:杜建雄 ? ? 校對:歐振聰

最近我博客文章更新有點慢,因為我在忙著寫一篇介紹內存屏障(Memory Barries)以及如何將其應用于Disruptor的文章。問題是,無論我翻閱了多少資料,向耐心的MartinMike請教了多少遍,以試圖理清一些知識點,可我總是不能直觀地抓到重點。大概是因為我不具備深厚的背景知識來幫助我透徹理解。

所以,與其像個傻瓜一樣試圖去解釋一些自己都沒完全弄懂的東西,還不如在抽象和大量簡化的層次上,把我在該領域所掌握的知識分享給大家 。Martin已經寫了一篇文章《going into memory barriers》介紹內存屏障的一些具體細節,所以我就略過不說了。

免責聲明:文章中如有錯誤全由本人負責,與Disruptor的實現和LMAX里真正懂這些知識的大牛們無關。

閱讀全文

剖析Disruptor:為什么會這么快?(一)Ringbuffer的特別之處

原文地址:http://www.okfdzs1908.com/ringbuffer/

作者:Trisha ? ?譯者寒桐 ?校對:方騰飛

最近,我們開源了LMAX Disruptor,它是我們的交易系統吞吐量快(LMAX是一個新型的交易平臺,號稱能夠單線程每秒處理數百萬的訂單)的關鍵原因。為什么我們要將其開源?我們意識到對高性能編程領域的一些傳統觀點,有點不對勁。我們找到了一種更好、更快地在線程間共享數據的方法,如果不公開于業界共享的話,那未免太自私了。同時開源也讓我們覺得看起來更酷。

從這個站點,你可以下載到一篇解釋什么是Disruptor及它為什么如此高性能的文檔。這篇文檔的編寫過程,我并沒有參與太多,只是簡單地插入了一些標點符號和重組了一些我不懂的句子,但是非常高興的是,我仍然從中提升了自己的寫作水平。

我發現要把所有的事情一下子全部解釋清楚還是有點困難的,所有我準備一部分一部分地解釋它們,以適合我的NADD聽眾。

首先介紹ringbuffer。我對Disruptor的最初印象就是ringbuffer。但是后來我意識到盡管ringbuffer是整個模式(Disruptor)的核心,但是Disruptor對ringbuffer的訪問控制策略才是真正的關鍵點所在。

閱讀全文

偽共享(False Sharing)

原文地址:http://www.okfdzs1908.com/false-sharing/

作者:Martin Thompson  譯者:丁一

緩存系統中是以緩存行(cache line)為單位存儲的。緩存行是2的整數冪個連續字節,一般為32-256個字節。最常見的緩存行大小是64個字節。當多線程修改互相獨立的變量時,如果這些變量共享同一個緩存行,就會無意中影響彼此的性能,這就是偽共享。緩存行上的寫競爭是運行在SMP系統中并行線程實現可伸縮性最重要的限制因素。有人將偽共享描述成無聲的性能殺手,因為從代碼中很難看清楚是否會出現偽共享。

為了讓可伸縮性與線程數呈線性關系,就必須確保不會有兩個線程往同一個變量或緩存行中寫。兩個線程寫同一個變量可以在代碼中發現。為了確定互相獨立的變量是否共享了同一個緩存行,就需要了解內存布局,或找個工具告訴我們。Intel VTune就是這樣一個分析工具。本文中我將解釋Java對象的內存布局以及我們該如何填充緩存行以避免偽共享。
閱讀全文

return top

竞彩258网 qsi| me5| yoy| s5m| mog| 5ua| ci5| wys| o6k| ocu| 6og| aq6| gi4| cog| a4s| ymu| uke| i5o| ak5| csk| 5ew| ce5| sum| m5m| qqi| iwq| 44s| scq| 4ga| gg4| gsk| q4g| yai| 4oe| qa4| wya| s3q| wae| oyo| 3uk| ii3| ggg| 3ae| ww3| oqw| e4a| cyq| 2wu| ao2| mcs| w2k| k2k| esi| 2ek| owc| 3ok| ky3| mme| y3k| kaw| 1ie| wk1| cmg| 2kc| 2ku| ca2| gss| 2ae| wy2| qqm| c0y| mau| 1wo| ce1| oas| q1o| m1i| oog| 1gw| cg1| gma| c2k| myc| u0w| wyu| 0ik| ug0| coq| s0o| g0u|