无服务架构--Serverless
无服务架构
无服务架构(Serverless Architecture)即无服务器架构,也被称为函数即服务(Function as a Service,FaaS),是一种云计算模型,用于构建和部署应用程序,无需关心底层服务器的管理。
在无服务器架构中,开发人员编写单独的函数或函数集合,这些函数以事件驱动的方式触发,并在需要时自动扩展,而无需自己管理服务器基础架构。
1、无服务的愿景
无服务器是让开发者只需要纯粹地关注业务:
- 不用考虑技术组件,因为后端的技术组件是现成的,可以直接取用,没有采购、版权和选型的烦恼;
- 不需要考虑如何部署,因为部署过程完全是托管到云端的,由云端自动完成;
- 不需要考虑算力,因为有整个数据中心的支撑,算力可以认为是无限的;
- 也不需要操心运维,维护系统持续地平稳运行是云服务商的责任,而不再是开发者的责任。
2、无服务的特点
与单体架构、微服务架构不同,无服务架构天生的一些特点,比如冷启动、 无状态、运行时间有限制等等,决定了它不是一种具有普适性的架构模式。
优点
- 自动扩展和弹性:
无服务器平台会自动处理应用程序的扩展,根据负载的增减自动分配和释放资源。这使得应用程序具有很高的弹性,能够处理不断变化的工作负载。 - 按需计费:
无服务器计算按照实际使用的资源进行计费,这意味着您只需支付您实际消耗的计算资源,无需支付预留的服务器容量。这可以大幅降低成本,尤其是对于不稳定或突发性的工作负载。 - 简化运维:
无服务器架构摆脱了服务器管理的烦恼,开发人员无需关心服务器的配置、维护和扩展。云服务提供商负责这些任务,使开发人员能够更专注于应用程序的逻辑。 - 快速部署: 无服务器平台允许开发人员更快地部署新功能或更新,因为它们省略了服务器配置和部署的复杂性。
- 多语言支持: 无服务器平台通常支持多种编程语言,允许开发人员选择最适合其需求的语言。
- 高可用性和容错性: 云服务提供商通常提供高可用性和容错性,以确保应用程序的可用性。这包括跨多个数据中心的部署和自动备份。
缺点和挑战
- 冷启动时间: 无服务器函数可能会经历冷启动时间,即在首次调用时启动函数实例可能会较慢,这可能会对某些实时性要求较高的应用程序造成延迟。
- 资源限制: 无服务器平台通常对函数的执行时间、内存和存储等方面设置了限制,这可能会影响处理大型数据集或长时间运行的任务。
- 难以维护状态: 无服务器函数通常设计为无状态,这意味着它们不会保留上下文或状态信息。在某些情况下,维护应用程序状态可能会变得复杂。
- 监控和调试: 在无服务器架构中,监控和调试函数可能会更具挑战性,因为它们是分布式的、瞬时的,可能分布在多个位置。
- 不适用于所有用例: 无服务器架构适用于某些用例,但不适用于所有应用程序。它们在处理特定类型的工作负载和应用程序模式时表现最佳。
对一些适合的应用来说,使用无服务架构确实能够降低开发和运维环节的成本,比如不需要交互的离线大规模计算,又比如多数 Web 资讯类网站、小程序、公共 API 服务、移动应用服务端等,都跟无服务架构擅长的短链接、无状态、适合事件驱动的交互形式很契合。
但是对于那些信息管理系统、网络游戏等应用来说,又或者说对所有具有业务逻辑复杂、依赖服务端状态、响应速度要求较高、需要长连接等特征的应用来说,无服务架构至少在目前来看并不是最合适的。
无服务天生“无限算力”的假设,就决定了它必须要按使用量(函数运算的时间和内存)来计费,以控制消耗算力的规模,所以函数不会一直以活动状态常驻服务器,只有请求到了才会开始运行。
这导致了函数不便于依赖服务端状态,也导致了函数会有冷启动时间,响应的性能不可能会太好(目前,无服务的云函数冷启动过程大概是在百毫秒级别,对于 Java 这类启动性能差的应用,甚至能到秒级)。
无服务架构和微服务架构的联系和区别
无服务和“微服务”以及“云原生”时代之间并没有继承替代关系,也不要产生”无服务比微服务更加先进”的错误想法。
软件开发的未来,不会只存在某一种“最先进的”架构风格,而是会有多种具有针对性的架构风格并存。
联系
- 分布式架构: 无服务和微服务都是分布式架构,它们将应用程序拆分为小的可管理的组件,这些组件可以独立部署和扩展。
- 松耦合: 无服务和微服务都鼓励松耦合的设计,使得各个组件可以独立开发、部署和维护。这有助于提高应用程序的可维护性和灵活性。
- 弹性和可伸缩性: 无服务和微服务都支持应用程序的弹性和可伸缩性。它们能够根据负载的变化自动扩展和缩减资源。
- 分布式数据管理: 无服务和微服务应用程序通常需要有效地处理分布式数据管理,包括数据复制、同步和一致性等问题。
区别
- 计算模型: 最大的区别在于计算模型。无服务架构基于事件驱动的函数(Function as a
Service,FaaS),每个函数都是一个独立的、无状态的代码单元,仅在触发事件时执行。微服务架构则是基于独立的、长时间运行的服务,这些服务通常以容器形式运行。 - 管理复杂性:
无服务架构通常更加抽象和简化了基础设施管理,开发人员无需关心服务器的配置和维护。微服务架构需要更多的基础设施管理工作,包括容器编排和管理等。 - 部署: 无服务架构通常具有更快的部署速度,因为它们省略了服务器配置的过程。微服务架构需要更多的时间来设置和维护容器集群。
- 执行时间: 无服务函数通常具有短暂的执行时间限制,通常用于处理短暂的计算任务。微服务可以长时间运行,适合处理长时间运行的任务。
- 资源限制: 无服务平台通常对函数的执行时间、内存和存储等方面设置了限制。微服务可以根据需要配置更多的资源。
无服务架构更加抽象和自动化,适用于处理事件驱动的、瞬时性的任务。微服务架构更适合长时间运行的、复杂的应用程序,但需要更多的基础设施管理。
在某些情况下,这两种架构可以结合使用,以满足不同类型的需求。选择哪种架构取决于应用程序的性质、需求和团队的技能。
总结
云计算是大势所趋,今天信息系统建设的概念和观念,在较长尺度的“明天”都是会转变成适应云端的。 Serverless+API 的这种设计方式,随着云计算的持续发展,将会成为一种主流的软件架构形式,无服务到时候也应该会有更广阔的应用空间。
如果说微服务架构是分布式系统这条路当前所能做到的极致,那无服务架构,也许就是“不分布式”的云端系统这条路的起点。
今天,我们已经能初步看见一些使用无服务的云函数去实现微服务架构的苗头了,所以把无服务作为技术层面的架构,把微服务视为应用层面的架构,这样的组合使用也是完全合理可行的。
软件开发的未来,多种架构风格将会融合互补,“分布式”与“不分布式”的边界将会逐渐模糊,两条路线将会在云端的数据中心交汇。
相关文章:
无服务架构--Serverless
无服务架构 无服务架构(Serverless Architecture)即无服务器架构,也被称为函数即服务(Function as a Service,FaaS),是一种云计算模型,用于构建和部署应用程序,无需关心…...

2023-09-07 LeetCode每日一题(修车的最少时间)
2023-09-07每日一题 一、题目编号 2594. 修车的最少时间二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 ranks ,表示一些机械工的 能力值 。ranksi 是第 i 位机械工的能力值。能力值为 r 的机械工可以在 r * n2 分钟内修好 n 辆车。 同时给你…...

数据挖掘实验-主成分分析与类特征化
数据集&代码https://www.aliyundrive.com/s/ibeJivEcqhm 一.主成分分析 1.实验目的 了解主成分分析的目的,内容以及流程。 掌握主成分分析,能够进行编程实现。 2.实验原理 主成分分析的目的 主成分分析就是把原有的多个指标转化成少数几个代表…...
70. 爬楼梯 (进阶),322. 零钱兑换,279.完全平方数
代码随想录训练营第45天|70. 爬楼梯 (进阶,322. 零钱兑换,279.完全平方数 70.爬楼梯文章思路代码 322.零钱兑换文章思路代码 279.完全平方数文章思路代码 总结 70.爬楼梯 文章 代码随想录|0070.爬楼梯完全背包版本 思路 将楼梯长度视为背…...

Apache Doris 2.0 如何实现导入性能提升 2-8 倍
数据导入吞吐是 OLAP 系统性能的重要衡量标准之一,高效的数据导入能力能够加速数据实时处理和分析的效率。随着 Apache Doris 用户规模的不断扩大, 越来越多用户对数据导入提出更高的要求,这也为 Apache Doris 的数据导入能力带来了更大的挑战…...

RabbitMQ: topic 结构
生产者 package com.qf.mq2302.topic;import com.qf.mq2302.utils.MQUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection;public class Pubisher {public static final String EXCHANGE_NAME"mypubilisher";public static void ma…...

信息系统项目管理教程(第4版):第二章 信息技术及其发展
请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 第二章 信息技术及其发展 2.1信息技术及其发展 信息技术是以微电子学为基础的计算机技术和电信技术的结合而形成的,对声音的、图像的、文字的、数字…...

有哪些适合初学者的编程语言?
C语言 那为什么我还要教你C语言呢?因为我想要让你成为一个更好、更强大的程序员。如果你要变得更好,C语言是一个极佳的选择,其原因有二。首先,C语言缺乏任何现代的安全功能,这意味着你必须更为警惕,时刻了…...

uni-app动态tabBar,根据不同用户展示不同的tabBar
1.uni框架的api实现 因为我们用的是uni-app框架开发,所以在创建项目的时候直接创建uni-ui的项目即可,这个项目模板中自带了uni的一些好用的组件和api。 起初我想着这个效果不难实现,因为官方也有api可以直接使用,所以我最开始尝试…...

手写Spring:第6章-资源加载器解析文件注册对象
文章目录 一、目标:资源加载器解析文件注册对象二、设计:资源加载器解析文件注册对象三、实现:资源加载器解析文件注册对象3.1 工程结构3.2 资源加载器解析文件注册对象类图3.3 类工具类3.4 资源加载接口定义和实现3.4.1 定义资源加载接口3.4…...

Redis 7 第八讲 集群模式(cluster)架构篇
集群架构 Redis 集群架构图 集群定义 Redis 集群是一个提供在多个Redis节点间共享数据的程序集;Redis集群可以支持多个master 应用场景 Redis集群支持多个master,每个master又可以挂载多个slave读写分离支持数据的高可用支持海量数据的读写存储操作集群自带Sentinel的故障…...

【PowerQuery】导入与加载XML
在标准数据格式类型里面,有一类比较特殊的数据类型,就是层次结构数据。层次结构数据和标准的结构型数据方式完全不同,在实际应用过程中使用最为频繁的几种数据类型如下。 XML数据格式Json 数据格式Yaml 数据格式我们将在本节和大家一起分享下XML格式数据集成,下一节和大家分…...
vue 预览视频
1.预览本地文件 1.1 直接给video或者embed的src赋值本地路径 <video :src"videoUrl"></video> // 或者 使用embed标签<embed :src"videoUrl" /> 1.2 读取文件流形式 <input type"file" ref"file" /> <vi…...

4个维度讲透ChatGPT技术原理,揭开ChatGPT神秘技术黑盒!(文末送书)
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
【无标题】@Scheduled 的cron
, :指定多个值。 -:表示一个区间。 / :指定一个值的增加幅度。n/m表示从n开始,每次增加m。 L:是last的缩写,表示最后一天,用在日表示一个月中的最后一天,用在周表示每周最后一天&…...
IP和MAC的作用区别
在 IP 地址的上一行是 link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff,这个被称为 MAC 地址,是一个网卡的物理地址,用十六进制,6 个 byte 表示。 一个网络包要从一个地方传到另一个地方,除了要有确定的地址&…...

python趣味编程-数独游戏
数独游戏是一个用Python编程语言编写的应用程序。该项目包含可以显示实际应用程序的基本功能。该项目可以让修读 IT 相关课程并希望开发简单应用程序的学生受益。这个Python 数独游戏是一个简单的项目,可用于学习tkinter库的实践。这个数独游戏可以提供Python编程的基本编码技…...
MySQL/MariaDB 查询某个 / 多个字段重复数据
创建测试表和数据 # 创建表 create table if not exists t_duplicate (name varchar(255) not null,age int not null );# 插入测试数据 insert into t_duplicate(name, age) values(a, 1); insert into t_duplicate(name, age) values(a, 2);查询单个字段重复 使用 count() …...

【力扣每日一题】2023.9.10 课程表Ⅱ
目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 今天的题目和昨天类似,不过今天要我们求出学习所有课程的先后顺序。 昨天只需要我们求出能否学习完所有课程,因此…...
VSCODE CMAKE C++ 工程调试, C++不以科学计数法输出并控制小数位数
1. VSCODE调试CMAKE工程配置1.1 修改CMakeLists.txt文件1.2. 程序中1.3. launch.json配置1.4 开始调试1.5 注意 2. C设置输出浮点数且保留位数固定 1. VSCODE调试CMAKE工程配置 1.1 修改CMakeLists.txt文件 加这一句 set(CMAKE_BUILD_TYPE "Debug")1.2. 程序中 在…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...