HTML5技术

“一切都是消息”--MSF(消息服务框架)入门简介 - 深蓝医生

字号+ 作者:H5之家 来源:H5之家 2017-09-29 17:00 我要评论( )

一切都是消息 --这是MSF(消息服务框架)的设计哲学。 MSF的名字是 Message Service Framework 的简称,中文名称:消息服务框架,它是PDF.NET框架的一部分。 1,MSF诞生的背景 MSF最初来源于2009年,我们为某银行开发的基金投资分析系统,由于银行安全的原因

一切都是消息”--这是MSF(消息服务框架)的设计哲学。

MSF的名字是 Message Service Framework 的简称,中文名称:消息服务框架,它是PDF.NET框架的一部分。

1,MSF诞生的背景

MSF最初来源于2009年,我们为某银行开发的基金投资分析系统,由于银行安全的原因并且这些投资资料属于机密资料,规定必须使用邮件系统来发送这些资料,但是邮件的收发不是直接针对人,而是两端的计算机程序。为了及时向客户发送这些投资资讯,我们使用WCF开发了基于邮件的通信系统。后来,从这套系统中分离出来跟业务无关的“消息推送框架”,这就是MSF的雏形。

2011年,我来到某在线拍卖的电商创业公司,公司要求在1个月内开发出一套拍卖客户端软件。大家都知道创业公司的工作节奏,这么短时间要开发出一套类似炒股软件的在线拍卖软件是很难的,幸好有之前的“消息推送框架”,买家通过竞拍软件,实时更新竞拍价格,众多买家和卖家在线完成拍卖,整点抢拍,“消息推送框架”作为竞拍软件的基础服务通信框架,保证了整个软件的研发成功。不幸的是当时很多客户用的还是XP系统,还是深度克隆版,装不上.NET框架,半年后客户端产品放弃了,公司整体上转向BS应用结构和移动APP软件,“消息推送框架”在公司也随着客户端产品的遗弃而不再有人提起。

2015年,“消息推送框架”纳入PDF.NET框架集合,正式命名为MSF,对外开源。

2,MSF的技术架构
  • 基于WCF技术构建
  • 成熟,稳定,安全可靠  
  • 极简配置,拿来即用
  • 基本上只需要配置一下监听地址和端口号即可 
  • MSF Host-服务的容器
  • 不需要再开发宿主程序,写好的服务组件直接放入宿主程序即可使用,就像Web应用寄宿在IIS上面一样。 
  • NetTcpBinding,双工通信
  • 二进制通信,速度更快  
  • 请求-响应的模式
  • 绝大多数RPC框架调用服务的方式  
  • 发布-订阅的推送模式
  • 服务器发布服务,客户端订阅服务,服务器向客户端推送消息
  • 异步通信
  • 内部基于双工回调实现异步功能
  • 下面是技术架构图:

     

    3,MSF设计哲学 MSF:一切都是消息 消息不都是队列暂存,也可以是实时的:

    我们一看到消息,容易想到消息队列的,消息都存储在消息队列中,但实际上,消息也可以不存在消息队列中(数据库,文件都可以作为消息队列持久化的一种方式),消息可以出现在函数的参数上,类或者方法中的变量上,作为实时消息来处理。

    命令是消息,事件也是消息:

    在CQRS架构中,将操作分为命令和查询,命令改变对象的状态,查询仅查询对象的状态。如果是基于分布式环境的CQRS架构,那么这些命令和查询,本质上还是客户端与服务端的消息通信而已。

    在另外一些架构中,对象的操作可能也会分为操作命令和操作结果引发的事件的概念,假如这些操作的对象相互是隔离的,对象之间的这种通信还是基于消息的,只不过是进程内的消息。

    每种不同的消息可以看做是对象的不同方法:

    如果我们要进行一个RPC调用,客户端向服务器端传递消息,这种消息最终是映射到服务器端对象的不同方法的。比如常见的WebAPI这种RPC,我们跟服务器通信的就是一个个调用API的URL形式的消息。

    服务是消息的生产者,客户是消息的消费者:

    这里说明的是服务端,客户端与消息3者的关系,服务端提供服务,客户端使用服务,但是服务端提供什么样的服务,客户端要调用那个服务,都需要消息交换,比如一家餐厅提供餐饮服务,它要生产一条提供服务的消息,比如在门口挂一个牌子,牌子上写明本店卖什么菜品;一个顾客经过这家餐厅,看到这个牌子,觉得正好有自己喜欢的菜品,于是进餐厅就餐,顾客的消费过程,其实首先消费的是这个牌子上写的菜品消息。

    MSF:服务不是被动的,也可以是主动的

    我们用惯了WebService,RPC等,可能习惯性的认为,服务都是被动请求然后提供服务的,但在实际生活中,商家这样服务是越来越不行了,比如前面餐厅的例子,它提供餐饮服务的,竞争的人多了,老板只好亲自站在门口,问路过的小哥:

    “帅哥想吃什么?这里啥都有。”

    这个时候,餐饮信息由之前的餐饮信息牌子,变成老板的吆喝声音主动进入你的耳朵,而不是等着你去看那个牌子了。显然,服务可以是主动的,并且主动服务效果更好。这个道理现实生活中如此,程序世界也是如此,我们需要将我们的服务及时的推送给客户端,这样客户端就由主动调用服务变成了被动接受服务了。

    MSF:异步无处不在

    世界的本质是异步的,你永远跟不上光的脚步!

    爱因斯坦在头脑中对光的思考,诞生了伟大的“相对论”理论,我想它不会反对我说的这句话:)

    不过,只有一个人他一定会首先出来反对我,那就是 马克斯·普朗克,他说“量子纠缠” 效应的发生,几乎就是同步的!

    普朗克的量子世界距离我们普通人的世界有点远,对我们普通人而言,说“异步无处不在”没什么大问题:)

    举个例子:

    古时候,将军在边疆驻军,皇帝要想对敌人发动攻击,他要写一道金牌,然后让传令兵八百里加急,昼夜驰骋将军令送到将军手中。将军接到命令的时候,离皇帝下达命令,往往已经过去好几天了,将军接到命令与皇帝发出命令,在时间上总是有差异的,而这个时间差异可能敌情已经发生了变化,将军需要根据实际情况来决定,是马上发动攻击还是暂时不执行命令,所以才有“将在外军令有所不受”的说法。当然,现在有了电报电话,可以用这些先进手段来通信,但还是有延迟,比如我们看到的电视直播一样,主持人询问现场记者情况,记者总是会等几秒才能回应。

    在计算机通信领域,我们来看同步和异步的区别。

    同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。  
    异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
    同步是阻塞模式,异步是非阻塞模式。所以,现在很多大型分布式系统都采用异步通信来提高系统的处理能力,随着大数据云计算越来越流行,异步处理变得越来越常见。

     4,MSF的技术特点

     

    5,MSF与Actor编程模型

    Actor模型是一个概念模型,用于处理并发计算。它定义了一系列系统组件应该如何动作和交互的通用规则,最著名的使用这套规则的编程语言是Erlang。这篇文章更关注模型本身而不是它在不同语言的实现。

    一个Actor指的是一个最基本的计算单元。它能接收一个消息并且基于其执行计算。
    这个理念很像面向对象语言,一个对象接收一条消息(方法调用),然后根据接收的消息做事(调用了哪个方法)。

    以上内容,来自《10 分钟了解 Actor 模型》,更多内容请参考原文。

     

    Actor模型作为一种重要的并发编程模型,它比操作系统原生的基于线程的变法编程模型,提供了更高的抽象,基于Scala语言开发的Akka,是JAVA虚拟机JVM平台上构建高并发、分布式和容错应用的工具包和运行时。

    Akka它处理并发的方法基于Actor模型。在Akka里,Actor之间通信的唯一机制就是消息传递。Akka的流行使得Actor这种编程模型被人们讨论的越来越多。

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • Redis和消息队列使用实战 - 静儿1986

      Redis和消息队列使用实战 - 静儿1986

      2017-08-22 12:00

    • 解决百度富文本编辑器 UEditor 插入视频后没有路径的问题 - 我们都是程序猿

      解决百度富文本编辑器 UEditor 插入视频后没有路径的问题 - 我们都是

      2017-08-02 13:00

    • 解决HTML5的Video标签,有部分MP4无法播放的问题 - 我们都是程序猿

      解决HTML5的Video标签,有部分MP4无法播放的问题 - 我们都是程序猿

      2017-07-26 14:00

    • HTML5支持服务器发送事件(Server-Sent Events)-单向消息传递数据推送(C#示例) - 熊仔其人

      HTML5支持服务器发送事件(Server-Sent Events)-单向消息传递数据推送

      2017-05-19 11:02

    网友点评
    p