拓展性的聊一聊RPC(Remote Procedure Call)
RPC使用于大型公司内,由于公司的业务增多避免不了将不同的业务分配到不同的主机上进行解耦,它请求其他主机上的服务就像请求自己本机上的服务一样简单。
-HTTP是属于面向接口,通常所谓的RESTful风格的服务接口,很多企业都是这样,一边开发一边写文档。比如,
POST http://www.httpexample.com/restful/buyer/info/share然后注明所有的参数和返回值类型,可能是json对象或者xml类型文件。
那么RPC和HTTP对比来说,RPC适用于大型企业,公司的子系统比较多,借口非常多的情况下,其优越性就体现出来了,首先是长链接,不用每次都像HTTP三次握手,减小网络开销,其次就是RPC框架一般都有注册中心,有丰富的监控管理。例如Facebook的Thrift,Google的gPRC和阿里的Dubbo。
- -RPC可以利用NIO进行实现,提出NIO就相应名词就有BIO和AIO,
- -BIO(Block IO)阻塞IO,它是面向流的,之前进行的socket时,Client发送一个读、写请求后,线程进入阻塞阶段,当完全读完或者写完后才算执行结束,这样及其浪费资源。这样就在Java 1.7的时候提出了NIO。
- -NIO (No-block IO) 非阻塞IO,它是面向缓冲区的(ByteBuffer),NIO其实现原理是当用户发送一个读请求后,它不仅可以读取到目前可用的数据,如果当没有数据可读的时候,线程会做其他的事情,而不是在那傻傻的等(阻塞住);当发送一个写请求是,它将数据写到某个通道上,不用等待写完成,这个线程可以去做其他的事情。这样可以单独的启动一个线程,去管理和选举多个输入输出的通道(Channel)。从逻辑上来讲,这个是同步的。
- -AIO (Asynchronous IO) 异步非阻塞IO,实现原理和NIO差不多,但是其创建了多个回调函数,当处理结果结束后,它会自动的去通知其他函数进行处理数据,这样也不用去傻傻的等待结束。这个有点类似于前段的Ajax异步通信。
拓展性的聊一聊RPC(Remote Procedure Call)
最新推荐文章于 2024-06-18 19:23:18 发布