记录一下个人对rpc的理解,
Overview
- 两个不同应用之间的一问一答。A应用是一个进程(java -cp),B应用是一个进程(java -cp)
- 为什么要在两个应用之间切换,所有逻辑都在A做不可以吗?可以。但是这样A可能就是一个很庞大的进程了,受限于单机的cpu,disk,mem和GC,太庞大肯定是不行的。所以这里就需要拆分,那么就跟MapReduce很像
MR
里面,一系列低成本的机器就可以handle庞大的请求量和数据量。当然还有很多其他原因,保密、数据互通等等。
Thrift Intro.
先来看看它的架构,
Thrift Architecture
- 顶层黄色是用户根据thrift-IDL来定义的
HelloWord.thrift
文件 - 橙色和红色是运行
thrift-0.11.0.exe -gen java Hello.thrift
命令自动编译的server-client读写代码框架(HelloWord.java) - 紫色Protocol是传输协议(TBinaryProtocol二进制型,TCompactProtocol压缩型,稠密型,json型,简化json型,debug型,6类),定义了消息是怎样序列化和反序列化的
- 蓝红色Transport是传输方式(TSocket阻塞,TFramedTransport非阻塞,TFileTransport写文件落盘,TMemoryTransport缓存型,TZlibTransport等),定义了消息是怎样在客户端和服务器端之间读写通信的
- 底层黑白是I/O具体通信
另外还有2个具体Component,
- processor处理器,具体实现类,定义了数据输入,处理,数据输出的全过程
- server服务器,监听本机ip的某端口,接收数据输入请求,并转发到processor去(TSimpleServer单线程阻塞,TThreadPoolServer多线程阻塞,TNonblockingServer多线程非阻塞NIO与TFramedTransport配套使用)
Grizzly Intro.
Grizzly是一个基于Java NIO的应用程序框架,旨在帮助程序员更好地利用Java NIO API,其中http-server框架有取代tomcat之意,即不用部署tomcat,jetty这样的servlet容器,皆因其自带了内嵌服务器。这样一个jar包就能跑天下,至于负载均衡的事还是交给Nginx来take。
Grizzly Architecture
从右侧底部开启,整体是一个HTTP Services
,核心功能是左侧,主要有内存管理和I/O策略。
QuickStart
根据网上的示例,用Scala实现了一些example,希望能够对着example来快速学习,快速上手,
- thrift-rpc
- grizzly-http
Reference
PREVIOUS20180610兰州马拉松
NEXT20180916北京马拉松