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

浏览 1k


小通告一下:近期会发表软件架构系列的文章,首先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
粉丝
相关文章
前言大家平时在工作中,或多或少应该接触过微信鉴权登录,获取用户信息的相关需求。也有小伙伴经常会在群里问一些相关的问题,比如鉴权登录的整体流程是什么?整个流程里面,前端和后端的分工是什么?前端专门准备了一个鉴权回调页面,要怎么回到鉴权前的页面?怎么在本地测试微信网页授权?先看看微信官方的鉴权流程怎么描述的第一步:用户同意授权,获取code第二步:通过code换取网页授权access_token第三步:刷新access_token(如果需要)第四步:拉取用户信息(需scope为snsapi_userinfo)还是懵,没关系,我在这里专门准备了一个小🌰,来实现了一套简易版的网页授权+获取用户信息的功能,整个流程大概是这样的在这个流程中,前端不用做太多事,只需要判断有没有用户信息,如果没有,剩下的事情交给服务端,等服务端全部处理完成,会带着用户信息,返回之前的页面。并且前端无需准备专门的授权结果页。流程第一步:内网映射下载软件下载地址:ngrok.com/download解压出来之后是这个东西终端启动将解压出来的文件拖到终端中,紧接着写http3000,意思就是用ngrok在3000端口上
点赞 0
浏览 1.1k
原文作者:ScottvanKalken原文链接:Namespace和Cgroup的简介及其工作原理-NGINX转载来源:NGINX官方网站本文是容器技术系列文章的一部分:  Namespace和cgroup简介及其工作原理(本文)构建小型容器镜像我最近一直在研究开源多语言应用服务器 NGINXUnit。在研究中,我注意到Unit同时支持namespace和cgroup这两项进程隔离的特性。本文将介绍这两大构成容器基础的Linux技术。  容器及相关工具(例如Docker和 Kubernetes)出现有一段时间了。它们改变了现代应用环境中软件的开发和交付方式。容器可支持软件在各自的隔离环境中快速部署和运行,而无需用户构建单独的虚拟机(VM)。  大多数人可能很少考虑容器的工作基础,但我认为,了解底层技术很重要,因为这有助于我们制定决策。另外,就我个人而言,能够彻底弄清事物的工作原理令我心情舒畅!什么是Namespace?Namespace作为Linux内核
点赞 0
浏览 1.2k
原文作者:Jason Schmidt of F5原文链接:在 Kubernetes 中实现自助 DNS 和证书管理转载来源:NGINX 官方网站NGINX唯一中文官方社区 ,尽在 nginx.org.
点赞 0
浏览 542