软件架构设计详解(3)结构化信息

任何工程不管是否是软件,都必须有条理,层次分明。人类的组织也是结构化的,政府,公司都是如此。每个人相当于一个独立的信息,有共性有个性,通过结构化的组织才能让这些信息流转起来,才能够正常的运作。

结构化信息主要方式就是如何组织模块,上一章节的定义信息其实数据模块都已经划分出来了,但是如何将这些模块合理的组织起来就需要一定的技巧。

下面讲一讲有哪些方法来组织模块。(由于我不做互联网,对云端系统了解较少,就只聊一聊应用软件的架构方式)

1.分层架构(layered architecture)

分层架构的核心是是层与层之间存在较为明确的数据隔离和数据分层

层与层之间的不同模块有明确的数据隔离,不直接调用和访问,而是通过统一的上下层接口,一层层穿透来访问。层与层的数据直接存在着数据的分层,数据包是一层层解析和封装的。

以TCP/IP四层模型为例,从tcp层到数据链路层存在着数据的明确区分和数据分层,数据包从数据链路层到tcp层一层层解析剥离,从tcp层到数据链路层,一层层组装。

2.事件驱动架构 (event-driven architecture)

事件驱动架构中不同模块的数据不存在明确的层次结构的区分,通过事件的触发来并行的调用不同的模块,模块与模块间的直接数据访问较少,通过中间节点进行数据转发,所有数据都封装成统一的消息或这个数据包(也就是事件),中间节点manager解析消息或数据包后,调用不同模块进行业务处理。这类架构是天然的异步处理架构,要注意性能与扩展性的平衡。(Qt的信号槽机制是个典型的事件驱动架构)

对于某些对实时性要求较高的事件,有以下一些方法提升实时性。

1.设置事件的优先级,从事件的缓存列表中取事件处理时,优先处理高优先级的事件

2.区分不同的事件处理队列,增加高实时性事件处理队列(有点类似多级缓冲队列的思路),这个队列中只放实时性高的任务,也可以使用多线程并行处理不同事件队列,某些系统中可以设置任务的优先级,来提升该事件队列处理的响应速度

3.绕过事件处理队列,直接调用对应模块,注意做好临界资源管理

4.将实时性要求高的任务放在同一个模块中,减少跨模块访问和事件访问

3.微核架构(microkernel architecture)

微核架构(microkernel architecture)又称为"插件架构"(plug-in architecture),指的是软件的内核相对较小,主要功能和业务逻辑都通过插件实现。

内核(core)通常只包含系统运行的最小功能。插件则是互相独立的,插件之间的通信,应该减少到最低,避免出现互相依赖的问题。

这个架构直接作为应用软件的总系统架构个人觉得不太合适,当系统越来越庞大时,要么插件数量变多,要么插件变大,都会带来代码管理上的混乱。但是如果将它与分层架构结合起来,作为某一层的架构就非常适合,尤其是一些独立性较高的算法层,各个算法模块间可以使用该微服务架构作为这一层的主要架构。

4.微服务架构(microservices architecture)

微服务架构(microservices architecture)是服务导向架构(service-oriented architecture,缩写 SOA)的升级。其实就是微核架构的分布式版本,或者叫远程版本。

每一个服务就是一个独立的部署单元(separately deployed unit)。这些单元都是分布式的,互相解耦,通过远程通信协议(比如REST、SOAP)联系。

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值