传统的RPC调用性能差的原因

罪行一:

网络传输方式问题。传统的RPC框架或者基于RMI等方式的远程服务(过程)调用采用同步阻塞IO,当客户端的并发压力或者网络延时增大之后,同步阻塞I/O会由于频繁的wait导致I/O线程经常性的阻塞,由于线程无法高效的工作,I/O处理能力自然下降

采用BIO通信模型的服务,通常由一个独立的Acceptor线程负责监听客户端的链接,收到客户端连接之后,为其创建一个新的线程处理请求消息,处理完成之后,返回给应该消息给客户端,线程销毁,这就是典型的一请求一应答模型,改架构最大的问题就是不具备弹性伸缩的能力,当并发访问量增加后,服务端的线程个数和并发访问数成线性正比由于线程是java虚拟机非常宝贵的系统资源,当线程数膨胀之后,系统的性能记聚下降,随着并发量的继续增加,可能会发生句柄溢出,线程堆栈溢出等常见问题,并导致服务器最终宕机


罪行二:

序列化性能差。

java序列化存在存在以下问题:


1.java序列化机制是java内部的一种对象编码技术,无法跨语言使用,例如对于异构系统之间的对接,java序列化后的码流需要能通过其他语言反序列化成原始对象(副本)目前很难支持

2 相比于其他开源的序列化框架,java序列化后的码流太大,无论是网络传输还是持久化到磁盘,都会导致额外的资源占用


3.序列化性能差,资源占用率高*主要思CPU资源占用高


罪行三


线程模型问题,由于采用同步阻塞IO,这会导致每个TCP连接都占用1个线程,由于线程资源是JVM虚拟机非常宝贵的资源,当I/O读写阻塞导致线程无法及时释放,会导致系统性能急剧下降,严重的会导致虚拟机无法创建新的线程。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值