系统边界


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

    即使在创建Mysql时url中加入了autoReconnect=true参数,一但这个连接两次访问数据库的时间超出了服务器端wait_timeout的时间限制,还是会CommunicationsExc ...

  2. 刚安装Fedora 23工作站后,你必须要做的24件事

    [51CTO.com快译]Fedora 23工作站版本已发布,此后我们就一直在密切关注它.我们已经为新来读者介绍了一篇安装指南:<Fedora 23工作站版本安装指南> 还有一篇介绍如何从 ...

  3. 【Ubuntu 16】安装ssh

    ubuntu16默认使用ufw(Uncomplicated FireWall 继承自 iptables)管理防火墙,使用gufw图形化界面方便管理, 默认情况下openssh-server没有安装. ...

  4. WeQuant交易策略—Dual Thrust

    Dual Thrust策略 策略介绍 Dual Thrust是一个趋势跟踪系统,由Michael Chalek在20世纪80年代开发,曾被Future Thruth杂志评为最赚钱的策略之一. Dual ...

  5. BotVS开发基础—2.11 API绘制图表

    代码 import time chart = { '__isStock': True, # 标记是否为一般图表,有兴趣的可以改成 false 运行看看. 'tooltip': {'xDateForma ...

  6. RSA,Miller-Rabin素数测试的源流及其证明

    一.RSA与公钥加密系统的起源与影响. 为了更好地突出公钥加密系统相对私钥加密系统的优势,让我们从这两个问题开始: 这个世界上如果没有公钥加密系统会怎么样呢?全用私钥加密系统会出现什么问题呢? 首先, ...

  7. Django 学习笔记(三)模板导入

    本章内容是将一个html网页放进模板中,并运行服务器将其展现出来. 平台:windows平台下Liunx子系统 目前的目录: hello ├── manage.py ├── hello │ ├── _ ...

  8. POI实现excel各种验证和导入的思路总结

      制定标准 导入总是与导出相辅相成的,无规矩不成方圆.所谓的标准都是大家一同来维护和遵守的,那么首先就是制定一个模板. 这样可以减少验证的工作量. 例如时间的规范[yyyy-MM-dd],获取单元格 ...

  9. 使用 Palette 让你的 UI 色彩与内容更贴合

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章. 未经允许,不得转载. 一.前言 今天介绍一个 An ...

  10. SourceTree使用方法介绍

    SourceTree比命令行更容易操作,能更直观看到发生了什么.但是没有哪一家git图形化软件能完成git的所有操作,封装后的使用也隐藏了git的一些细节,在图形化工具出现一些非常罕见的情况时,还是需 ...