Golang分布式设计模式之-----分层设计

说明:此文章为腾讯云机器自动从本人csdn博客搬迁过来。是本人授权操作。

申明:无本人授权,不可转载本文。如有转载,本人保留追究其法律责任的权利。

龚浩华,QQ 29185807,月牙寂 道长

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

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

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(传输层.接口函数)

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互扯程序

到底什么是分布式系统,该如何学习

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

885
来自专栏JetpropelledSnake

Python Web学习笔记之CPU时间片

时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时 间片结束时进程...

38211
来自专栏HBStream流媒体与音视频技术

基于Live555实现RtspServer及高清高码率视频传输优化

其实之前我就已经开发过一个RTSP Server程序,并且写了一篇文章进行了介绍“一个RtspServer的设计与实现和RTSP2.0简介”,不过当时开发的目的...

846
来自专栏IT大咖说

聊聊容器调度框架,看又拍云如何基于mesos实现

摘要 为了更好地完成云处理服务的负载均衡, 零停机升级, 自定义策略调度等功能, 又拍云用 Go 实现了自己的容器调度框架, 管理长期服务和定时任务。 嘉宾演讲...

35611
来自专栏idba

数据库系统中的“黑天鹅”

一 前言 纳西姆.尼古拉斯.塔勒布的经典著作《黑天鹅》中对“黑天鹅现象”的定义是

763
来自专栏JAVA高级架构

有哪些 Java 源代码看了后让你收获很多,代码思维和能力有较大的提升?

最早看的 架构探险 从零开始写Java Web框架,黄勇写的,算是一种启蒙,作者自己写了一套ioc和aop框架以及mvc请求分发框架。 跟着写了一遍,基本明白了...

35010
来自专栏EAWorld

微服务架构下的数据一致性保证(一)

大家好,今天我给大家分享的题目是微服务架构下的数据一致性保证。 ? 今天分享第一篇,主要内容包括: 1.传统使用本地事务和分布式事务保证一致性。 2.传统分布...

2925
来自专栏鸿的学习笔记

聊聊分布式系统的时钟问题

诸如此类的问题,还能提出很多,因此需要一个靠谱的时钟来保证分布式系统里事件的处理不会出错。

571
来自专栏Rainbond开源「容器云平台」

基于akka的分布式实时消息系统

1554
来自专栏云技术

性能超前,详解腾讯云新一代Redis缓存数据库

当前内存数据库发展迅速,用户对于存储系统的要求也越来越高,为了满足各类业务场景的需要,腾讯云设计了新一代的内存数据库,不但保留了原来系统的高性能,高可用等特性,...

50216

扫描关注云+社区