SimpleRpc-系统边界以及整体架构
系统边界
什么是系统边界?系统边界就是在系统设计之初,对系统所要实现的功能进行界定,不乱添加,不多添加。这么做的好处就是,系统简单明了,主旨明确,方便开发和用户使用。举个例子,一个自动售货机的本职工作是自动售货,用户投入零钱,选择商品,出货,找零,功能简单明了。但是,工程师非要再给售货机添加一个播放音乐的功能,原因是能够提升用户感受,用户在买东西的时候听音乐会心情舒畅,这明显就是乱加功能。更麻烦的是,有一天播放音乐的功能出了故障,由于售货过程依赖音乐播放功能,售货也跟着不能用了,这会更糟糕。如果买东西和播放音乐是独立的,那么即使音乐播放不成功,也不影响用户购买,而现在用户只能眼巴巴看着售货机不断的骂售货机的设计者是个傻X。
那么SimpleRpc的功能边界是什么呢?SimpleRpc只提供一个跨网络RPC框架,用户代码在固定的锚点插入,来完成这个RPC调用。
- 这个RPC不保证数据安全。有些rpc会使用ssl进行数据加密,但是SimpleRpc不考虑这种问题,因为服务调用在同一个机房内进行,不会涉及到外网数据传输,故不考虑数据加密。
- SimpleRpc不支持服务发现机制。有些Rpc会顺带实现服务注册以及发现功能,比如GRPC。但是我们的服务就是展示一个简单的RPC调用,其它功能忽略。
- SimpleRpc只有C++语言代码,暂时不支持其它语言。因为,这个框架只是学习交流的目的,不推荐用在生产环境。
- SimpleRpc不需要IDL(接口描述语言)文件。因为我们就是要略去IDL转换成代码这个繁琐的步骤,我们隐含默认服务端提供固定的计算服务,要求客户端和服务端配套使用。
- SimpleRpc不提供数据的序列化和反序列化功能,我们只专注于RPC调用框架实现,序列化和反序列化可以使用第三方开源软件protobuf完成。
整体架构

客户端请求以及服务端响应的整个流程:
- 客户端序列化请求数据后,通过socket发送给服务器。
- 服务端网络事件监听响应器捕捉到socket上的读事件(由于客户端发送了数据,服务端socket上会有读信号返回,告诉服务端可读)。
- 服务端响应器把读事件放到事件队列中。
- 服务端工作线程从队列中获取事件。
- 服务端工作线程通过事件绑定的端口读取客户端请求,进行反序列化,调用用户层面的请求处理代码(例如做加法)。
- 服务端工作线程把用户层面的处理生成的响应数据序列化成字节流,通过socket发送回客户端。
- 客户端网络事件监听响应器捕捉到socket上的读事件(由于服务端发送了响应数据,客户端socket上会有读信号返回,告诉客户端可读)。
- 利用客户端响应器线程读取网络数据,反序列化,并把响应返回给用户层面代码。
从这个模型中可以看到,客户端与服务端都是用网络事件监听响应器获取网络事件,不同的地方是服务端采用工作线程反序列化、计算,而客户端使用反应器线程做数反序列化。
SimpleRpc-系统边界以及整体架构的更多相关文章
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- Underscore 整体架构浅析
前言 终于,楼主的「Underscore 源码解读系列」underscore-analysis 即将进入尾声,关注下 timeline 会发现楼主最近加快了解读速度.十一月,多事之秋,最近好多事情搞的 ...
- jQuery 2.0.3 源码分析core - 整体架构
拜读一个开源框架,最想学到的就是设计的思想和实现的技巧. 废话不多说,jquery这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery ...
- [转]Android App整体架构设计的思考
1. 架构设计的目的 对程序进行架构设计的原因,归根到底是为了提高生产力.通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点, ...
- jQuery整体架构源码解析(转载)
jQuery整体架构源码解析 最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性, ...
- 《深入理解bootstrap》读书笔记:第二章 整体架构
一. 整体架构 1. CSS-12栅格系统 把网页宽度均分为12等分(保留15位精度)--这是bootstrap的核心功能. 2.基础布局组件 包括排版.按钮.表格.布局.表单等等. 3.jQu ...
- Nginx的负载均衡 - 整体架构
Nginx的负载均衡 - 整体架构 Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd Nginx目前提供的负载均衡模块: ngx_http_upstre ...
- MINIX3 内核整体架构回顾及内核定 性分析
MINIX3 内核整体架构回顾及内核定 性分析 12.1 注意事项 由于本文档不对 I/O 文件系统做出分析,所以在此不对 MINIX3 整体做出一个分 析,本章主要是针对内核进程分析.并且这里的模 ...
- [Bootstrap]7天深入Bootstrap(2)整体架构
大多数Bootstrap的使用者都认为Bootstrap只提供了CSS组件 和JavaScript插件,其实CSS组件和JavaScript插件只是Bootstrap框架的表现形式而已,它们都是构建在 ...
随机推荐
- window.parent.document jquery
使用 jQuery ,写法如下: .$("#myEle", window.parent.document).html(html); 另外还有一种实现方式,代码如下: .parent ...
- spring boot 登录注册 demo (三) -- 前后端传递
前端页面通过thymeleaf渲染 <dependency> <groupId>org.springframework.boot</groupId> <art ...
- 关于Yii2的checkboxList的初始选项设置问题
先在网上找了个checkboxList的描述: public static function checkboxList($name, $selection = null, $items = [], $ ...
- 3_初学sql注入
sql注入的分类:布尔型 报错型 可联合查询型 多语句查询型 基于时间延迟注入 1.注释符 # /* -- 2.过滤空格注入 使用/**/或()或+代替空格 3.多条数据显示 concat(str1, ...
- java基础部分细节
访问控制修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java支持4种不同的访问权限. 默认的,也称为 default,在同一包内可见,不使用任何修饰符. 私有的,以 ...
- 利用jmeter+JAVA对RPC的单接口(dubbo接口等)进行性能测试
建立JAVA项目 建立maven项目,加入Jmeter所需要的JAR包依赖. POM.xml 加入如下: <dependency> <groupId>org.apache.j ...
- appium 判断app是否安装
#coding:utf-8 #Import the common package import os import unittest from appium import webdriver from ...
- LVS之-LAMP搭建wordpress
author:JevonWei 版权声明:原创作品 LVS搭建wordpress,涉及的知识点有DNS,LAMP,NFS及LVS 网络拓扑图 网络环境 NFS 192.168.198.130 mysq ...
- xcode模拟器不显示键盘解决方案
当我们使用Xcode进行开发的时候,并不是所有的时候都需要将代码运行在iPhone,有时候模拟器就可以解决这些问题, 但是当你使用模拟器的时候会发现,在TextFiled中输入信息时,如果你是用模拟器 ...
- 深入剖析ConcurrentHashMap 一
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt201 ConcurrentHashMap是Java5中新增加的一个线程安全的 ...