leanix在它的官网上对SaaS(Software as a Service)给出了一个很明了的图示。简单一点理解的话就是,SaaS是让使用者能通过网络, 比如基于浏览器,就能使用软件的各种功能。这个软件,通常是基于云架构运行着。所有和软件相关的服务,比如硬件及网络环境,服务器,数据储存等, 都由云的提供商管理。
"The Twelve-Factor App"是一篇关于SaaS设计的方法论文章,该文作者基于在Heroku平台的经验,撰写了此文。其总结了12个重要的因素, 并做了一些相关注解。
I. 基准代码
II. 依赖
III. 配置
IV. 后端服务
V. 构建,发布,运行
VI. 进程
VII. 端口绑定
VIII. 并发
IX. 易处理
X. 开发环境与线上环境等价
XI. 日志
XII. 管理进程
本文并不是来分析这些内容,而是基于这些内容,聊聊相关的话题。这些话题其实都是之前不定期以微头条的方式发出,这里只是做个总结和整理。
这一部分主要介绍:
- 软件平台的使用情况问卷调查
- App开发语言问卷调查 - Statista, Google I/O
- 发布流水线支持测试和验证AI模型 - Google Cloud
- Git, CI/CD 运行机制
软件平台的使用情况问卷调查
Stackoverflow对5万多开发人员问卷调查,对16种软件平台进行了排名,包括移动端,桌面端,云平台,容器以及开发板等。貌似是以海外使用情况为主,所以国内的几大云平台没有列出。
App开发语言问卷调查 - Statista, Google I/O
Statista为2019到2021年,开发移动App的跨平台框架使用情况进行了调查。这里特指既支持iOS又支持安卓的开发框架。据问卷显示,开发者中,约1/3的人使用这些跨平台框架,其他约2/3的人使用Native开发。跨平台框架使用数量排名前三的是: Flutter, React Native以及 Cordova.
值得一提的是,Native开发是指开发出的APP专门针对某一特定的移动平台。比如用Java或Kotlin开发针对安卓的App,用Swift 或 Objective-C开发针对iOS的App。根据2021年Google I/O大会数据,Kotlin是安卓系统Native开发中使用最多的语言,排名前1000的Apps中,有80%的Apps是用Kotlin开发的。
发布流水线支持测试和验证AI模型 - Google Cloud
软件开发中,人工智能的模块在整个软件系统通常只占一小部分,当然,也是核心的一部分。如何扩展既有的软件持续交付和自动化流水线CD/CI,让发布流水线支持测试和验证AI模型,部署模型预测服务等呢? Google Cloud介绍了一个解决方案。
Git, CI/CD 运行机制
编程比较有意思的地方是: 作为劳动成果的源代码,通常是会由多人一起在同一时间编写和维护,这是借助不同的版本控制系统来实现,当前主流当属github。其工作原理,简单点说就是一份初始代码,在本地创建后上传到云端,作为一个代码源。不同人可以把它拷贝到各自的机器,同时每个人可以基于拷贝再生成新的拷贝。每个人可以将自己修改后的各种拷贝再上传到远程。上传的过程中,有时会出现本地的拷贝和远程的拷贝有冲突,因为别的人提前修改和上传了拷贝。在经过手动修改后,最后通过成功上传,则可以再次更新代码的状态。当大家把远程的代码再下载到本地后,则可以查看到,每一行代码是由谁在何时修改的,以及每行代码每次被修改的记录。
但这一切都是一个基础。基于这种代码协同的能力,人们可以再通过其他工具,一起实现所谓的CI/CD。也就是说,当任何人修改了代码的任何地方,只要上传代码后,代码会在脚本及工具的帮助下,自动进行编译,测试和发布。整个流程完全自动化后,甚至可以对用户生产环境中的软件,随时进行自动化更新。其中CI/CD是指Continous integration, Continous delivery, Continous deployment, 对应自动化流程的程度。