国内pon终端产品架构优化

      架构没有绝对的最好,设计过度或者没有设计都不是我们想要的。恰到好处,同时又能与时俱进是我们所追求的好架构。pon终端产品从诞生到现在,已近十年,年发货量千万以上,期间经历过几次代码调整,不过总体架构并未有大变化。在这里必须向我们的架构师,开发和强大的测试团队致敬,增加和修改了成百上千条需求,版本依然如此稳定。

    pon终端是连接互联网的光终端二三层交换小盒子,是万物互联的基础设备之一。终端业务种类丰富,包括上网、电视、语音,无线,有线等。业务场景复杂,功能代码更复杂。比如交换芯片的驱动程序,linux内核桥路由转发逻辑,地址控制协议,组播控制协议,防火墙,QoS,各种上层应用。  (备注:此处应有一个软件架构图)。模块之间关系复杂,只有经验丰富的研发人员才清楚一个业务开通时内部究竟发生了什么。为了提高研发效率,梳理和优化软件结构就很必要了。

    这里想分享的是我们这一年对核心模块做的梳理和优化,主要是版本合一、配置与版本分离、平台化,以及对抽象的思考。

1.版本合一

    光终端细分为多种上行制式,gpon,epon,10g epon等。北向接口的控制协议不同,硬件实现上携带不同种类光模块。之前从展现层到业务层,再到底层驱动层的代码,多少都会涉及到上行方式,这样带来几个问题,一是业务层或展现层代码重复代码很多,Gpon上行写了一套,Epon上行又写了相似的一套,重复代码是万恶之首,我们工程里的重复代码确实带来的不少的维护工作量。二是版本数量多,Gpon和Epon上行产品大概有90%是相同功能,之前我们的做法是共用一个主干基线,用宏控制分别做出Gpon的和Epon的版本,测试阶段对2个版本分别做系统通用集测试,入网测试也是一样。

    如果做到1.对上层应用隐藏住上行方式的差异,2.版本自适应上行方法。那么一来减少部分重复代码重,二来版本数减半。

    我们的做法是增加一层上行方式适配层,将不同上行方式的接口统一,对上层业务隐藏上行方式的差异。这一层的主要函数包括(待补充函数列表,以及增加这一层之后的软件架构图)。

    这样优化之后的效果,一是网管控制协议模块的参数节点树展示层的代码量减半,二是生成的版本数量减半。减少了开发人员维护工作,也减少测试工作。

2.配置和版本分离

    我们发货的版本一般由两部分组成,一部分是预配置数据,一部分是可执行程序。不同省份的定制版本的差异主要由预配置数据控制。修改某个配置数据,需要升级完整版本,这就意味着又要经过一轮机关重重的现场入网测试。

    针对于此,我们做了配置与版本可分别单独升级的设计,调整了内存数据库的代码结构,一是修改了数据配置文件的结构,增加配置文件的版本信息,二是增加一个配置文件升级管理模块,负责加载配置的升级文件。(待补充:实现这个功能后内存数据库模块的结构图、预配置文件设计图)。

    这样优化的效果是:当某些需求可以通过配置数据控制时,我们将只升级配置文件,版本不动,这样就节省了原本耗费人力的新版本入网测试环节。

3.平台化

    国际国内pon终端的需求千差万别,即便是国内几大运营商的需求差异也很大。在交付的压力下,经常会通过拉分支基线来完成,再加上有时未及时回归主干,久而久之基线就多起来。分久必合,合久必分,分分合合,合合分分,这样带来了不小的工作量。

    如果能将基础代码平台化,丰富的功能,良好的扩展性,可以共享的安全合规自检等,都将成为快速实现产品的好帮手。

    为了方便产品使用平台,平台的软件目录结构实现如下 图所示(待补充:平台软件目录结构图)。目录主要分为:1.平台核心功能;2.组件包;3.产品代码包。

    平台在设计之初曾争论过平台究竟是要做成大而全,还是小而灵活。目录结构究竟要不要区分产品包、核心包。

    我们目前做法是平台核心功能做的小而灵活,以dns为例,平台核心代码只实现rfc标准流程,在某些点上提供钩子。而由产品实现定制需求。

    另外,由于还有管理方面的考虑,目录结构设计上也会有一些管理的影子。

    这样做的效果是国内多家运营商的pon终端使用用统一平台,再加上各自的定制代码,合起来出一个版本。

    为保证质量, 平台团队交付代码给产品团队时,还要给出单元测试代码。

  这是我们从去年底就开始的一项任务,对于终端产品来说,理想的平台究竟是什么样的,我们还在摸索,也希望能有机会和高手探讨这个话题。

4.对于抽象的思考

    为了能让开发人员将注意力集中在业务本身,而不是陷于某些相关性不太大的细节上,比如编程语言的细节上,我们尝试抽出领域语言,并且使用DDD方法对各个领域建模。

    比如网络连接模块,提供了如下一些服务: wan连接创建、修改、删除、查询。网络连接消息订阅。(备注:提供一下接口列表)。不再向外界暴露地址协议交互过程等细节。

    但在这样做的过程中我们也有疑惑,我们的产品是嵌入式产品,主要编程语言是c语言。而前文也介绍了,终端的业务种类很多,如果大范围推广领域语言,开发人员的要求似乎更高了,需要理解领域语言,并且具备较好的业务抽象能力。

    5.总结

    以上是我们pon终端在过去一年对架构方面做的优化和思考,希望能有所帮助,更希望能和大家交流,相互学习,让我们的软件更符合可实现,可扩展,可测试等好的架构设计的标准。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容