上一篇文章中咱们已经知道了什么是 RPC 框架和为何要作一个 RPC 框架了,这一章咱们来从宏观上分析,怎么来实现一个 RPC 框架,这个框架都有那些模块以及这些模块的做用。java
在咱们的整个框架里比较重要的几个模块:
rpc-procotol: 既然是可插拔是框架,咱们须要支持选择底层协议,这部分是通讯协议相关的模块。
rpc-spring: 咱们的框架是基于 spring 开发的,这个模块是将咱们的一些功能和 spring 整合起来,好比自动注入代理 bean,启动服务端 server 等等。
rpc-register: 注册中心模块,负责服务发现和容错。
rpc-monitor: 将注册中心的信息显示在网页上。
rpc-consumer: 消费端模块,用于测试。
rpc-provider: 服务端模块,用于测试。git
咱们先提早来看看最后最后的效果,首先说明,性能表现测试根据不一样的机器和不一样的网络环境可能会有所不一样,下面的测试结果是基于我本身的机器的。 个人电脑最多起 2000 个并发线程,多了就 OOM 了,在公司的电脑尝试过起 10000 个并发线程,没有任何问题,下面看 2000 个并发线程的表现。github
测试类redis
public static void main(String[] args) throws Exception { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("rpc.xml"); //并行度10000 int parallel = 2000; //开始计时 long a1 = System.currentTimeMillis(); CountDownLatch signal = new CountDownLatch(1); CountDownLatch finish = new CountDownLatch(parallel); for (int index = 0; index < parallel; index++) { CalcParallelRequestThread client = new CalcParallelRequestThread(signal, finish, index,applicationContext); new Thread(client).start(); } //n个并发线程瞬间发起请求操做 signal.countDown(); finish.await(); long a2 = System.currentTimeMillis(); String tip = String.format("RPC调用总共耗时: [%s] 毫秒", a2 - a1); System.out.println(tip); }
2000 并发 1秒多,仍是比较快的。感兴趣的能够试试在本身的电脑起 1w 或者 10w 加线程测试一下。spring