Serverless 架构落地实践及案例解析

本文涉及的产品
简介: 从单体架构到微服务架构,从单机部署到集群化部署,互联网软件架构越来越复杂,公司需要投入大量精力和成本进行底层技术的升级和维护。但是 Serverless 架构能够让开发者专注业务实现从而创造更大的业务价值。


作者 | 袁坤  
整理 | 徐诗瑶
出品 | CSDN 云原生


互联网软件架构演进


我们先简单回顾下互联网软件架构的演进之路。单机部署在单机部署中,将所有的业务和数据库都部署在一台主机中。


此架构的优点是:开发、部署以及运维都非常简单。缺点是:一旦遇到流量过大或者机器故障,整个系统瘫痪,甚至丢失业务数据,造成巨大业务损失。


集群化部署


针对上述架构问题,常用的解决方案是采取水平扩容的方式进行集群化部署。引入 SLB 的流量网关路由,进行负载均衡。


集群化部署本质上是单体架构,开发人员在项目开发的时候需要额外注意,比如要使用 cookie 进行鉴权,session 就不能存储在本地,需要引入 Redis 进行单独存储。集群化部署可以通过快速水平扩容解决流量突增或机器故障的问题。


微服务拆分


随着业务的发展以及团队规模的扩张,单体架构这样紧耦合的方式会带来越来越多的问题,架构的灵活性和可扩展性成为阻碍业务发展的重大挑战。微服务架构应运而生。


对比单体架构,微服务架构远比其复杂,也衍生了很多新技术,比如:API 网关、服务注册、服务发现、RPC 通信。


Serverless 架构


从单体架构到微服务架构,从单机部署到集群化部署,互联网软件架构越来越复杂,公司需要投入大量精力和成本进行底层技术的升级和维护。下图是 Serverless 架构,和单体架构不同的是将对应的组件换成 Serverless 云产品。


技术演进的本质是更好服务业务,传统开发方式使企业花费更多的精力打磨底层技术细节,而 Serverless 架构就是让开发者专注业务实现从而创造更大的业务价值。

Serverless 架构的优势很明显:


不关注底层基础设施,专注业务价值创造

自动弹性,从容面对突增流量

按资源使用计费,避免资源闲置浪费Serverless 架构探讨先来看一下 FaaS 的执行过程。蓝色部分是用户手动管理,只需要交付代码,其他的启动、运行、运维等都是在 FaaS 平台进行。


但是此架构会产生一些问题:


代码碎片化,无法统一管理和部署

本地环境和线上环境不一致,无法处理依赖兼容性问题

进行本地 Debug 和线上调试困难

FaaS 厂商对代码包有限制,无法部署大代码包

没有统一的标准,导致厂商锁定问题


Serverless Devs针对上述问题,Serverless Devs 可以帮助开发者更好地开发管理 Serverless 应用,它具备以下几个特点:


无厂商锁定,Serverless Devs 帮助开发者将应用部署在各个厂商上面

开源开放,代码逻辑无任何黑洞

功能可插拨,Serverless Devs 通过组件的形式提供,开发者完全可以根据需求,快速开发适合自己的工具套件

项目全生命周期管理能力,Serverless Devs 是用户进行项目初始化创建、开发、调试、部署等全生命周期管理的工具,简化 Serverless 应用开发如果说 Serverless 架构可以帮助开发者开发应用,那么 Serverles Devs 就是帮助 Serverless 开发者更好地开发 Serverless 应用!


Serverless 架构实践


Serverless Devs 官网实践通过上面的介绍可以看出 Serverless Devs 开发者工具并没有提供业务,业务的实现由组件提供,而组件本身分散在不同的 GitHub 仓库中。


Serverless Devs 官网有下面几个诉求:

不同仓库下 GitHub 源中的文档汇集在一个界面进行展示

组件开发者专注组件文档编写,文档自动实时同步到官网

组件一旦有变动,官网能够自动部署和构建整体方案如下:


开发者在 GitHub 更新文档,触发 webhook 钩子配置的 Http Serverless 函数。这里需要注意的是:由于组件的文档数目不定以及 GitHub 网络不稳定等问题,如果所有的工作都在 Http 函数中处理,非常容易导致超时,所以将所有的处理逻辑放在异步调用中,执行完后将处理的结果投递到钉钉或者邮件等渠道。


阿里云函数计算控制台实践阿里云函数计算 FC 控制台是用户使用函数计算产品的第一站,控制台的用户体验至关重要。


在架构上面临几个问题:

后端采用中心化部署模式,用户在海外访问延时非常高

需要用户手动建设监控、日志、灰度等能力,导致运维成本偏高

研发效率较低,开发过程中前后端需要协调沟通,协作成本较大整体解决方案如下:



左侧是阿里云通用的网关,负责统一鉴权和安全等逻辑,抽离出 BFF(Backend for Frontend)层,这部分的特点如下:

整体 BFF 部署在阿里云函数计算 FC 上,开发者无需手动运维
BFF 层由前端工程师负责,前端工程师更好地深入业务,提供优秀的用户体验
后端工程师专注于底层稳定性和原子能力的提供,通过 SDK 的方式进行交付给 BFF



通过 Serverless 实现的 BFF 不仅给业务带来了极大的灵活性,对于前端工程师这个群体也有质的改变:从之前的技术视角转变到更加关注业务价值和用户体验提升。


CD 构建实践


常规的自建 CD 构建集群方案通过 Jenkins 或 Tekton 框架实现业务逻辑的编排,资源层面使用 K8s 部署,实现弹性伸缩。如果需要实现简单的云端构建 CD 方案,采用上文的架构略显复杂。CI/CD 的业务场景有以下几个特性:通过事件触发执行流量无法提前预估需要长时间在后台运行,对延时不敏感由于网络时延等问题,需要设计失败重试机制这些特性完全是为 Serverless 量身打造的。实现方案还使用了异步函数,将构建的所有流程导到异步函数中处理,整个编排逻辑通过 Serverless Devs 进行,完美实现了一个性能稳定的 CD 构建集群。阿里云函数计算应用中心这款产品的底层的 CD 能力完全基于上述的原理进行实践,大家可以自行体验。


异步函数


实践中有非常多使用到异步函数的场景,这里简单介绍下异步函数。




总结来看,异步函数有四个特点:

1、可长时间运行,两个小时到一天不等
2、可以设置自动终止,自由调节时间,节约资源
3、可把触发结果分发给各个事件兑现中心
4、有三次机会可在失败的情况下自动重试



1分钟 Serverless 极速搭建真网站



阿里云云原生应用平台联合云起实验室推出场景体验,2022.6.20-2022.7.1日 (工作日期间)完成以下体验,即有机会领取天猫超市 10 元代金券。


  • 极速搭建 Zblog 博客系统


体验地址:

https://developer.aliyun.com/adc/series/activity/serverless2022

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
3天前
|
存储 监控 API
构建高效微服务架构:后端开发的现代实践
【5月更文挑战第9天】 在本文中,我们将深入探讨如何在后端开发中构建一个高效的微服务架构。通过分析不同的设计模式和最佳实践,我们将展示如何提升系统的可扩展性、弹性和维护性。我们还将讨论微服务架构在处理复杂业务逻辑和高并发场景下的优势。最后,我们将分享一些实用的工具和技术,以帮助开发者实现这一目标。
|
23小时前
|
开发框架 搜索推荐 安全
【Uniapp 专栏】基于 Uniapp 的电商应用开发案例解析
【5月更文挑战第12天】使用Uniapp跨平台框架开发电商应用,结合丰富的组件和API,实现首页、商品详情、购物车及订单等关键功能。注重界面设计和用户体验,处理商品逻辑、订单管理和支付接口集成。同时,适应多平台特性,加入个性化推荐、商品直播和社交分享等特色功能,以降低成本、提升竞争力,打造高效购物体验。此案例展示了Uniapp在电商领域的潜力和优势。
|
2天前
|
监控 数据库 开发者
构建高效可靠的微服务架构:策略与实践
【5月更文挑战第11天】在当今软件开发的世界中,微服务架构已经成为构建可扩展、灵活且容错的系统的首选方法。本文深入探讨了设计、部署和维护微服务系统时面临的挑战,并提出了一系列实用的策略和最佳实践。我们将从服务的划分原则出发,讨论如何确保每个微服务的自治性,以及如何通过容器化和编排技术实现服务的高效运行。文章还将涉及监控、日志记录和故障恢复的策略,旨在帮助开发人员构建一个既高效又可靠的微服务环境。
|
3天前
|
缓存 负载均衡 API
微服务架构下的API网关性能优化实践
【5月更文挑战第10天】在微服务架构中,API网关作为前端和后端服务之间的关键枢纽,其性能直接影响到整个系统的响应速度和稳定性。本文将探讨在高并发场景下,如何通过缓存策略、负载均衡、异步处理等技术手段对API网关进行性能优化,以确保用户体验和服务的可靠性。
|
4天前
|
监控 API 持续交付
构建高效可靠的微服务架构:策略与实践
【5月更文挑战第8天】在当今快速演进的软件开发领域,微服务架构已经成为实现敏捷开发、持续交付和系统弹性的关键模式。本文将探讨构建一个高效且可靠的微服务系统所必须的策略和最佳实践。我们将从服务的划分与设计原则出发,讨论如何通过容器化、服务发现、API网关以及断路器模式来优化系统的可伸缩性和鲁棒性。此外,我们还将涉及监控、日志管理以及CI/CD流程在确保微服务架构稳定运行中的作用。
|
5天前
|
敏捷开发 持续交付 API
构建高效微服务架构:后端开发的现代实践
【5月更文挑战第8天】 在数字化转型的浪潮中,微服务架构已成为企业追求敏捷开发、持续交付和系统弹性的关键解决方案。本文将深入探讨微服务的核心概念,包括其设计原则、优缺点以及如何在后端开发中实现高效的微服务架构。我们将通过实际案例分析,展示微服务如何帮助企业快速适应市场变化,同时保持系统的可维护性和扩展性。
|
2天前
PandasTA 源码解析(二十三)
PandasTA 源码解析(二十三)
7 0
|
2天前
PandasTA 源码解析(二十二)(3)
PandasTA 源码解析(二十二)
5 0
|
2天前
PandasTA 源码解析(二十二)(2)
PandasTA 源码解析(二十二)
9 2
|
2天前
PandasTA 源码解析(二十二)(1)
PandasTA 源码解析(二十二)
6 0

热门文章

最新文章

相关产品

  • 函数计算
  • 推荐镜像

    更多