谈及技术,人们很少将其与美感联系在一起,而一旦这么做,神奇的事情就发生了......
最早在技术与美感之间建立连接的是《计算机程序设计艺术》一书的作者高德纳 (Donald Knuth),他发现技术和艺术存在共同之处。他说:“计算机编程是一门艺术……一个潜意识地将自己视为艺术家的程序员会喜欢他所做的事情,并且会做得更好。”
在近期举办的“亚马逊云科技中国峰会”的 DEV DAY 上,我们再次领略了云时代的技术之美。作为技术构建的基础平台,计算机硬件与软件的发展历程也是通过抽象追求技术之美的历程。这其中包含了如何让开发变得更加简单和高效的内在逻辑,以及自由构建的要素和方法,相信能带给开发者们一些全新的启发。
1始于抽象,如何理解技术之美
高德纳在《计算机程序设计艺术》中曾提到,程序员的心理特征主要是具备在不同的抽象层次之间转换的能力,从低层到高层,能看小的细节,也能看大的整体。可见,抽象是开发者需要具备的关键能力。
该如何定义抽象?UCCA 尤伦斯当代艺术中心副馆长、UCCA 集团艺术总监尤洋尝试用三个关键词去涵盖抽象。第一,上下文(Context),抽象源自某种渊源,离不开历史追溯的上下文;第二,技术(Technical),艺术家在创作抽象作品时候,如果关注科技,没有科学技术、计算机技术的支持,很难完成作品;第三,共构(Symbiosis),抽象离不开观众,在艺术家构思的路径之中,会影射作为观众的我们。
重新回到技术领域,不难发现艺术与技术有关抽象上的共通之处。编程语言的发展就是通过不断抽象实现技术之美的有效例证。
八十年代,C 语言得到长足应用和发展,支持了大多数操作系统的编写,而操作系统是我们得以持续抽象的重要基础。九十年代,互联网日新月异,由于需要更高层次的抽象,大批围绕 Web 的解释性高级语言涌现。移动互联网时代,GO 语言、Rust 语言以及针对大数据、机器学习的一大批新语言出现,更简洁和更高效成为现阶段编程语言的目标。
不过本质上看,编程语言仍是开发者改变世界的表达方式,抽象让这种表达更加精准和具象。2008 年图灵奖得主 Barbara Liskov 提出,我们希望从一个抽象中得到的是一种机制,它允许表达相关的细节和抑制不相关的细节。在面向对象的编程理念成为共识后,Liskov 的研究涉足了网络计算,专注表达方式的抽象。此时的 Liskov 一定没有想到,表达对象本身即将经历翻天覆地的变化。
2云原生时代的开发革命,亚马逊云科技做对了什么?
从局域网,到互联网,再到云时代。随着摩尔定律大行其道,产业浪潮一浪高过一浪,业务节奏越来越快,开发者表达的对象逐步变成了云上的基础设施。这时,复杂、繁琐、笨重,在更高的维度上再次涌现。
建立更简单、更自由、更高效的云上世界
2006 年 3 月 14 日,亚马逊云科技(Amazon Web Services)的第一款产品对象存储 Amazon S3应运而生,同年还发布了虚拟主机服务 Amazon EC2、和消息队列服务 SQS。这就把存储、计算、中间件抽象成为网络服务,以 API 的方式提供给开发者,通过全球分布式的架构,为开发者提供了按需获取资源的基础平台,这样的平台后来被称为“云”。
后来,亚马逊云科技通过不断对虚拟机、容器、无服务器抽象,简化底层复杂性,减少基础设施的感知和适配工作。
2011 年,亚马逊云科技发布 Amazon ElasticBeanstalk,实现了自动化部署负载均衡、虚拟机实例以及数据库实例,隐藏了底层集群的复杂度。随着软件的抽象层次不断提高,架构构建的方式也在发生很大的改变——容器化已经成为云端构建的主流。2014 年亚马逊云科技发布了容器服务 Amazon ECS。当时,Kubernetes 还没有大行其道,亚马逊云科技选择自己构建框架来管理 Docker 容器;后来,Kubernetes 逐步成熟稳定,并成为很多客户管理容器的首选,亚马逊云科技拥抱开源社区,发布了托管的 Kubernetes 服务 Amazon EKS;2017年发布的Amazon Fargate更进一步,完全托管了运行容器集群的服务器节点,提供基于容器颗粒度的按需部署和自动扩展的能力,让用户关注的计算单元完全抽象到容器层级。
除了 Amazon ECS 的发布外,2014 年还有另一款服务的发布也引发了技术圈的无数关注,它就是 Amazon Lambda。事实证明,亚马逊云科技对 Serverless 的投入及预判没有错。如今,无服务器计算已成为云原生时代的共识,大幅提升了云原生的技术美感。
Mobvista 技术副总裁 & 首席架构师、亚马逊云科技 Data Hero 蔡超提到,他们在集团的游戏数据分析统计系统上选择迁移到了无服务器架构,利用 Amazon Lambda 简化了开发,提高了迭代速度,并将维护成本降低了 50% 。
经过 16 年的发展,亚马逊云科技的服务从 3 个增长到了 200 多个。在技术抽象和发展的历程中,蕴含着与艺术非常类似的逻辑——基于真实的需求进行构建。即使计算环境不断抽象,开发者依旧需要管理数据库、大数据、机器学习等诸多服务类别,解决资源生命周期各个环节的自动化。资源管理代码应运而生。
亚马逊云科技的服务都提供 Restful API。2011 年亚马逊云科技发布 Amazon CloudFormation,支持客户用声明格式的 JSON 代码来描述云上资源,后来又支持 YAML 格式。至 2019 年,亚马逊云科技陆续发布了命令行、IDE 工具、SDK 进一步抽象了 API 操作,让开发者可以使用更熟悉的 Shell 脚本、IDE 集成开发环境以及编程语言来管理云上资源,并重磅发布 Amazon CDK,让开发者可以使用命令式的编程方式去编写管理代码。去年,亚马逊云科技发布 Amazon Cloud Control API,让开发者采用自定义 API 的方式灵活管理亚马逊云科技和合作伙伴的第三方服务。值得一提的是,Amazon CDK 的出现如同面向对象在资源管理领域的重生,带来了巨大的效率提升,具有里程碑的意义。至此,对于云资源管理的编程友好达到全新的高度,而不断抽象的成就是技术之美在云资源管理旅程最好的体现。
用技术之美成就自由构建
云原生时代,亚马逊云科技通过不断抽象,探索出技术之美的实现路径。然而,技术之美在未来又该如何帮助开发者更自由、便捷地构建自己的业务系统呢?亚马逊云科技大中华区解决方案架构部总监代闻将其归结为架构典范之美、组件抽象之美、流程灵动之美三个方面。
关于架构之美,以亚马逊电商为例。2001 年之前,亚马逊电商采用的是单体式架构,在业务增长的过程中,单体式架构很快遇到瓶颈。2002 年亚马逊开始着手微服务架构改造,涉及技术、流程、组织等多个方面。截至 2020 年,亚马逊电商内部已有 10 万微服务运行。随着微服务的兴起,领域驱动设计驱动设计(Domain-Driven Design )中相关的模块化服务设计方法论六边形架构得到了广泛的应用。在这个架构设计中任何一个服务的代码逻辑都面向特定领域,对外提供服务端接口。在去年的 re:Invent 上,亚马逊的 CTO Werner Vogels 也分享了亚马逊设计 API 的六条最佳实践。
- API 永远存在
- 永远不要破坏向后兼容性
- 从客户场景出发,逆向工作
- 创建具有显式有据可查故障模式的 API
- 创建服务于明确目标的自描述 API
- 不惜一切代价避免泄露实现细节
如今,云原生应用的架构充分利用按需交付、全球部署、弹性和更高级别的云服务,大大提高了开发人员的工作效率、业务敏捷性、可扩展性、可用性、资源利用率和成本优化。代闻认为,云原生是一个相对的概念,因为云服务本身就在不断演进中。在一个时间点上,如何选用合适的组件,就成为云原生架构落地最基础的一步。
亚马逊云科技经过多年发展,在虚拟机、容器、无服务器三个层面都提供了相应的服务支撑,在这三个抽象层次的计算能力也渗透到了各个服务类别中。如今,开发者不仅可以选择应用代码所在的运行环境的抽象层级,还可以根据业务场景选择需要调用的云资源的抽象层级,让不同抽象层级的应用代码和云服务彼此之间无任何阻碍地互相调用,从而真正实现自由构建。
有了好的架构、适合的组件,灵动的开发流程让应用得以顺利落地。代闻表示,在构建阶段,快速搭建和验证架构,快速交付 MVP 是非常重要的;治理阶段的关键在于,如果保持良好的可观测性,从而管理数据并且适时的应用安全策略;在应用落地之后,进入到持续的迭代阶段,自动化的部署、更多的组件服务化,以及运维的自动化和智能化转变为核心。在整个历程中,亚马逊云科技提供了一系列的服务和工具,帮助开发者灵活、动态地实现开发流程,让技术之美不止停留在探讨和设计阶段,而是贯穿应用的整个生命周期。
3面向未来,携手开发者共同成长
技术抽象与自由构建让软件开发变得更加方便,开源让技术能力得以普及。如今的现代化应用程序中,我们大量地采用开源服务,亚马逊云科技近年来也在持续通过托管的开源服务加速企业在现代化应用程序上的构建和运营。
“我们开源的三大支柱实际上是来自于社区、代码和文化。本身亚马逊的这种文化实际上给了开源社区非常多的指导,我们的员工、用户,也不断地在社区里头去贡献出来他们自己的代码,把他们的一些经验和实践,变成了共享的资源,能够去加速其他客户的迭代和更新。”亚马逊云科技的现代化应用服务产品总监陈展凌表示。可见,开发者社区建设是亚马逊云科技一直以来非常关注的事情。
10 月 14 日的 DEV DAY 上,亚马逊云科技也上线了面向中国的亚马逊云科技开发者官网,定位世界级的开发者社区,为国内开发者链接全球资源,帮助国内开发者的内容走向全球。
那么,什么才是一个成功的开发者社区?在亚马逊云科技 Community Builder、Juniper 中国区创新事业部资深架构师范桂飓看来,开发者社区是一个有清晰定位、有客户画像、能够解决客户痛点需求的平台型产品,因此,一个成功的开发者社区就需要找准定位,在服务开发者的过程中具有“Serve it and deserve it”的精神。亚马逊云科技 User Group Leader、永乐拾光创始人李欣表示,一个成功的开发者社区是一个专业的、开放的、包容的,能够帮助开发者实现个人价值的平台。从开发者社区对于技术公司的价值维度,亚马逊云科技 Hero、SphereEx 联合创始人 & CTO 潘娟认为,开发者社区是一个公司产品直接沟通开发者的重要渠道,社区内的良性反馈能够帮助公司厘清产品定位,建立技术品牌,帮助公司吸纳贤才。
行业发展早期,一些头部公司通过开发者社区的建设也推动了技术的落地。亚马逊云科技资深开发者运营专家郭悦认为,开发者社区的建设,让这些头部公司有了头雁效应,不仅担起了企业责任还提升了品牌形象。“一个技术公司,通过开发者社区,能够把产品与人,公司与人交流的这种行为,变成了人与人交流的一种行为,我觉得这会让一个技术公司看起来更有温度。”
一个重视开发者真正诉求的开发者社区才能拥有长久的生命力。那么,开发者社区怎么高效服务开发者?Zilliz 合伙人兼技术总监、LF AI & Data 基金会技术咨询委员会成员栾小凡看来,首先要有很好的服务体验;其次要有足够多优质的内容,并能够帮助建立开发者之间的联系;最后要通过规则激励 UGC 内容的产生,让有潜力的开发者留在社区里,真正成为社区生态的一部分。潘娟则认为,本土化是开发者社区需要关注的事情之一。据她观察,国外的开发者更加注重自身开源经历的打造,将此看作自身的素质能力,国内开发者参与开源课题更多是兴趣使然。在潘娟看来,做好本土化的文化建设,能更加柔和地吸引开发者到社区当中。
亚马逊云科技中国开发者网站优先思考的正是本土化、全球性和开放性。其设计包含专栏、视频、问答、社区、活动、大赛六大核心板块,面向不同职业技能阶段的开发者设计不同的形式或内容呈现。一方面,亚马逊云科技全球的客户案例和开发者的分享,都将在亚马逊云科技开发者官网翻译分享给中国的开发者;另一方面,亚马逊云科技在官网上吸纳了很多海外技术大咖,加入社区进行本土化的内容创作。此外,亚马逊云科技鼓励开发者主动运营社区,希望通过双向互动让社区更加活跃、更加健康。毕竟,一个开源开放的社区,才会更有生命力。
开发者群体在亚马逊云科技眼中有着特殊的分量。DEV DAY 也始终以开发者为中心。今年是 DEV DAY 植根中国的第七年,亚马逊云科技创新地以技术之美为主题,带领大家探索云时代的开发规律,并分享前沿技术和云上最佳实践,帮助开发者更好地了解云计算,沉浸式地体验云计算技术的魅力。
戳阅读原文,直达亚马逊云科技中国开发者网站