软件定义一切的当下看可编程架构
332 次浏览
发表于 2020-06-10 16:21


小通告一下:近期会发表软件架构系列的文章,首先NGINX是软件,同时是软件架构的一部分,如何在软件层面有个好的构架思路,也会影响NGINX做为组件或功能模块的适配性和高效性。同时做为Code To Customer的一种呈现方式,将结合行业应用和源码分析,因此,本篇先做个热场小探讨。


摘录之前发表的文章 - [原创]软件定义一切的当下看可编程架构_0学0


一晃小20年过去了,作为国内IT化转型鼻祖-第一代BSS(业务支撑系统)建设的参与者之一,和民族软件的追随者之一,想想最近几年热火朝天的SDN(Software Define Network),SDDC(Software Define Dater Center),SDXXX等一系列和软件定义相关的工程推广及交付,越发感觉软件的重要性,软件在当下的战略意义空前非凡,借着新基建之首5G及5G麾下的边缘技术(MEC)的热度,浅谈一下软件之可编程的一些小技巧,先上一张图:


01软件架构_新基建.png

【引用自网络新基建八仙美图】


5G能成为新基建之首,除了传统赋予的含义外,里头包含产业模型升级和新技术的颠覆,而颠覆之一是靠软件支撑的:5G核心网的IT化、服务化源自行业软件的积累、抽象和封装,云网协同、云网融合、云网一体的演变也一样。而边缘云又是网络能力从传统国家级、省级建设方式下沉到普通地市级、乡镇或更小的颗粒度,这一部分在1月份来湖北疫情从刚开始的武汉眼球快速延伸到黄岗及其他小城市,就凸现出来下沉的重要性。再上第二张图:


01软件架构_云网融合.png


【摘自中电信2020年边缘云规划】


做为全球领先的运营商之一,中电信的每次转型都吸引了大量的眼球,而每次转型都有震撼的收获与产出,从这张图的分析可看出,边缘技术(或边缘云)贯穿着软件管理平台、边缘软件业务平台、边缘能力平台建设及调度等,而可编程能力又是其中一个不可缺的部分。再上第三张和第四张图,是否似曾相识呢?


01软件架构_97系统.png


01软件架构_97系统模块管理.png



【以上两张是2000/2001/2002年 第一代BSS建设中关于资源管理,类似目前边缘端小型资源中心建设模式】


回到为支撑这类业务转型而支撑的技术之一,软件可编程控制:可编,可控,灵活,先看看一段软件代码:



 EXCEPTION   WHEN OTHERS   THEN      ROLLBACK;      v_rtncode := 2;      v_sqlmsg  := SUBSTR(SQLERRM, 1, 100);      SP_WRITE_LOG (v_spname, v_spdesc, USER, 'ERROR',v_trace || '-'||'SP_EWT_CASE_REASSIGN Error'|| '..' || v_sqlmsg);      SP_EMAIL_SMS_NOTICE (v_spname, v_spdesc);      RETURN;



这段代码看似简单,其实背后是多级Function和Procedure的封装呈现,设计上非常简洁高效,任何异常定位时可直接通过断点日志锁住故障点。因此,可编程控制之一的控制,就得以体现。




IF FN_BATCH_PROCESS_CHK(strRunDate, strSpName,'NULL','W')=TRUE THEN     SP_WRITE_LOG(strSpName,strSpDesc,USER,'END','Process complete.');  ELSE     SP_WRITE_LOG(strSpName,strSpDesc,USER,'END','Process complete but update BATCH_PROCESS fail');  END IF;



而封装能力的设计,就可以将不同层次的能力及分工变成软件代码集的一个子集或分册(如下图),无论日常运维或线上管理时都可以针对性地处理对应的代码块或逻辑链,避免每次变更面对大批量、繁杂的整片代码或不知所措的逻辑交叉。



----------------------------------------------- -- Export file for user CIPT                 -- -- Created by xuelin on 2007-11-27, 14:47:49 -- ----------------------------------------------- spool load_all_ewt_procedure.log prompt prompt Creating type ACCOUNT_ATTRIBUTE_TYPE prompt ==================================== prompt @@account_attribute_type.tps prompt prompt Creating function FN_GET_RPT_NAME prompt ============================================ prompt @@fn_get_rpt_name.fnc prompt prompt Creating function FN_EWT_CHECK_ASSIGN_STATUS prompt ============================================ prompt @@fn_ewt_check_assign_status.fnc prompt prompt Creating procedure SP_EWT_ASSIGN_PROCESS prompt ======================================== prompt @@sp_ewt_assign_process.prc prompt




再回归到网络设备的可编程能力部分,请看下面的代码案例分享与分析:



# Visit with IP

    if { ! [catch {IP::addr $req_host mask 255.255.255.255}] } {

set host_ip 1

if { $static::DEBUG_LOG } {log local3.info "<==LOG2.2.1==>Got IP address from request $req_host"}

} else {

set req_ip_address [session lookup uie $req_host]

set req_with_ip [expr { $req_ip_address ne "" }]


}


# UCBrowser

if { [HTTP::header User-Agent] contains "UCBrowser" } {

set uc_browser 1

}


# Go to wap gateway

if { ! [class match $req_host contains "wapgw_proxy"] | ($host_ip) | ($uc_browser) } {

set go_wapgw 1

}



上述代码是针对不同场景设定标签,并根据标签条件进行流量细颗粒的调度和管控,因此判断逻辑里可以迭代。


最后,附上我过去经常给客户和团队培训时的一些现网案例参考摘录:


01软件架构_流量网关控制.png


逻辑封装设计和代码链的衔接,异常管理等,都是软件架构及可编程控制的要素之一。


01软件架构_iRules现网案例.png


上图#5为核心网的应用案例,也是一样的道理,用可编程灵活性来撬动业务价值的呈现。


最后总结:软件是人写出来的,但优秀的人才构造的软件一定别样的,记住一点:有灵魂的代码才是高效的,不要被普通码农思维限制住您的才华。


2020年4月21日晚发表于上海 《520线上直播预演 - 安全周》

原文链接(点击这里或下面链接均可):

http://community.f5chinanetworks.com/f5network/home/post/post_detail?post_id=457 



如果您觉得不错,就打赏支持一下吧〜
已有 0 人进行打赏
发表评论
发表者

0学0

江湖始终有偶的传说。。。

  • 5

    文章

  • 1

    关注

  • 2

    粉丝

活动推荐
版权所有©F5 Networks,Inc.保留所有权利。京ICP备16013763号-5