当前位置: 首页 > news >正文

无服务架构--Serverless

无服务架构

无服务架构(Serverless Architecture)即无服务器架构,也被称为函数即服务(Function as a Service,FaaS),是一种云计算模型,用于构建和部署应用程序,无需关心底层服务器的管理。

在无服务器架构中,开发人员编写单独的函数或函数集合,这些函数以事件驱动的方式触发,并在需要时自动扩展,而无需自己管理服务器基础架构。

1、无服务的愿景

无服务器是让开发者只需要纯粹地关注业务:

  1. 不用考虑技术组件,因为后端的技术组件是现成的,可以直接取用,没有采购、版权和选型的烦恼;
  2. 不需要考虑如何部署,因为部署过程完全是托管到云端的,由云端自动完成;
  3. 不需要考虑算力,因为有整个数据中心的支撑,算力可以认为是无限的;
  4. 也不需要操心运维,维护系统持续地平稳运行是云服务商的责任,而不再是开发者的责任。

2、无服务的特点

与单体架构、微服务架构不同,无服务架构天生的一些特点,比如冷启动、 无状态、运行时间有限制等等,决定了它不是一种具有普适性的架构模式。

优点

  1. 自动扩展和弹性:
    无服务器平台会自动处理应用程序的扩展,根据负载的增减自动分配和释放资源。这使得应用程序具有很高的弹性,能够处理不断变化的工作负载。
  2. 按需计费:
    无服务器计算按照实际使用的资源进行计费,这意味着您只需支付您实际消耗的计算资源,无需支付预留的服务器容量。这可以大幅降低成本,尤其是对于不稳定或突发性的工作负载。
  3. 简化运维:
    无服务器架构摆脱了服务器管理的烦恼,开发人员无需关心服务器的配置、维护和扩展。云服务提供商负责这些任务,使开发人员能够更专注于应用程序的逻辑。
  4. 快速部署: 无服务器平台允许开发人员更快地部署新功能或更新,因为它们省略了服务器配置和部署的复杂性。
  5. 多语言支持: 无服务器平台通常支持多种编程语言,允许开发人员选择最适合其需求的语言。
  6. 高可用性和容错性: 云服务提供商通常提供高可用性和容错性,以确保应用程序的可用性。这包括跨多个数据中心的部署和自动备份。

缺点和挑战

  1. 冷启动时间: 无服务器函数可能会经历冷启动时间,即在首次调用时启动函数实例可能会较慢,这可能会对某些实时性要求较高的应用程序造成延迟。
  2. 资源限制: 无服务器平台通常对函数的执行时间、内存和存储等方面设置了限制,这可能会影响处理大型数据集或长时间运行的任务。
  3. 难以维护状态: 无服务器函数通常设计为无状态,这意味着它们不会保留上下文或状态信息。在某些情况下,维护应用程序状态可能会变得复杂。
  4. 监控和调试: 在无服务器架构中,监控和调试函数可能会更具挑战性,因为它们是分布式的、瞬时的,可能分布在多个位置。
  5. 不适用于所有用例: 无服务器架构适用于某些用例,但不适用于所有应用程序。它们在处理特定类型的工作负载和应用程序模式时表现最佳。

对一些适合的应用来说,使用无服务架构确实能够降低开发和运维环节的成本,比如不需要交互的离线大规模计算,又比如多数 Web 资讯类网站、小程序、公共 API 服务、移动应用服务端等,都跟无服务架构擅长的短链接、无状态、适合事件驱动的交互形式很契合。

但是对于那些信息管理系统、网络游戏等应用来说,又或者说对所有具有业务逻辑复杂、依赖服务端状态、响应速度要求较高、需要长连接等特征的应用来说,无服务架构至少在目前来看并不是最合适的。

无服务天生“无限算力”的假设,就决定了它必须要按使用量(函数运算的时间和内存)来计费,以控制消耗算力的规模,所以函数不会一直以活动状态常驻服务器,只有请求到了才会开始运行。

这导致了函数不便于依赖服务端状态,也导致了函数会有冷启动时间,响应的性能不可能会太好(目前,无服务的云函数冷启动过程大概是在百毫秒级别,对于 Java 这类启动性能差的应用,甚至能到秒级)。

无服务架构和微服务架构的联系和区别

无服务和“微服务”以及“云原生”时代之间并没有继承替代关系,也不要产生”无服务比微服务更加先进”的错误想法。

软件开发的未来,不会只存在某一种“最先进的”架构风格,而是会有多种具有针对性的架构风格并存。

联系

  1. 分布式架构: 无服务和微服务都是分布式架构,它们将应用程序拆分为小的可管理的组件,这些组件可以独立部署和扩展。
  2. 松耦合: 无服务和微服务都鼓励松耦合的设计,使得各个组件可以独立开发、部署和维护。这有助于提高应用程序的可维护性和灵活性。
  3. 弹性和可伸缩性: 无服务和微服务都支持应用程序的弹性和可伸缩性。它们能够根据负载的变化自动扩展和缩减资源。
  4. 分布式数据管理: 无服务和微服务应用程序通常需要有效地处理分布式数据管理,包括数据复制、同步和一致性等问题。

区别

  1. 计算模型: 最大的区别在于计算模型。无服务架构基于事件驱动的函数(Function as a
    Service,FaaS),每个函数都是一个独立的、无状态的代码单元,仅在触发事件时执行。微服务架构则是基于独立的、长时间运行的服务,这些服务通常以容器形式运行。
  2. 管理复杂性:
    无服务架构通常更加抽象和简化了基础设施管理,开发人员无需关心服务器的配置和维护。微服务架构需要更多的基础设施管理工作,包括容器编排和管理等。
  3. 部署: 无服务架构通常具有更快的部署速度,因为它们省略了服务器配置的过程。微服务架构需要更多的时间来设置和维护容器集群。
  4. 执行时间: 无服务函数通常具有短暂的执行时间限制,通常用于处理短暂的计算任务。微服务可以长时间运行,适合处理长时间运行的任务。
  5. 资源限制: 无服务平台通常对函数的执行时间、内存和存储等方面设置了限制。微服务可以根据需要配置更多的资源。

无服务架构更加抽象和自动化,适用于处理事件驱动的、瞬时性的任务。微服务架构更适合长时间运行的、复杂的应用程序,但需要更多的基础设施管理。

在某些情况下,这两种架构可以结合使用,以满足不同类型的需求。选择哪种架构取决于应用程序的性质、需求和团队的技能。

总结

云计算是大势所趋,今天信息系统建设的概念和观念,在较长尺度的“明天”都是会转变成适应云端的。 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神秘技术黑盒!(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

【无标题】@Scheduled 的cron

, &#xff1a;指定多个值。 -&#xff1a;表示一个区间。 / &#xff1a;指定一个值的增加幅度。n/m表示从n开始&#xff0c;每次增加m。 L&#xff1a;是last的缩写&#xff0c;表示最后一天&#xff0c;用在日表示一个月中的最后一天&#xff0c;用在周表示每周最后一天&…...

IP和MAC的作用区别

在 IP 地址的上一行是 link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff&#xff0c;这个被称为 MAC 地址&#xff0c;是一个网卡的物理地址&#xff0c;用十六进制&#xff0c;6 个 byte 表示。 一个网络包要从一个地方传到另一个地方&#xff0c;除了要有确定的地址&…...

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 课程表Ⅱ

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 今天的题目和昨天类似&#xff0c;不过今天要我们求出学习所有课程的先后顺序。 昨天只需要我们求出能否学习完所有课程&#xff0c;因此…...

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. 程序中 在…...

Drools规则引擎入门学习记录

业务开发过程中&#xff0c;对于某些判断性的通用规则是基于if-else封装&#xff0c;还是基于策略模式封装&#xff1f;无论以上那种封装出来的方法&#xff0c;只能在单体软件包中共用&#xff0c;且不能无感部署&#xff0c;然而对于业务而言&#xff0c;可能规则改变的比较频…...

肖sir__设计测试用例方法之判定表06_(黑盒测试)

设计测试用例方法之判定表 1、判定表&#xff1a;是一种表达逻辑判断的工具。 2、判定表&#xff1a;包含四部分 1&#xff09;条件桩&#xff08;condition stub&#xff09;:列出问题的 所有条件&#xff08;通常条件次序无关紧要&#xff09;。 2&#xff09;条件项&#x…...

<图像处理> 空间滤波基础

空间滤波基础 图像滤波是一种常见的图像处理技术&#xff0c;用于平滑图像、去除噪音和边缘检测等任务。图像滤波的基本原理是在进行卷积操作时&#xff0c;通过把每个像素的值替换为该像素及其邻域的设定的函数值来修改图像。 预备知识&#xff1a;可分离滤波核、边缘填充。…...

如何在Django中使用django-crontab启动定时任务、关闭任务以及关闭指定任务

安装django-crontab包: pip install django-crontab 在Django项目的settings.py文件中&#xff0c;找到INSTALLED_APPS配置&#xff0c;并添加django_crontab到列表中: INSTALLED_APPS [ ... django_crontab,... ] 在settings.py文件的末尾&#xff0c;添加以下配置以设…...

mysql配置项整理

二、&#xff1a;mysql服务器参数 general 基础配置 datadir/var/lib/mysql #数据文件存放的目录 socket/var/lib/mysql/mysql.sock #mysql.socket表示server和client在同一台服务器&#xff0c;并且使用localhost进行连接&#xff0c;就会使用socket进行连接 pid_file/v…...

【KRouter】一个简单且轻量级的Kotlin Routing框架

【KRouter】一个简单且轻量级的Kotlin Routing框架 KRouter&#xff08;Kotlin-Router&#xff09;是一个简单而轻量级的Kotlin路由框架。 具体来说&#xff0c;KRouter是一个通过URI来发现接口实现类的框架。它的使用方式如下&#xff1a; val homeScreen KRouter.route&l…...

时间管理类书籍阅读笔记

背景 这段时间看了时间管理方面的书籍&#xff0c;大部分和早晨时间利用相关。之所以有了利用早晨时间的想法&#xff0c;是某天下班后&#xff0c;感觉很疲惫&#xff0c;什么都不想做&#xff0c;于是就打了一晚上游戏&#xff0c;然后第二天重复着这样的生活。 突然意识到…...

CSS文字居中对齐学习

CSS使用text-align属性设置文字对齐方式&#xff1b;text-align:center&#xff0c;这样就设置了文字居中对齐&#xff1b; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>css 水平居中</title><style>.box …...

《论文阅读》CARE:通过条件图生成的共情回复因果关系推理 EMNLP 2022

《论文阅读》CARE:通过条件图生成的移情反应因果关系推理 前言简介基础知识TransformerVariational Graph Auto-Encoder 变分图自编码器`邻接矩阵(adjacency matrix)``图神经网络(GNN)``图卷积神经网络(GCN)``自编码器(Auto Encoder)``图自编码器(GAE)``变分图自编码…...

React 开发一个移动端项目(1)

技术栈&#xff1a; 项目搭建&#xff1a;React 官方脚手架 create-react-appreact hooks状态管理&#xff1a;redux 、 redux-thunkUI 组件库&#xff1a;antd-mobileajax请求库&#xff1a;axios路由&#xff1a;react-router-dom 以及 historyCSS 预编译器&#xff1a;sass…...

山东济南seo整站优化费用/外链网

大家好&#xff0c;我是小吉。之前和小伙伴们聊过关于动森如何获得岛屿五星评价的内容&#xff0c;可以说那是相当详尽啊&#xff08;捂脸&#xff09;。总的来说就是需要知道游戏的评分规则&#xff0c;懂得规则无往不利啊。今天我们来聊聊关于5月的鱼类都有哪些&#xff0c;以…...

客户管理系统推荐/谷歌seo引擎优化

在微信公众平台机型服务器配置的时候&#xff0c;下图中的服务必须先在服务端跑起来&#xff0c;后台接口使用java开发。 authenticate控制器接口如下&#xff1a; /*** 验证只接受微信后台的服务请求* 开发者通过检验signature对请求进行校验。* 若确认此次GET请求来…...

做刀模网站/娱乐热搜榜今日排名

衡量模型是否成功是什么使项目成功&#xff1f; 瀑布项目管理告诉我们&#xff0c;这与满足范围&#xff0c;时间和成本目标有关。 这些成功指标是否也适用于敏捷项目&#xff1f; 让我们来看看。 在敏捷项目中&#xff0c;我们一直在学习新信息。 范围可能会随时间变化&am…...

wordpress主题 路径/图片外链生成工具

开发框架要考虑的面太多了&#xff1a;安全、稳定、性能、效率、扩展、整洁&#xff0c;还要经得起实践的考验&#xff0c;从零开发一个可用的框架&#xff0c;是很耗时费神的工作。网上很多开源的框架&#xff0c;为何还要自己开发&#xff1f;我是基于以下两点&#xff1a; 没…...

商用网站开发计划书/沈阳网络优化培训

在ASP.NET中&#xff0c;有很多种保存信息的对象。例如&#xff1a;Application&#xff0c;Session&#xff0c;Cookie&#xff0c;ViewState和Cache等&#xff0c;那么它们有什么区别呢&#xff1f;每一种对象应用的环境是什么&#xff1f; 为了更清楚的了解&#xff0c;我们…...

购物网站排名大全/谷歌chrome官网

Ossim应用入门——在《OSSIM在企业网络管理中的应用》http://chenguang.blog.51cto.com/350944/802007 这篇文章发布之后&#xff0c;很多同行对ossim表示了极大关注纷纷来信咨询如何使用和部署&#xff0c;在接下来的时间里我将总结这套系统的安装和使用的方法给大家分享。1 …...