阿里资深技术专家林轩:云时代软件研发的终局猜想

本文涉及的产品
简介: 2015 年到 2016 年,是业界普遍认为的容器技术爆发的一年,短短几年时间,我们看到容器技术星火燎原。但是容器毕竟是个底层产品,距离业务还很远。对云上客户来说,直接需要的终归是直接触达业务的应用。 而在这一层上,还没有形成标准。

2015 年到 2016 年,是业界普遍认为的容器技术爆发的一年,短短几年时间,我们看到容器技术星火燎原。但是容器毕竟是个底层产品,距离业务还很远。对云上客户来说,直接需要的终归是直接触达业务的应用。 而在这一层上,还没有形成标准。

直接触达业务和应用的这一层在哪里?

云的直接用户是软件开发者,是程序员;并且不是系统软件编程人员,而是业务系统编程人员。

更不是产品、运营,不是 CTO,CEO。云的未来一定是围绕开发者,围绕编程人员的。业务系统编写者,直接使用的是编程语言,最终构建的是业务系统。所以比 Kubernetes 更上层的标准和体系,一定是围绕代码展开的。

这在概念上,其实已经有一些现有的标准可以类比,比如 SQL 就是一个非常伟大的标准。有了这个标准,所有开发者,各种语言的代码,使用任何一种数据库的方式都变成一样了。各个数据库厂商才可以放心的独自演化,新的数据库产品直到今天都在不断的涌现。 SQL 标准定义了业务代码和数据库交互的统一方式。再比如消息中间件的标准,这块相对比SQL做的差些,不够统一。

目前阿里也进来做通用的标准了。数据库和 MQ,一个同步调用,一个异步调用,再加上 RPC 服务间调用,是传统业务开发中典型的3种场景。这也正好是最早的阿里中间件三大件 HSF、Notify 和 TDDL 诞生的三个场景。从三大件诞生,到现在,十年过去了,业务系统的开发模式并没有本质的变化,但是业务系统运行环境却逐渐步入了云计算时代。

换句话说,我们仍然在用十年前,在尚无云计算的时侯发展出来的模式,解决云计算新时代的问题。这一定是有问题的。

云计算时代的会不会演化出一种新的研发模式,这种研发模式成为直接触达业务和应用的标准?FaaS 的出现已经有点儿这个苗头了,但是还不够。因为 FaaS 目前看只能解决部分场景的需求。高质量的在线服务需要的永远是严阵以待,而不是临渴掘井。
01
从代码来看未来研发趋势
_
未来的代码会是什么样子的,云计算时代的软件研发终局会是什么样子的?

云化是未来软件研发的最大趋势,这一点毋庸置疑。不管是 PC 端,手机端还是 IoT 端,绝大多数软件都需要后台服务的支撑,来汇聚用户和沉淀数据,从而提供更好的服务。软件产品不同于实物产品,最大的特点是可以零成本无限复制,这就造成同一个细分领域的软件在充分竞争下,往往只有最优秀的实现才能生存发展下来。所以任何最后能活下来的软件最终都要面对全球的用户和市场。这就造成软件的后端服务必须能够支撑全球用户和市场,这靠自建基础设施或局部私有云是解决不了的。所以后端服务放在云端是不可抗拒的趋势。

在这一趋势下,未来最理想的研发模式是什么,或者说 5 年后、10 年后,软件研发的形态是什么?

先看下几个发展趋势:
趋势1. 业务逻辑占比在不断提高
在软件研发中,真正专注业务本身的比例在不断提高。很多软件产品,技术变革的卖点都是在围绕这个问题,或促成这个方向。“专注自身业务逻辑,不需要关注业务逻辑之外的事情” 这句话是不是耳熟能详?
专注业务逻辑,不需要关注打包和依赖 -- rpm、maven、gradle
专注业务逻辑,不需要关注对象初始化和依赖注入 -- spring
专注业务逻辑,不需要关注页面展示和servlet流转 –- MVC 框架
专注业务逻辑,不需要关注通用结构和分布式逻辑 -- 中间件
专注业务逻辑,不需要关注分布式服务的远程调用 -- RPC 框架,service mesh
专注业务逻辑,不需要关注不同 OS 的兼容,一次编译到处运行 –- JVM
专注业务逻辑,不需要关注构建分发及运行环境 –- Docker
专注业务逻辑,不需要关注服务实例,按使用付费 –- Serverless
……
这个列表还可以更长。

这个方向让开发者越来越专注业务逻辑,各种不同领域的痛点被一个个解决,让业务系统研发变得越来越高效,但是这条路远远没有走到尽头。在云计算时代,我们需要在这个方向上给出云计算时代特点的解法。serverless 和 service mesh 都有点儿这个意思了,我们还能不能更进一步?

趋势2. 代码规模越来越大
Linux 代码量已经从最初的1万多行发展到了现在的2千多万行。越是往底层的软件产品代码规模越大,代码规模越大意味着协作范围越广。规模达到一定程度,靠单个公司的人力是无法完成整体维护和演进的。比如 Kubernetes 的代码规模,已经从最初 0.1 版本 release 时的 26 万行,到了现在 1.11 版本的 227 万行。Kubernetes 现在有多达近 2 千个的贡献者,整个 CNCF 社区有 2 万多名贡献者。这意味着,底层系统的共建和协作规模会越来越大。技术栈会越来越向标准和一致的方向演化。

另一方面业务系统的开发者,不可能有精力去深入下层系统,或者去 DIY 一个平台。面向业务系统开发者的这层边界会越来越清晰,并且越来越重要。

另外随着软件栈代码规模的扩大,单机开发和调试,最终将会被远端云上的开发和调试取代。当云上的编译迭代速度,自由灵活度,代码关联能力,代码优化能力超过线下时,可能绝大部分开发,不管是系统软件,还是应用软件都会在云端进行。

趋势3. 编程语言从低级语言向高级语言发展
编程语言经历了从最初的汇编语言,到以 C 语言为代表的系统语言,到以 Java 为代表的面向对象语言,到以 Python 为代表的动态语言,大体经历了从低级到高级发展的过程。下一步必然是抽象度更高的面向领域的语言。 但是面向领域语言多年来并未看到非常成功和通用的案例出现。Google 在用 100 行重写一个搜索引擎,也许就是这方面的尝试。那么我们能否设计出一种云计算领域的语言,200 行搭建出一个淘宝? 或 100 行搭建出一个滴滴后端?
02
云时代软件研发的终局猜测
_
综上所述,服务端云化的大趋势,加上研发上的3个趋势,最后的终局很可能是如下面貌:
1.从开发者的角度看:Cloud as a Computer(CaaC)
用户的开发环境完全放在云端。云端维护了完整的测试环境,日常环境,预发布环境和正式环境,提供完整的 CICD 流程;开发者使用云 IDE,和云厂商提供的 SDK 来开发业务系统代码,基于云端的代码库,通过云端编译和调试。再通过云端 CICD 完成研发到部署的闭环。

简单来说,云厂商不仅仅是提供了一个云端的研发机,还提供了一整套研发工具,内置特定于云的 SDK,以及一整套云端的单测环境,联调环境。同时能够和构建部署,预发灰度等流程无缝衔接。让研发者做到 Develop on Cloud;研发者的 PC 仅仅作为一台终端,并且不再需要额外的测试资源。

云厂商通过研发部署全生命周期的最优体验,提升研发效率,为用户创造高效迭代的价值,从而提高用户黏性。云上研发像本地研发一样流畅,并且比本地研发体验更好,更高效,更标准,更一致。 比如云端代码优化,自动扫描发现 bug,用机器学习帮助用户识别逻辑错误和系统性风险,提升研发质量,用分布式能力缩短编译时间等等,可以做的优化非常多。未来云时代的研发模式可能和今天完全不同,拥有更高的研发效率,更快的迭代速度,更完善的质量控制。

更进一步,开发者可以把云看做一台有无限多核的 CPU、无限内存和磁盘的超级计算机。在这台超级计算机上可以起任意多的进程,不同的进程可能实际运行在同一台物理机上,也可能运行在不同的物理机,但是因为高速的云端网络,用户可以透明地把他们当做本地进程一样处理。在云上搭建分布式应用就像在单机调测起多个进程一样方便。

2.从业务系统看:Elastic Architecture Hosting Service(EAHS)
云厂商能够提供的终极产品形态是“弹性架构托管服务”。任何有一定规模的业务系统,必然有其内部的系统架构,由各个子系统协作完成整体业务功能。云厂商能够将整个业务系统当做一个整体托管在云端,通过完善的日志分析、监控告警、流量分析和预测,保证其各个子系统能够在需要的时候弹性扩缩,以最佳的配比应对业务流量。同时和 CaaC 的开发模式无缝集成,能够通过完善标准的流程,在云端研发和更新各个组件,控制每个组件的各种颜色发布(蓝绿黄灰),客户购买的不再是一台台虚拟机,而是整体的业务系统托管服务。

具体形式比如客户按云厂商要求的格式提供一份定义文件,文件中定义了业务系统的整体部署结构,每个部署单元对应一份代码地址,代码地址中包含了对代码的构建,运行方式和外部依赖注入的完整描述,包括服务订阅和发布,结构化存储、消息队列服务等。云SDK能够根据这份定义文件在单机启动整个业务系统来给用户做调测;云平台能够根据这份定义文件,在云端启动整个业务系统架构。用户不需要指定每个部署单元的实例个数和资源需求,只需指定是否支持水平扩容和垂直扩容。云平台根据接入流量和系统运行状况自动对某些部件做弹性扩缩,包括水平方向服务实例的增减,和垂直方向单实例资源的动态伸缩。

简单来说,用户只需设计好业务系统的结构,写好每个部署模块的代码提交,剩下的一切事情都由云平台完成。用户只需专注业务系统的构建和业务逻辑的实现。不必再花时间在通信问题、单点问题、数据库维护问题、灰度问题、弹性问题、容灾问题、DNS 问题,CDN 问题,运维问题。云既然做系统,就一揽子系统化地将所有的系统问题解决掉,让每一个客户只保留业务系统开发者,足矣,不再需要 CTO、架构师和 SRE。

更近一步,在这种形态下,业务系统定义文件完全可以演化为一门云计算的领域特定语言(Cloud DSL); 对于单台电脑来说,ELF 格式定义了可执行文件被 OS 加载所需要的各种信息和数据,一个 ELF 格式的文件可以被 OS 加载启动为可调度的一个进程。业务系统定义文件,或者用 Cloud DSL 编写的文件,就是 Cloud 这台 Computer 上的 ELF 文件,可以直接被 Cloud 加载启动为一个业务系统弹性架构实例。

3.从云厂商运维运行看:The Datacenter as a Computer(DaaC)
从云端资源管理看: Datacenter as a Computer;所有数据中心的所有物理机像一台电脑一样,任何一个业务的运行实例可以跑在任何一台物理机上。所有的资源形成一个巨大的资源池,不同业务可以最大程度地在时间和空间上复用和互用。自动化的异地容灾,异地多活能力,存储计算分离,不同优先级混布,各个维度各个层次上提升整体的资源利用率。

资源互用的能力跨域不同技术栈,不同部门,不同公司。当双11过去之后,抵抗峰值的机器能够迅速被消化而不再需要消化几个月,表明资源互用的能力已经能够跨越不同的行业,并且能够通过运营协作等手段,比如再造一个零售之外其他行业的双11等等,来调节不同行业的错峰运行。云真正成为社会的公共资源,具有宏观调控能力,从而能够大大节约整个社会的成本。

阿里集团 2015 年底就对外宣布启动阿里巴巴集团 2018 年中台战略。战略定义为,构建更具创新性、灵活性“大中台、小前台”组织机制和业务机制。其中,前台作为一线业务,更敏捷更快速适应市场;中台将集合整个集团的数字运营能力、产品技术能力,对各业务前台形成强力支撑。有横向的技术中台来 support 几十个业务 BU 的底层技术需求。我们系统软件事业部近几年来做云化、混部项目实施的过程和实践证明,每次资源池合并之后的资源互用都会带来巨大的成本节约,包括物理成本和运维成本,这已经成为绝大多数人的共识。(全文完)

原文发布时间为:2018-08-07
本文作者:林轩
本文来自云栖社区合作伙伴“中生代技术”,了解相关信息可以关注“中生代技术”。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
人工智能 运维 安全
职等你来 | 2023春招,牵手阿里云基础设施,期待同行
快~加入阿里云基础设施,一起打开有意思的未来!
职等你来 | 2023春招,牵手阿里云基础设施,期待同行
|
运维 架构师 测试技术
11如何成为一名顶尖的阿里架构师?|学习笔记
快速学习11如何成为一名顶尖的阿里架构师?
168 0
|
SQL 缓存 架构师
五年成为阿里技术专家,架构师需要懂哪些技术?
  很早很早之前,我对于架构的概念一点都不理解,依稀记得,架构( architecture)这个词,来自于建筑领域。   这对于我这个没写过几行代码的人来说,瞬间就有了一种“不明觉厉”的崇拜感。   架构,感觉好厉害的样子,从名称上来说,好像是设计根骨,设计底层,设计最核心的东西的人。   架构师,一定很NB,我什么时候能成为架构师呢?   后来懂了一点点代码,去写增删改查,更是体会不出来架构的概念,不就是Sql语句吗?明明DBA更厉害啊,做各种的慢Sql优化,所有的Sql都要让DBA审核,DBA对于Mysql,或者是Oracle的各种性能调忧很厉害,而熟悉业务的开发人员又常常能写出几
193 0
|
搜索推荐
码上公益|7天解决多年档案管理难题
爱心极客用数字技术,助力公益组织档案管理高效化、精细化,守护每一份爱心。
310 0
码上公益|7天解决多年档案管理难题
|
定位技术 开发者
阿里资深技术专家崮德:如何成就更好的自己
希望团队里的同学好好想一想,如何成就更好的自己?
795 1
阿里资深技术专家崮德:如何成就更好的自己
|
移动开发 缓存 前端开发
阿里高级技术专家:成长路上如何破局?
自小喜欢计算机,高考却落榜心爱的计算机系,如何圆梦?校招进入阿里开局不利,如何在边缘业务中突破成长?业务不断发展、技术不断更新,如何调整自己跟上变化的脚步?本文分享阿里高级技术专家圣司(张舒迪)在阿里的成长之路,分享他进入互联网行业、成为一名前端开发道路上的那些转折点和“弯路”,以及体会和感悟,希望能为同学们带来启发。
9117 1
阿里高级技术专家:成长路上如何破局?
|
设计模式 自然语言处理 运维
阿里研究员:软件测试中的18个难题
对于软件测试来说,怎么样才算测够了?如何评价测试的有效性?那么多测试用例,以后怎么删?在软件测试中会遇到非常多的问题,阿里研究员郑子颖分享了18个他总结出的难题以及相关看法,希望对同学们有所启发。
3566 0
阿里研究员:软件测试中的18个难题
|
新零售 算法 架构师
那个在阿里养猪的工程师,5年了……
在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。
4134 0
那个在阿里养猪的工程师,5年了……