点赞
评论
收藏
分享
举报
软件定义一切的当下看可编程架构
发表于2020-06-10 16:21

浏览 3.8k


小通告一下:近期会发表软件架构系列的文章,首先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 



已修改于2023-03-08 02:19
本作品系原创
创作不易,留下一份鼓励
0学0

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
0学0
这家伙很懒还未留下介绍~
5
文章
0
问答
2
粉丝
相关文章
转载:https://blog.csdn.net/JavaBuilt/article/details/107718093环境准备windowsnginxweb项目资源包准备资源包这里拿layuimini项目举例,从码云上克隆下来直接访问提示需要部署在web服务器当中才能正常浏览演示准备Nginx进入解压后的目录拷贝web项目至nginx目录将web项目拷贝进来修改Nginx配置进入conf,使用notepad编辑,编辑如下。监听8100端口,root为layuimini启动nginx双击nginx.exe启动,会发现无任何提示,其实nginx已启动成功!浏览器访问访问http://localhost:8100至此,web项目部署成功!部署至linux服务器同理注:Java项目,不能采用此种方式,应采用部署在tomcat中
点赞 4
浏览 3.1k
上一篇文章中,我介绍了如何定制属于你自己的Nginx,本文将介绍nginx.conf文件的配置语法、使用方式,以及如何学习新模块提供的配置指令。每个Nginx模块都可以定义自己的配置指令,所以这些指令的格式五花八门。比如content_by_lua_block后跟着的是Lua语法,limit_req_zone后则跟着以空格、等号、冒号等分隔的多个选项。这些模块有没有必然遵循的通用格式呢?如果有,那么掌握了它,就能快速读懂生产环境复杂的nginx.conf文件。其次,我们又该如何学习个性化十足的模块指令呢?其实,所有Nginx模块在介绍它的配置指令时,都遵循着相同的格式:Syntax、Default、Context、Description,这能降低我们的学习门槛。如果你还不清楚这一套路,那就只能学习其他文章翻译过的二手知识,效率很低。比如搭建静态资源服务用到的root、alias指令,该如何找到、阅读它的帮助文档?为什么官方更推荐使用root指令?alias指令又适合在哪些场景中使用呢?nginx.conf配置文件中的语法就像是一门脚本语言,你既可以定义变量(set指令),也可以控制条
点赞 5
浏览 5.6k
【版本更新】NGINX 主线版更新到 1.25.3 该版本改进了使用 HTTP/2 时对行为不端客户端的检测,提升了使用大量 location 配置时的启动速度。访问 NGINX 中文官方开源社区(nginx.org.cn)了解详情。
点赞 2
浏览 8k