背景
随着时代的发展,对软件的要求也越发繁杂严苛,需求变化越来越快,业务逻辑越来越复杂,集成功能越来越多,客户要求的交付时间越来越短。
一切技术,都是为了发展而服务的。需求导致了DevOps的诞生。
注:不对DevOps展开具体描述,可自行Google或百度。
持续开发,持续测试与集成,自动化部署,持续交付,一切看起来都很美好。然而,当DevOps理念在主流语言大行其道,各个行业都开始结合自身行业特点对落地DevOps进行规划和探索时,一切都似乎与Delphi无关,曾经WIN32平台开发霸主搜遍全网也无法把 Delphi DevOps 关联起来。
OK,没有现行的框架,能不能自已搭一个呢。这个想法一冒出来,自己也吓了一跳,正好公司上一代框架存在很多的遗留问题(N年前的程序员搭建),想着试试也无妨。于是做为技术方面的中层向领导建言,领导听完我的絮叨后问要多少资源,为了促成这事,冒险回答一个人,三个月。最终,毫无意外,否了。
可这想法一经出现便蕴绕着,挥之不去,再也无法天天写业务逻辑好好搬砖了。
中年、技术岗、房贷、家庭孩子,贴着这些标签的我出现这念头实在太不理智了,不,简直是罪恶!
HR语重心长地提示我,这世界对40岁以上的程序员很不友好的喔。“嗯”,我意会地点点头,我知道这是实话。成人的世界没有对错,选择之前就明白要面临着什么。
于是有了《Node Framework for Delphi》
构想
不同于Java , Visual Studio, Python 背后都有Microsoft ,SUN ,Google 这些巨头爸爸支持。对于构建DevOps的最佳搭档 docker 对于 Delphi 是没有的。把Delph以及一些第三方技术梳理了一遍,感觉也可以构建自己的容器。
按照最初的设想,Node Framework 包含以下三条路线
- Node Framework for VCL 面向Windows平台
- Node Framework for CLX 面向Linux平台
- Node Framework for FMX 面向移动平台
条件所限,选择最熟悉的VCL路线。VCL现在实现 RESTful 也很容易,可以通过其与其它平台交互。
.1 一阶段:
- 基础VCL框架搭建;
- 节点服务成型;
- 控制系统成型;
- 监测系统成型;
.2 二阶段:
- SDK模块
- OEM模块
- 注册模块
.3 三阶段:
- 设计系统成型
- 测试系统成型
- 发布系统成型
架构
-
多层分布式
毫无疑问的多层分布式,
首先是多层,这个概念是从三层引申出来的。
三层相对于两层C/S架构而产生,在软件开发早期,大多信息系统应用都采用Client(客户端)/Server(服务端)的两层结构。两层结构有其优点,但弊端也很大,主要体现在数据安全性、业务逻辑封装、数据库承压和客户环境复杂度上。
两层客户端直连数据库,安全性自不必说。三层加入了中间逻辑层(应用层),对客户端连接做验证和处理,无法通过验证的客户端无法连接到数据库,应用层通常和数据库分离,暴露在外的应用层即使受攻击,隐藏在内的数据库也不会受影响。
两层结构没有逻辑层,业务逻辑直接封装在界面层,这样会导致当业务逻辑发生变化时,需要频繁地更新客户端,客户环境又非常复杂,要考虑不同的操作系统,病毒、网络、用户误操作等等种种因素,都可能导致更新出现问题。频繁更新导致维护成本实在太高了,因此两层架构很快被市场抛弃。
很多人包括程序员本身把三层理解为技术,其实三层首先是思想,哪怕只在界面层,也存在三层,个人理解三层的核心思想是:”体系内的任何一块被替换时不影响其它块“。懂得界面和逻辑分离的程序员,和一个界面和逻辑混一块的程序员,从代码就能看出水平,虽然呈现给外部的效果看起来一样,但后期的维护量差别巨大。
分布式,是相对于以住的集中式而言,这个好理解,分布式架构在价格成本、自主研发、灵活兼容、伸缩扩展方面有比较显著的优势。具体分析网上已有很多了。
-
应用容器化
Delphi 是编译型语言,代码经编译后生成固定的二进制文件运行,与解释型语言相比,执行效率会高很多,毕竟少了动态编译的环节;缺点就是灵活性差。
编译型这种运行机制决定了,从代码层面实现容器几乎不太可能,只能多从数据结构上做考虑。
选型
- 编译器IDE : Delphi XE10 Seattle Version 23.0.20618.2753
- 通信协议 : IOCP 、Datasnap
- 交换格式 : JSON
- 数据引擎 : FireDAC
- 第三方控件 : Indy , DevExpress VCL