系统边界


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

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

  2. tomcat运行时JVM参数调整

    进入tomcat/bin目录 catalina.bat 中加入set JAVA_OPTS=-Xms210m -Xmx256m -Xmn70m -XX:PermSize=150m -XX:MaxPerm ...

  3. 改造继续之eclipse集成tomcat开发spring mvc项目配置一览

    在上一篇的环境配置中,你还只能基于maven开发一个javase的项目,本篇来看如果开发一个web项目,所以还得配置一下tomcat和spring mvc. 一:Tomcat安装 在.net web开 ...

  4. Microsoft Azure Storage Exployer使用指南

    概述 Microsoft Azure Storage Exployer 是微软官方推荐的一款管理Azure Storage 客户端工具,客户使用完全免费.支持Windows.Mac和Linux.用户使 ...

  5. Maven详解(七)------ 创建Web工程以及插件原理

    1.什么是 Maven 插件? 上一篇博客我们将了 Maven 的生命周期,我们知道 Maven 的核心是生命周期,生命周期指定了 Maven 命令执行的流程顺序.但是真正实现流程的工程是由插件来完成 ...

  6. SoapUI 之 JDBC请求

    之前有试过Jmeter的JDBC请求,挺方便的,今天下午闲来没事,看见soapUI里面也有一个JDBC请求,便也来试试. 首先添加一个JDBC请求,然后直接把Jmeter的一些链接参数复制过去,一直报 ...

  7. C# 使用NPOI 实现Excel的简单导入导出

    private void btnImport_Click(object sender, EventArgs e) { DataSet ds = new DataSet(); DataTable dt ...

  8. vs下开端口直接调试iis

    有些时候我们接口调试不想发布然后挂到iis下面,因为这样子调试有点麻烦,不是不可以调试.当然我们就希望在vs下直接运行直接打断点调试! 只需要三步就可以实现: 1)  找到这个文件 2)  打开上面文 ...

  9. postman 第1节 安装启动(转)

    安装: 1.mac app安装 浏览器访问https://www.getpostman.com/apps,选择Get the Mac App,下载安装即可 2.chrome app安装 浏览器访问ht ...

  10. Android项目实战(三十四):蓝牙4.0 BLE 多设备连接

    最近项目有个需求,手机设备连接多个蓝牙4.0 设备 并获取这些设备的数据. 查询了很多资料终于实现,现进行总结. ------------------------------------------- ...