大云厂商今年在开发者阵地侧逐渐开始向“云”化开发发展,最为显著的产品就是Cloud IDE,催生出来的趋势就是云端开发。云开发现阶段尽管在各大公司内部无法作为日常开发工具普遍推广,但是在某些特定场景下Cloud IDE云开发是非常让人着迷的:
- 即开即用,用完即走的场景,如编写函数(天猫精灵功能开发)、demo编写预览、code review以及代码仓库集成等
- 深度定制的统一的团队业务环境,团队成员无需配置复杂环境即可上手
- 天然架构在云之上,在开发态集成云产品的诸多服务
- 集成CI/CD,快速迭代
- Serverless架构应用测试(Cloud IDE也属于云上环境,可实时调试函数)
国内外很多厂商在争夺利益:
- 微软是第一个绕不开的公司。微软在开发者工具以及IDE领域积累颇深,产出了众多明星产品:visual studio、vscode等,特别是vscode直接影响了Cloud IDE的发展进程。而且去年微软收购的另一个明星产品Github推出了codespace将Cloud IDE与Github开源社区结合在一起,实现“一云多端”的代码侧生态贡献。尽管codespace并未提供类似阿里云云开发平台的Serverless架构、行业案例支持、DevOps一体化等诸多功能,但未来微软极有可能将其配合Azure一起组件完成链路实现整个生态的闭环。
- 谷歌的Firebase是主打BAAS的一款产品,它为后端服务提供Realtime database、Auth、Cloud Function、Message Push、Analytics以及Cloud storage等服务,无需服务器即可快速开发并使用以上诸多服务,特别适合个人应用和创业项目等。不过由于国内网络的特殊性,一些服务无法在国内正常使用,且网络RT较大。Firebase并未提供Cloud IDE而是推荐 “本地开发+Firebase SDK+CLI”的形式在本地进行开发调试与部署。
那么在云开发以及弹性计算领域,阿里云也有许多产品,比如阿里云云开发平台、FC控制台的CloudIDE以及Serverless Devs。云开发平台若要在遵循丛林法则的生态竞争中生存就必须有它独有的核心价值与手段来解决ISV的关键诉求,那么相比其他产品有哪些不同呢?
什么是阿里云云开发平台
阿里云云开发平台(Cloud Workbench:https://workbench.aliyun.com/),是阿里云面向广大开发者及企业提供的云上研发工作平台,助力研发团队实现工作的在线化(团队在线、环境在线、代码在线、协同在线)以及研发模式Serverless化,帮助研发团队实现对行业架构经验及架构服务的高效分享与传播,极致提升研发效率,极致降低研发成本。
使用云开发平台架构的应用,天然是云原生的,天然是Serverless架构的,天然是支持在线开发、调试、协同、CI/CD的;由于云开发平台是架构在阿里云底层基建之上,因此开发者天然可以享受阿里云提供的基础设施红利(编排、代码仓库、devops工具监控与报警、异地多机房以及VPC网络隔离、多版本与灰度),这些基础设施对于大多数中小公司自建难度非常大且边际成本很高,而通过云开发平台使用这些服务大多是免费或者按量计费,提效降费自不必说;云开发平台针对不同业务场景不同技术栈的应用抽象了3种技术架构,并搭配了云底座与产品实现技术侧保障,省去架构的烦恼。
云原生 Serverless 架构
关于云原生以及Serverless有很多解释,那么朴素意义上的云原生指的是因云而生的软硬件以及架构,它包括为云或者弹性而设计的CPU或GPU,以及为云或弹性设计的中间件与使用这些中间件的应用。云原生不仅是实践,更是一种理念。开发人员的开发环境也要生在云上、长在云上,让产品设计、开发调试环境、部署、测试与灰度、POC验证、资源消费等等,全部基于云来进行,云开发平台就是贯彻云原生理念的一款产品,力图在云端覆盖产品的全生命周期。
Serverless字面意思为无服务器,实际上可理解为无运维架构。开发者无需关心底层硬件的采购与运维(机器、网络、流量)聚焦于业务逻辑开发,由云进行弹性扩缩容,并按量计费(这对峰值流量差异大特别是移动端应用尤为明显)。
云开发平台针对不同类型特点的业务分析和生成一个基于云产品矩阵构成的云原生 Serverless 架构(FAAS+BAAS),满足业务规模的不断扩大与快速迭代。
针对无状态的应用提供了最为轻量的FC架构,通过APIGW + FC + NAS等通用组合可实现自动弹性扩缩容、多版本共存、灰度与a/btest、文件持久化以及局部状态保存,满足大多数简单业务场景,当前线上应用大多为此种架构,以Web服务、云函数(天猫精灵)的形式运行。基于FC的架构向开发者屏蔽了底层PAAS部分,仅需在Cloud IDE中开发、调试代码,测试通过后在Cloud IDE部署到对应环境即可。
无状态的应用是指应用(函数)是运行在第三方提供的无状态计算容器中,并且在不复用容器的情况下应用(函数)可能会存在冷启动并且可以正常对外服务,这个时候应用(函数)可以认为是无状态,因此如果应用依赖本机的crontab、内存数据库亦或是本地文件存储等,都是有状态的应用,是需要做一些改造才可以使用基于FC的架构。
针对有状态或者微服务应用云开发平台提供了服务型SAE架构,可解决应用启动有状态的问题(通过SLB与docker镜像),并可兼容Spring Cloud、Dubbo、HSF等主流的微服务开发框架,完成服务注册、发现、调用与统计。
服务型ASK架构则是为更为专业的企业团队进行企业级Kubernetes容器化应用的生命周期管理而设计的,这里不做重点陈述。
云开发平台力图透过常见业务场景的表象抽象出几种普适的云端Serverless架构,在众多云产品的选择困难和搭配与架构的痛苦抉择中给予开发者或企业些许帮助或启发。基于云开发平台“生长出来”的产品是Serverless架构的,释放了架构师与运维人员的生产力,一切架构由“云开发平台”来完成,开发者负责端侧与服务端通用业务,一切有偿资源均按量付费。
搬站
搬站就是存量项目迁移到云开发平台上,直接升级为Serverless架构。理想中的搬站是不需要开发者修改任何代码就可以直接升级,但现实往往是残酷的:由于不同语言有不同的特性及特点,因此针对常见的语言云开发平台在性价比的权衡下提供了不同的搬站策略:
- 基于Serverless框架的零代码搬站:Nodejs(全框架支持)与Python(同步与异步WSGI均支持)
- 基于容器的低(零)代码搬站:Python、Java与PHP
Serverless 框架
Serverless框架是云开发平台抽象的一层抹平不同语言框架、语言运行时底层API(非FC运行时)的腻子,摆脱了FC只能运行简单函数的限制,将复杂用户层代码(非简单函数)通过代理的形式与FC运行时打通,实现业务侧代码零改动迁移。
基于Serverless框架的项目迁移其实对用户的业务进程模型有一定要求:
- 单机对应单个业务进程
- 无长连接需求
- 应用无状态
- 仅支持七层转发
采用Serverless框架迁移的项目,仅提供对HTTP与HTTPS协议的支持,对TCP或UDP服务暂不支持。
基于容器的低代码搬站
容器是云时代重要标志之一,基于容器统一的交付标准,云开发平台支持存量应用部署到三种Serverless(FC、SAE、ASK)中的任一计算服务当中。云开发平台提供基于各种语言基础镜像,让存量应用以尽少的修改来完成部署,成为云原生Serverless应用。
只需要提供一个镜像就可以运行在三套不同的架构下,在使用云开发平台提供不同语言的镜像前提下仅需修改相关前置配置文件即可实现迁移。
实时调试
针对Serverless应用无法即时调试的问题,云开发平台提供了另一种解决方案:Cloud IDE调试环境预置,在开发态即可模拟线上运行时。这样开发者便可以做到实时开发应用、实时预览、实时查阅日志。
若要针对不同技术栈提供不同的运行时容器,这需要依赖抽象的通用适配层来解决不同类型request及path处理机制、模拟“冷启动”环境初始化、测试域名安全性保证和私密性与超时策略、APIGW返回兼容处理;需要依赖存储层实现运行时容器的热更新与拉取策略灵活定制;而这一切则是通过操作IDE的workbench扩展无感知运行的,让开发者体验云端测试的便利,争取更长时间的云端留存。
云端断点调试是云开发平台的另一个优势。通过attach功能,Cloud IDE可以调试任意端口的服务,这也正好为调试运行时所用。通过与调试运行时打通,可实时查看运行时输出日志与context,获得与传统开发相同的体验。
DevOps 私有化
Serverless的优势在于低运维、无运维,开发者使用云开发平台可以从业务迭代出发,在多套环境(测试、预发布)验证(压力、性能、稳定性测试)后上线进行灰度(百分比),观测相关监控指标与功能性验证后进行线上全量部署,而这一切均可以在Cloud IDE中操作完成。当业务流量有峰值时底层的FAAS会进行相应的扩缩容实现弹性。此后根据用户反馈或业务迭代进行进一步开发。
轻量级的DevOps带来了几个好处:
- 更短的业务迭代周期:覆盖应用全生命周期的工作流与自动化能力将带来应用持续交付能力以及跨团队协同效率的大幅提升,进而缩短业务的交付周期。
- 更合理的人力资源分配
- 更稳固的应用交付质量
轻量级DevOps自然有它的可取之处,可对企业而言却存在一个致命的问题,那就是如何兼容已存在的CI/CD流程。企业不可能立马摒弃现有的运维系统去采用云开发平台提供的部署流。大多数公司都有自己的开发工作流程,这包括内部代码托管、团队协作、权限控制与风控、公司独特的CI/CD,如何低成本的兼容这套原有体系是Serverless应用能否“本地化、私有化”,让企业和开发者接受与认同的最关键的一点。
云开发平台通过提供一个本地部署套件以插件的形式嵌入企业原有的发布流程中,以低侵入性、高扩展性、灵活的兼容性实现项目快速迭代,在不影响原有开发流程的前提下做到开发者无感知。本地部署套件可以让企业可以大胆尝试Serverless架构而无需考虑运维兼容性的问题,同时也可根据云开发平台的OpenAPI自定义工具实现DevOps的工具化与智能化,南北双向满足需求。
云开发平台对开发者的形态进行总结,把他们划分为三个层级:
- 对于小白、无历史包袱开发者,云开发平台提供了一个从创建、实现、测试、构建、部署全部环节的集成研发环境,支持一站式在云开发平台上实现Serverless应用。
- 对于有研发体系的ISV,研发、测试在本地完成。云开发平台和ISV的分工界面在代码仓库Codeup上,云开发平台提供全套CICD功能,开发者提交代码到Codeup上后,CICD功能、资源编排都交给云开发平台。
- 对于有研发体系并且有CI体系的ISV,提供基础设施的编排以及CD功能。
- 对于二、三层级,云开发平台通过提供OpenAPI接口,支持ISV进行集成,和ISV现有研发体系无缝融合。
通用行业解决方案
云开发平台通过行业场景与解决方案将技术与商业进行链接,通过将各行业最成功的技术实践案例抽象封装成一个个的行业场景解决方案,开发者可以基于云开发平台之上呈现出来的行业场景解决方案去创建一个应用,极大地加速商业化效率以及降低前期技术架构领域研究及准备的综合成本。
通过常见案例的切入并抽象为通用的场景需求,如天猫精灵应用、微信与支付宝小程序营销、前后端分离应用、博客、微服务等,对其进行解析。云开发平台从两个方向进行预处理:
分析和生成一个基于阿里云产品矩阵构成的云原生 Serverless 架构
- 将依赖的资源做打包上传
- 随后生成任务,通过 ROS,逐一进行生产、创建、安装,直至一个行业应用被初始化完成,最后发布到官方解决方案市场。
通过解决方案的自动实例化处理,我们实现了云开发平台最为核心的能力:
- 帮助行业开发生态格式化、规范化地沉淀经验;
- 帮助行业开发生态快速分发、复制行业应用开发经验;
- 帮助行业开发生态无缝升级至先进的云原生Serverless架构;
- 帮助阿里云无缝被集成至用户业务之中;
Nodejs解决方案示例:
云上协同
我们在实践中发现,在线化是一个新的趋势。云时代我们在探索一切资源上云,当然也就包括了代码上云、云上协同与开发。将实际团队映射到云端,在云上开发可以实现地域、时间与设备无关的全球协同,而且云上开发更重要的是可以在云端实现整个开发生命周期的闭环链路,更方便的集成开发侧的云产品。云上开发并不意味着放弃了传统的本地开发,两者是可以互补的。在本地+云开发的协同增强下,既可以在本地灵活自定义开发环境快速迭代,也可在云端实时调试部署与共创,这也得益于部署运维轻量化。
云开发平台对团队成员提供四种角色,团队拥有者、团队管理员、应用管理员和应用开发者,分别对应不同管理、运维和开发权限。目前有诸多活动场景使用了云上协同功能以及衍生出的“授课-开发-提交作业”模型,如阿里云开发者成长计划、部分高校的合作授课、阿里巴巴前端练习生计划等,极大减轻了协同成本。
最后
从传统线下研发模式过渡到云原生时代,解决云原生集成研发使用的"最后一公里"问题正是云开发平台的使命。云开发平台将继续在系统稳定性、云产品架构灵活性、代码易迁移性等方向不断深耕满足开发者诉求,从而聚焦于核心业务目标无需考虑运维与架构的繁琐事务,拥抱“云 + 端”开发模式。