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调用性能差的三宗罪相关推荐
- 【读后感】Netty 系列之 Netty 高性能之道 - 相比 Mina 如何 ?
[读后感]Netty 系列之 Netty 高性能之道 - 相比 Mina 如何 ? 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商 ...
- Netty:高性能之道
1.RPC调用性能模型分析 传统RPC调用性能差的三宗罪 1.网络传输方式问题.传统的RPC框架或者基于RMI等方式的远程服务调用采用了同步阻塞I/O,当客户端的并发压力大或者网络延时增大之后,同步阻 ...
- Netty 高性能之道 - Recycler 对象池的复用
前言 我们知道,Java 创建一个实例的消耗是不小的,如果没有使用栈上分配和 TLAB,那么就需要使用 CAS 在堆中创建对象.所以现在很多框架都使用对象池.Netty 也不例外,通过重用对象,能够避 ...
- Netty 高性能特性
转自:http://www.infoq.com/cn/articles/netty-high-performance/ 1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用N ...
- 深入剖析通信层和RPC调用的异步化(上)
<Netty 进阶之路>.<分布式服务框架原理与实践>作者李林锋深入剖析通信层和 RPC 调用的异步化.李林锋此后还将在 InfoQ 上开设 Netty 专题持续出稿,感兴趣的 ...
- Netty高性能编程
http://calvin1978.blogcn.com/articles/netty-performance.html 网上赞扬Netty高性能的文章不要太多,但如何利用Netty写出高性能网络应用 ...
- Netty高性能编程备忘录(上)
http://calvin1978.blogcn.com/articles/netty-performance.html 网上赞扬Netty高性能的文章不要太多,但如何利用Netty写出高性能网络应用 ...
- RPC框架性能基本比较测试
from: http://www.useopen.net/blog/2015/rpc-performance.html RPC框架性能基本比较测试 gRPC是Google最近公布的开源软件,基于最新的 ...
- Java基础之《netty(30)—RPC调用流程分析》
一.RPC基本介绍 1.RPC(Remote Procedure Call)-远程过程调用,是一个计算机通信协议.该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序无需额外的为这个交互作 ...
- [强烈推荐] 新手入门:目前为止最透彻的的Netty高性能原理和框架架构解析
新手入门:目前为止最透彻的的Netty高性能原理和框架架构解析 1.引言 Netty 是一个广受欢迎的异步事件驱动的Java开源网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端. 本文基 ...
最新文章
- c++学习笔记之析构函数
- 分享一个免费短信猫OCX源码
- 最近用.NET实现DHT爬虫,全.NET实现
- 三十、MySQL 处理重复数据
- Spring Boot (4)---配置文件详解
- 开源syslog服务器_开源API网关Kong基本介绍和安装验证
- 图片夹_【第8期】EHS大咖答疑解惑吊运事故的罪魁祸首之一:钢丝绳夹!不看不知道!...
- C盘空间不够?win10自带mklink命令给C盘软件搬家减负【计算机小白必备】
- 手写图像反转,变换,imhist,均衡化,均值中值滤波,sobel以及拉普拉斯实现图像锐化
- 接口测试一般怎么测?接口测试的流程和步骤
- Themida/WinLicense V1 8 2 0 +脱壳 FOR PcShare远程控制会员版本20070826
- ctc系统数据库服务器采用,CTC系统构成
- 扑克牌练习 【数据结构】
- 想转行it , 培训还是自学?
- Python pydub 截取音频
- 天玑9000和骁龙8 gen1哪个好 天玑9000和骁龙8 gen1差距
- 外贸人需要准备的浏览器插件有哪些?
- 计算机硬件专业叫什么作用,计算机硬件的五大功能是什么呢
- 百度智能小程序SEO指南
- Java设计模式之建造者模式(精髓版)
热门文章
- 没有苹果开发账号,只有p12文件和mobileprovision文件进行打包
- 依赖函数检查 mysql_connect()_解决的方法:mysql_connect()不支持请检查mysql模块是否正确载入...
- JS判断当前浏览器安装的flash版本
- 'MPD' object has no attribute 'myIP'
- Android Camera2对焦框和对焦
- 再次推荐下这本书 —— DDIA
- android JeckPack官方文档学习
- 【LGP5108】仰望半月的夜空
- matlab连通区域质心标记,连通域的质心
- 新版TeamTalk部署教程