系统边界


什么是系统边界?系统边界就是在系统设计之初,对系统所要实现的功能进行界定,不乱添加,不多添加。这么做的好处就是,系统简单明了,主旨明确,方便开发和用户使用。举个例子,一个自动售货机的本职工作是自动售货,用户投入零钱,选择商品,出货,找零,功能简单明了。但是,工程师非要再给售货机添加一个播放音乐的功能,原因是能够提升用户感受,用户在买东西的时候听音乐会心情舒畅,这明显就是乱加功能。更麻烦的是,有一天播放音乐的功能出了故障,由于售货过程依赖音乐播放功能,售货也跟着不能用了,这会更糟糕。如果买东西和播放音乐是独立的,那么即使音乐播放不成功,也不影响用户购买,而现在用户只能眼巴巴看着售货机不断的骂售货机的设计者是个傻X。

那么SimpleRpc的功能边界是什么呢?SimpleRpc只提供一个跨网络RPC框架,用户代码在固定的锚点插入,来完成这个RPC调用。

  1. 这个RPC不保证数据安全。有些rpc会使用ssl进行数据加密,但是SimpleRpc不考虑这种问题,因为服务调用在同一个机房内进行,不会涉及到外网数据传输,故不考虑数据加密。
  2. SimpleRpc不支持服务发现机制。有些Rpc会顺带实现服务注册以及发现功能,比如GRPC。但是我们的服务就是展示一个简单的RPC调用,其它功能忽略。
  3. SimpleRpc只有C++语言代码,暂时不支持其它语言。因为,这个框架只是学习交流的目的,不推荐用在生产环境。
  4. SimpleRpc不需要IDL(接口描述语言)文件。因为我们就是要略去IDL转换成代码这个繁琐的步骤,我们隐含默认服务端提供固定的计算服务,要求客户端和服务端配套使用。
  5. SimpleRpc不提供数据的序列化和反序列化功能,我们只专注于RPC调用框架实现,序列化和反序列化可以使用第三方开源软件protobuf完成。

整体架构


客户端请求以及服务端响应的整个流程:

  1. 客户端序列化请求数据后,通过socket发送给服务器。
  2. 服务端网络事件监听响应器捕捉到socket上的读事件(由于客户端发送了数据,服务端socket上会有读信号返回,告诉服务端可读)。
  3. 服务端响应器把读事件放到事件队列中。
  4. 服务端工作线程从队列中获取事件。
  5. 服务端工作线程通过事件绑定的端口读取客户端请求,进行反序列化,调用用户层面的请求处理代码(例如做加法)。
  6. 服务端工作线程把用户层面的处理生成的响应数据序列化成字节流,通过socket发送回客户端。
  7. 客户端网络事件监听响应器捕捉到socket上的读事件(由于服务端发送了响应数据,客户端socket上会有读信号返回,告诉客户端可读)。
  8. 利用客户端响应器线程读取网络数据,反序列化,并把响应返回给用户层面代码。

从这个模型中可以看到,客户端与服务端都是用网络事件监听响应器获取网络事件,不同的地方是服务端采用工作线程反序列化、计算,而客户端使用反应器线程做数反序列化。

SimpleRpc-系统边界以及整体架构的更多相关文章

  1. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  2. Underscore 整体架构浅析

    前言 终于,楼主的「Underscore 源码解读系列」underscore-analysis 即将进入尾声,关注下 timeline 会发现楼主最近加快了解读速度.十一月,多事之秋,最近好多事情搞的 ...

  3. jQuery 2.0.3 源码分析core - 整体架构

    拜读一个开源框架,最想学到的就是设计的思想和实现的技巧. 废话不多说,jquery这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery ...

  4. [转]Android App整体架构设计的思考

    1. 架构设计的目的 对程序进行架构设计的原因,归根到底是为了提高生产力.通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点, ...

  5. jQuery整体架构源码解析(转载)

    jQuery整体架构源码解析 最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性, ...

  6. 《深入理解bootstrap》读书笔记:第二章 整体架构

    一.  整体架构   1. CSS-12栅格系统 把网页宽度均分为12等分(保留15位精度)--这是bootstrap的核心功能. 2.基础布局组件 包括排版.按钮.表格.布局.表单等等. 3.jQu ...

  7. Nginx的负载均衡 - 整体架构

    Nginx的负载均衡 - 整体架构 Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd Nginx目前提供的负载均衡模块: ngx_http_upstre ...

  8. MINIX3 内核整体架构回顾及内核定 性分析

    MINIX3  内核整体架构回顾及内核定 性分析 12.1 注意事项 由于本文档不对 I/O 文件系统做出分析,所以在此不对 MINIX3 整体做出一个分 析,本章主要是针对内核进程分析.并且这里的模 ...

  9. [Bootstrap]7天深入Bootstrap(2)整体架构

    大多数Bootstrap的使用者都认为Bootstrap只提供了CSS组件 和JavaScript插件,其实CSS组件和JavaScript插件只是Bootstrap框架的表现形式而已,它们都是构建在 ...

随机推荐

  1. CentOS7 搭建Git服务器(转)

    1.在服务器上创建一个新用户 adduser git 2.创建一个Git仓库 cd /data/git //切换到希望创建工作区的目录git init --bare sample.git //创建一个 ...

  2. JAVA 验证码生成(转)

    最近做了一下验证码的功能,网上找了一篇还不错,引用下:http://blog.csdn.net/ruixue0117/article/details/22829557 这篇文章非常好,但是web和js ...

  3. win10 安装 mysql解压版安装步骤

    参考资料:win 10 安装 mysql 5.7 网址:http://blog.sina.com.cn/s/blog_5f39af320102wbk0.html 本文参考上面的网址的教程,感谢作者分享 ...

  4. css div旋转之后自适应

    css: .rotate90deg { transform: rotate(90deg); -ms-transform: rotate(90deg); /* IE 9 */ -moz-transfor ...

  5. 修改(同步)linux时间

    新申请下来的机器的时间现在我们所在的时区不一致,需要同步成东八区 查看当前的时间: date -R; date +%z 修改时区: cp /usr/share/zoneinfo/Asia/Shangh ...

  6. Tomcat8安装及配置教程

    Apache  Tomcat8.0安装及配置教程.. Apache  Tomcat8.0官方网站链接:http://tomcat.apache.org/ apache-tomcat-8.0.39-wi ...

  7. 使用Java模拟一个简单的Dos学生成绩管理系统:

    使用Java模拟学生成绩管理系统... ------------------- 学生成绩管理系统:需要实现的功能:1.录入学生的姓名和成绩2.显示列表.列表中包括学生姓名与成绩3.显示最高分.最低分的 ...

  8. javaweb中重定向和请求转发(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的区别

    先来两张图,方便理解: 可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源 而请求转发时,类似于是服务器自己向自己发了一个跳转 ...

  9. 火币网现货API[Python3版]

    火币 期货 现货 API [Python3版] 一.Util.py,基础类,包括参数配置.签名,HTTP 请求方法,发送信息到API #coding=utf-8 import hashlib impo ...

  10. 读取xml文件中节点

    /// <summary> /// /// </summary> /// <param name="xmlpath">节点路径</para ...