管道通信基础原理原创
金蝶云社区-供应链-王
供应链-王
11人赞赏了该文章 321次浏览 编辑于2020年7月16日 13:39:13

上次有讲到成为一名资深星空开发,需要掌握的架构知识,这次我们就来开始分析BOS基础源代码。星空总架在视频中也描述了,星空源代码只有60兆大小,那么作为普通开发怎么开始分析呢?


一、SOA与微服务


我们都知道星空是应用的是.NET MVC开发框架,整体符合.NET的生命周期,请求从底层Http.sys接受到信号后,由IIS处理相关请求,进行管道生命周期,到星空后,又会再进入一层管道生命周期,处理用户请求。

image.png

星空整体架构是一个分布式的SOA架构模式,SOA是一个面向服务的架构,其实这个概念就已经很像微服务了,只是SOA模式开发下,需要事件总线,而对于中小微企业来说, ERP、CRM、OA 之类的信息系统都是一套套部署起来的,不同系统往往由不同的供应商分别开发的,技术差别也很大,各个系统孤零零的,企业于是有了应用集成和数据集成的需求,所有的服务都集中在一个 ESB 上,曾经 SOA 和 SOA 治理是信息化领域的热门话题。 有点扯多了。

image.png

当然了SOA与微服务中还存在着需要去解决的技术问题,仅仅了解概念区别,还只是停在初期,那既然这个问题提出来了,希望大家都去思考一下为什么微服务在互联网架构中活跃的出现。


二、请求管道

.Net MVC 框架中,注入结构是HttpApplication,由运行时创建Host构造HttpApplication,同时构造HttpContext,然后在请求管道中传递上下文Context,我们还可以写一个IHttpModule对请求进行AOP编程,当然这是.NET MVC中提供一个管道生命周期。

image.png


三、思考与总结

知道了管道请求模型,仅仅只是了解了生命周期路线。OOP编程就是围绕着对象的初始化到释放的一个过程,管道通信中就包含了请求整个过程。下面是几点思考与总结:

  1. 面向切面编程AOP之HttpModule,

    image.png

系统webconfig下,内置了两个HttpModule,其中一个是性能收集器,便于健康中心进行页面访问性能收集

    2.  事件驱动设计

当我们提到事件的时候,总会不知不觉地将事件和命令混淆在一起。在具体讨论事件驱动的几种模式前,有必要进行一下说明:

  • 事件:生成事件的对象通过事件描述了一个动作及其结果,但是该对象不知道事件接下来会被如何处理。

  • 命令:生成命令的对象知道针对某一事件的处理逻辑,所以该对象将要求目标对象对事件进行相应的处理。

总的来说,事件更像是被动操作,而命令更倾向于主动操作。

我们在操作系统的时候,往往会以某一操作服务,进行事件传递,比如保存、提交、审核,抑或者是前台界面值更新等。

image.png

    3. 服务治理

不同于分布式的微服务架构中,我们通常借助网关、注册中心来满足服务的注册和服务发现。最开始启动Global的时候,就会注册组件接口对象到内存中,便于后续反射RPC调用。可以单独细说一下星空在服务注册中心上管理的一个思想,具体也可以看PlugInLoader.Start方法中思路。


了解服务治理思路过后,我们 应该就能想到为什么在前端Business插件中,使用ServiceHelper来调用服务,在App服务端插件的时候,我们调用接口反射,来执行服务了。

    4. 领域驱动设计

    5. 思考,业务?技术?

ERP软件来说,是一款重业务型的产品,大部分时候由产品需求驱动产品迭代,那怎么形成一个scrum敏捷结构的开发模式,让开发的功能有人用,而不是开发出无相关应用的热点?

11