作者|之所以做相关介绍,主要是我觉得现阶段应该结合实际生产讲serverless的实现细节和实际效果,而不是用PPT给大家灌输相关思想。但由于本文是作者想做的《人人都是 Serverless 架构师》主题系列的开篇,所以还是有必要尽可能简单的给大家介绍一下serverless架构。什么是无服务器架构?Serverless架构是一种以Serverless服务系统为核心的应用架构设计理念,是一种分布式架构。最明显的特点是继承了Serverless的核心优势:及时、弹性,能够应对高并发请求,降低计算服务成本,同时具有微服务架构高扩展、快速的优势迭代。它是一种更专注于业务发展的架构。下面举个例子来介绍下Serverless架构和传统架构的对比:一个初创的垂直电商公司需要搭建一个完整的动态站点服务。从最初的单体架构开始,需要在阿里云上购买2核8GECS和200G硬盘。通常5M带宽一年费用在4000+左右,用户需要自己安装Mysql数据库、redis、nginx等基础软件。也有专业的同学,需要长期对服务器进行运维,比如防止磁盘变满、服务器启停、服务器备份等。当业务量上来时,为了保持高可用,提高访问性能。基础架构需要升级,需要购买阿里云负载均衡、弹性伸缩服务和更多的ECS服务器。同时,为了防止数据库瓶颈,需要对云数据库rds进行升级。此时的整体架构如下:除了架构层面的准备,还需要进一步设置ECS安全组、伸缩规则、SLB转发规则。后续运维会比单实例复杂,整体价格和成本会更高。但是如果采用Serverless架构,无论项目什么时候开始,或者后续业务量增加,整体架构都可以保持不变。其架构如下图所示:业务增加只需要横向扩展路由配置,增加功能即可。费用方面,阿里云网关ApiGateway共享实例访问量100万次,共计60元;阿里云对象存储OSS按存储量和访问流量收费。标准存储量0.12元/GB/月,访问流量0.5元/GB。阿里云函数计算是免费的,也是按量付费的。整体成本也很低。数据库可以根据需要采用TableStrore的按需付费模式,如果更习惯使用Mysql,可以购买云数据库。Serverless架构的优缺点从上一篇与传统架构的对比,我们可以看出Serverless架构的优势:对于初创项目有更好的成本优势,大部分是按需付费架构体系中的产品模型可以最大限度地为初创项目带来收益。节约成本,降低运营成本和开发成本,可扩展性更强,升级成本更低。不管是最开始处理小规模并发还是大流量并发,整体架构基本可以保持不变。您只需升级产品和实例规格(如升级网关为独享,增加函数内存规格)即可扩展业务。无需重启服务,动态添加路由、功能、静态配置即可,完全不会影响现有业务迭代。它更高效,因为基础设施部分几乎不需要更多关注,开发人员可以只关注业务功能。同时可以快速部署上线,整体效率得到大幅提升。但不可忽视的是,Serverless架构也存在以下缺陷:新架构体系对公司员工的要求会更高,需要重新学习新的技术体系。组织会产生一定的影响。厂商平台锁定,不同的服务商有自己的一套开发模式和规范,不利于迁移,当企业不得不迁移云服务商时,这种风险会暴露得更多。架构在应用层面更加离散,在持续集成和建设中存在更多风险。与部署在服务器上的应用程序不同,具有Serverless架构的应用程序通常被拆解得更加离散。业务路由、业务动态服务、静态服务都分散到不同的产品中。应用程序级别的管理可能是一个挑战。调试和部署都比较困难。无服务器服务本身是开发人员的黑匣子。通常,遇到问题时,并不像登录服务器那样容易排查问题。定位问题变得更加困难。当然,对于后一个问题,目前我们已经给出了解决方案,我会在后续的文章中进行更详细的介绍。构建Serverless架构Serverless应用的核心仍然是业务逻辑处理,但是你还需要更多的相关知识体系来实现它。下面介绍一下我们搭建Serverless架构所需要的相关知识储备。1.基础云计算架构体系由于Serverless架构是一个云原生的架构体系,所以在云端构建时需要掌握一些基础的云计算架构知识,比如网络、存储、安全等。网络部分主要包括您需要知道应用程序的端到端访问路径。比如是http请求,需要知道域名解析和网关。存储部分更多的是合理规划成本需求。比如你需要明白,静态资源放置的最佳实践应该是对象存储,数据存储无疑应该在数据库中,但是至于serverless数据库是不是传统的Mysql数据库,就看你的使用习惯,成本预算,接受新事物。还有更多的安全话题,比如安全的密钥管理、安全的服务调用、安全的流量控制等等。虽然Serverless本身也面临厂商锁定的挑战,但至少这些基本的云服务能力是每个云厂商都具备的。阿里云方面,网络设计相关的产品有DNS解析、CDN加速、ApiGateway等。存储方面,有数据库存储如RDS、OTS等产品,对象存储如OSS。这些在后面的实战中会详细介绍。2.开发者工具开发者工具是开发无服务器架构应用程序的必备选项之一。鉴于Serverlss架构是一种充分利用云服务的离散架构,Serverless应用在构建、部署、调试、持续集成等方面都与传统应用不同。无服务器架构应用程序可能不止一个。多种语言和多种服务类型的集合将对Monorepo产生更强的吸引力。此外,在建设、部署、调试、运维等方面也存在诸多不便。Serverless开发者工具的诞生就是为了弥补Serverless应用架构的不足。几乎每个云提供商都有自己的Serverless开发工具,比如阿里云的ServerlessDevs、AWS的SAM,以及与腾讯云合作的ServerlessFramework。除了基本的项目初始化和构建部署能力外,这三个工具还具备Iac能力,可以满足多样化Serverless应用的持续集成需求。本系列将以ServerlssDevs为核心工具,讲解Serverless的架构实践。除了基本的云计算相关概念和开发者工具,你还需要知道如何设计和管理无服务器架构应用,包括持续集成、多环境部署测试、可观察性等。此外,对安全要求较高的项目Security需要进一步解决的问题,以及性能调整问题。写在最后,Serverless技术成熟度曲线从高人气到现在的第二个爬坡阶段,也就是真正开始量产的阶段。通过工具链的整合,已经可以将多个应用相关的项目整合到一个独立的代码仓库中,即有一个独立的开发脚手架供更多的开发者用来构建自己的Serverless应用。随着社会对创新实施效率的要求越来越高,我相信serverless架构的天然优势一定会比传统应用架构更好的满足这种需求,所以希望更多的人能够参与到实践中来贡献它。Serverless开发者生态贡献,欢迎更多开发者加入我们自主研发的Serverless开发者工具ServerlessDevs项目。如果对ServerlessDevs有任何疑问或者想了解更多,可以加入社区建设钉钉群:31193960作者简介:王青(谢寒)|阿里云原生前端负责人middleware2016年加入阿里中间件,从事云产品企业控制台研发工作,负责20多个中间件云产品前端研发工作,主要技术栈为大前端通用技术,目前专注致力于ServerlessDeveloper工具链的构建,是云原生ServerlessDev研发负责人之一。\
