rpc-quickstart

记录一下个人对rpc的理解,


Overview

  • 两个不同应用之间的一问一答。A应用是一个进程(java -cp),B应用是一个进程(java -cp)
  • 为什么要在两个应用之间切换,所有逻辑都在A做不可以吗?可以。但是这样A可能就是一个很庞大的进程了,受限于单机的cpu,disk,mem和GC,太庞大肯定是不行的。所以这里就需要拆分,那么就跟MapReduce很像
  • MR里面,一系列低成本的机器就可以handle庞大的请求量和数据量。当然还有很多其他原因,保密、数据互通等等。

Thrift Intro.

先来看看它的架构

image

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。

image

Grizzly Architecture

从右侧底部开启,整体是一个HTTP Services,核心功能是左侧,主要有内存管理I/O策略


QuickStart

根据网上的示例,用Scala实现了一些example,希望能够对着example来快速学习,快速上手,

  1. thrift-rpc
  2. grizzly-http

Reference