博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Golang分布式设计模式之-----分层设计
阅读量:4031 次
发布时间:2019-05-24

本文共 1141 字,大约阅读时间需要 3 分钟。

            提到分布式系统,我们会想到很多机器,分别部署着各自的服务,然后整体组成一个分布式系统。在这类系统中,分布式系统与常规的集中式系统存在着以下三个区别。(来自分布式算法导论)

1、缺乏全局状态知识

2、缺乏全局时间帧

3、非确定性

         这三大特点也成为分布式系统设计的难点。也正是如此,分布式系统的设计比常规的集中式系统要难的多。为了区别,我们称这种分布式系统为,群体分布式。这种犹如社会群体。

        

         golang语言天生具有分布式的特点,其主要是基于协程与chan的概念。如果对golang不了解的人可以简单的去看看golang语言。

 

         有了golang语言,我们的可执行程序,也可以设计成分布式。一个可执行程序设计成分布式,这种分布式我们成为单体分布式。这种犹如,个体,存在着很多的部件。

 

         其与群体分布式的区别在于:

1、由于在同一个可执行程序中,全局状态知识,是可以存在的。

2、由于在同一个可执行程序中,全局时间帧,也是可以存在的。

3、也存在着非确定性

 

         其实我们就经常与分布式打交道,其中最经典的有:tcp协议(点对点的通信),路由协议(包的传递过程)。这都是典型的分布式算法。

 

         那么OSI7层模型与tcp/ip模型都属于分层的设计模式。现在我们将此设计经验。借鉴到golang语言的开发过程中。

 

         下面我们以一个http流分析系统举例

        

一、根据功能,划分成不同的层次。

        

         1)dump层:利用pcap进行抓包

         2)传输层:对包进行解析tcp信息

         3)流层:将tcp包进行组装成tcp流

         4)http层:对tcp流进行识别生成相应的http信息

 

二、分层之后,进行接口的定义

         接口有几种方式

         1)采用func变量

                  这种情况一般以单个接口的时候

         2)采用interface

         这种情况对应于有多个func接口的时候

         3)采用chan

                  这种模式更多的适用于两个协程之间进行通信,我个人不建议做成模块之间的接口

 

三、组装

         在main函数中,反向初始化

 

         1)初始化http模块

         2)初始化流层,并将http中的接口函数与流层对接

                  流层.Init(http.接口函数)

         3)初始化传输层,并将流层的接口与传输层对接

                  传输层.Init(流层.接口函数)

         4)初始化抓包层,并将传输层的接口与抓包层对接

                  抓包层.Init(传输层.接口函数)

 

         分层设计,可以归属于一种类似于流水线的处理模式。属于状态的简单转移。这种设计的好处,在于,各个模块之间的耦合性降低,各个模块自成一体。整个系统的测试、维护都变得简单。

 

 龚浩华

月牙寂 道长

qq 29185807

2014年8月15日

如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。

第一时间获取文章,可以关注本人公众号:月牙寂道长,也可以扫码关注

 

转载地址:http://niebi.baihongyu.com/

你可能感兴趣的文章
电平触发方式和边沿触发的区别
查看>>
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>
ArrayList集合解析
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Android计算器实现源码分析
查看>>
Android系统构架
查看>>
Android 跨应用程序访问窗口知识点总结
查看>>
各种排序算法的分析及java实现
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
js弹窗插件
查看>>
自定义 select 下拉框 多选插件
查看>>