Netty高性能之道1-传统RPC调用性能差的三宗罪
這是閱讀完李林峰的《Netty權威指南》之后,覺得本書中比較重點的部分,就做了摘抄,即加深了學習,又可以給大家提供一些幫助。
傳統RPC調用性能差的三宗罪
1、網絡傳輸方式問題。傳統的RPC框架或者基于RMI等方式的遠程服務(過程)調用采用了同步阻塞I/O,當客戶端的并發壓力或者網絡延時增大之后,同步阻塞I/O會由于頻繁的wait導致I/O線程經常性的阻塞,由于線程無法高效的工作,I/O處理能力自然下降。
采用BIO通信模型的服務端,通常有一個獨立的Acceptor線程負責監聽客戶端的連接,接收到客戶端連接之后,為其創建一個新的線程處理請求信息,處理完成之后,返回應答消息給客戶端,線程銷毀,這就是典型的一請求一應答模型。該架構最大的問題就是不具備彈性伸縮能力,當并發訪問量增加之后,服務端的線程個數和并發訪問數呈線性正比,由于線程是Java虛擬機非常寶貴的系統資源,當線程數膨脹之后,系統的性能急劇下降,隨著并發量的繼續增加,可能會發生句柄溢出、線程堆棧溢出等問題,并導致服務器最終宕機。
2、序列化性能差。Java序列化存在以下幾個典型的問題:
1)Java序列化機制是Java內部的一種對象編解碼技術,無法跨語言使用。例如對于異構系統之間的對接,Java序列化后的碼流需要通過其他語言反序列化成原始對象(副本),目前很難支持。
2)相比于其他的開源序列化框架,Java序列化后的碼流太大,無論是網絡傳輸還是持久化到磁盤,都會導致額外的資源占用。
3)序列化性能差,資源占用率高(主要是CPU資源占用高)。
3、線程模型問題。由于采用同步阻塞I/O,這會導致每個TCP連接都占用1個線程,由于線程資源是JVM虛擬機非常寶貴的資源,當I/O讀寫阻塞導致線程無法及時釋放時,會導致系統性能急劇下降,嚴重的甚至會導致虛擬機無法創建新的線程。
總結
以上是生活随笔為你收集整理的Netty高性能之道1-传统RPC调用性能差的三宗罪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux中Qt环境编译链接依赖open
- 下一篇: php转html为pdf后部分图片无法显