分佈式,高可用,和機器學習同樣,最近幾年被說起得最多的名詞,聽名字多牛逼,來,咱們一步一步來擊破前兩個名詞,今天咱們首先來講說分佈式。
java
探究高可用服務端架構的優秀資料索引從屬於筆者的 服務端應用程序開發與系統架構 系列文章;最近隨着公司業務的發展與終端用戶的增長,保證系統的高可用性也日漸成爲團隊考慮的重要因素,筆者也把去年以來看的一些文章歸集整理,拋磚引玉,若是有其餘優秀的望不吝賜教。
nginx
挺好,能夠看看,架構設計原則 - 減小一層又一層的流量
程序員
本文的目的正是分析 I/O 的內在工做機制,你將瞭解到:Java 的 I/O 類庫的基本架構;磁盤 I/O 工做機制;網絡 I/O 的工做機制;其中以網絡 I/O 爲重點介紹 Java Socket 的工做方式;你還將瞭解到 NIO 的工做方式,還有同步和異步以及阻塞與非阻塞的區別,最後咱們將介紹一些經常使用的關於 I/O 的優化技巧。
面試
對 AQS 進行源碼剖析
算法
高併發常常會發生在有大活躍用戶量,用戶高彙集的業務場景中,如:秒殺活動,定時領取紅包等。
爲了讓業務能夠流暢的運行而且給用戶一個好的交互體驗,咱們須要根據業務場景預估達到的併發量等因素,來設計適合本身業務場景的高併發處理方案。chrome
在電商相關產品開發的這些年,我有幸的遇到了併發下的各類坑,這一路摸爬滾打過來有着很多的血淚史,這裏進行的總結,做爲本身的歸檔記錄,同時分享給你們。
編程
線程池在多線程編程的中可謂是個利器,使用線程池會大大提升多線程的效率。緣由是使用線程池相對於new Thread有效避免了線程建立和銷燬的開銷。 在Java中通常來講經過Executors來建立所須要的線程池,如:Executors.newFixedThreadPool、Exe…
小程序
前面兩篇文章已經整理了CompletableFuture大部分的特性,本文會整理完CompletableFuture餘下的特性,以及將它跟RxJava進行比較。 Either 表示的是兩個CompletableFuture,當其中任意一個CompletableFuture計算完…
後端
ConcurrentHashMap 是線程安全而且高效的 HashMap,在併發編程中常常可見它的使用,在開始分析它的高併發實現機制前,先講講廢話,看看它是如何被引入 jdk 的。
微信小程序
前言 新書Java併發編程系統與模型已上線,歡迎拜讀。 因爲微信小程序要使用Https,可是又不能修改已有線上的配置。因此最簡單的方法就是使用nginx轉發,在nginx上使用https,而後再轉發到內部服務器。Nginx因爲其優良的性能。一臺4核16GB的內存徹底能夠支撐日均…
互聯網正在高速發展,使用互聯網服務的用戶越多,高併發的場景也變得愈來愈多。電商秒殺和搶購,是兩個比較典型的互聯網高併發場景。雖然咱們解決問題的具體技術方案可能千差萬別,可是遇到的挑戰倒是類似的,所以解決問題的思路也殊途同歸。
無論你是新程序員仍是老手,你必定在面試中遇到過有關線程的問題。Java 語言一個重要的特色就是內置了對併發的支持,讓 Java 大受企業和程序員的歡迎。大多數待遇豐厚的 Java 開發職位都要求開發者精通多線程技術而且有豐富的 Java 程序開發、調試、優化經驗,因此線程相關的問題在面試中常常會被提到。
ZooKeeper 是 Apache 的一個頂級項目,爲分佈式應用提供高效、高可用的分佈式協調服務,提供了諸如數據發佈 / 訂閱、負載均衡、命名服務、分佈式協調 / 通知和分佈式鎖等分佈式基礎服務。因爲 ZooKeeper 便捷的使用方式、卓越的性能和良好的穩定性,被普遍地應用於諸如 Hadoop、HBase、Kafka 和 Dubbo 等大型分佈式系統中。本文的目標讀者是對 ZooKeeper 有必定了解的技術人員,將從 ZooKeeper 運行模式、集羣組成、容災、擴容和縮容四方面逐步深刻,最終構建出高可用的 ZooKeeper 集羣。
最近遇到不少人來諮詢我關於瀏覽器緩存的一些問題,而這些問題都是相似的,所以總結本文來解答之後遇到相似問題的朋友。
因本文主要以瀏覽器緩存場景介紹,因此非瀏覽器場景下的一些用法本文不會介紹,並且本文以 chrome 爲測試瀏覽器。
瀏覽器緩存是指當咱們使用瀏覽器訪問一些網站頁面或者 http 服務時,根據服務端返回的緩存設置響應頭將響應內容緩存到瀏覽器,下次能夠直接使用緩存內容或者僅須要去服務端驗證內容是否過時便可。這樣的好處能夠減小瀏覽器和服務端之間來回傳輸的數據量,節省帶寬提高性能。
新書Java併發編程系統與模型已上線,歡迎拜讀。 一個日均PV在千萬以上的移動客戶端,大概有20w-50w的註冊用戶數。爲了簡單起見,將一次PV來表明一次Http請求。在移動客戶端下,這些是純邏輯的,不包含靜態頁面的訪問和圖片的訪問。 併發量 併發量的計算公式是pv/時間。不管…
從 JDK1.4 開始,java 中提供一個種叫 NIO(Non-Blocking IO)的 IO 處理機制。與以往的標準 IO 機制 (BIO,Blocking IO) 不一樣的是,新的機制把重點放在瞭如何縮短抽象與現實之間的距離上面。NIO 中提出了一種新的抽象,NIO 彌補了原來的 BIO 的不足,它在標準 Java 代碼中提供了高速的、面向塊的 I/O。
NIO 的包括三個核心概念: 緩衝區(Buffer)、通道(Channel)、選擇器(Selector)。
通過本系列的上半部分 JDK1.8 AbstractQueuedSynchronizer 的實現分析的解讀,相信不少讀者已經對 AbstractQueuedSynchronizer(下文簡稱 AQS) 的獨佔功能瞭然於胸, 那麼此次咱們經過對另外一個工具類: CountDownLatch 的分析來解讀 AQS 的另一個功能:共享功能。
netty 源碼分析之拆包器,深刻剖析了 netty 是如何支持各類數據包協議的原理
nginx、swoole 的高併發原理,讓咱們一探究竟。
今天咱們來研究學習一下 AbstractQueuedSynchronizer 類的相關原理, java.util.concurrent 包中不少類都依賴於這個類所提供的隊列式的同步器, 好比說經常使用的 ReentranLock,Semaphore 和 CountDownLatch 等.
爲了方便理解, 咱們以一段使用 ReentranLock 的代碼爲例, 講解 ReentranLock 每一個方法中有關 AQS 的使用.
在java.util.concurrent包中,大部分的同步器都是基於AbstractQueuedSynchronizer(AQS)這個框架實現的。這個框架爲同步狀態提供原子性管理、線程的阻塞和解除阻塞以及排隊提供了一種通用機制。 同步器通常包含2種方法,一種是acquire,…
Java NIO 系列文章
Java 併發編程學習筆記整理
本文是對《大型網站架構設計》(李智慧 著) 一書的梳理,相似文字版的 「思惟導圖」。羅列了大型網站架構涉及到的概念,附上了簡單說明
ZooKeeper 的一致性算法賞析
前幾天,偶然看到了 《扛住 100 億次請求——如何作一個 「有把握」 的春晚紅包系統」》(url)一文,看完之後,感慨良多,收益不少。正所謂他山之石,能夠攻玉,雖然此文發表於 2015 年, 我看到時已是 2016 年底,可是其中的思想仍然是能夠爲不少後端設計借鑑,。同時做爲一個工程師,看完之後又會思考,學習了這樣的文章之後,是否能給本身的工做帶來一些實際的經驗呢?所謂紙上得來終覺淺,絕知此事要躬行,可否本身實踐一下 100 億次紅包請求呢?不然讀完之後腦子裏能剩下的東西 不過就是 100 億 1400 萬 QPS 整流 這樣的字眼,剩下的文章將展現做者是如何以此過程爲目標,在本地環境的模擬了此過程。
實現的目標: 單機支持 100 萬鏈接,模擬了搖紅包和發紅包過程,單機峯值 QPS 6 萬,平穩支持了業務。
注:本文以及做者全部內容,僅表明我的理解和實踐,過程和微信團隊沒有任何關係,真正的線上系統也不一樣,只是從一些技術點進行了實踐,請讀者進行區分。因做者水平有限,有任何問題都是做者的責任,有問題請聯繫 ppmsn2005#gmail.com
ZooKeeper 是一個開源的分佈式協調服務,由雅虎建立,是 Google Chubby 的開源實現。分佈式應用程序能夠基於 ZooKeeper 實現諸如數據發佈 / 訂閱、負載均衡、命名服務、分佈式協調 / 通知、集羣管理、Master 選舉、分佈式鎖和分佈式隊列等功能。
ThreadPoolExecutor 源碼解析
Java 併發編程:線程池的使用
在瞭解具體的 Nginx 配置項以前咱們須要對於 Nginx 配置文件的構成有所概念,通常來講,Nginx 配置文件會由以下幾個部分構成: