这些函数将在每次收到请求时执行,并执行您为它们编写的任何操作(连接到数据库、执行 CRUD 操作或您可以在常规服务器中执行的任何其他操作) 。
无服务器架构的好处在于您忘记了所有关于服务器维护和扩展的事情 。您只有在需要时执行的功能,并且每个功能都会根据需要自动放大和缩小 。
作为客户,您只需为函数执行的次数和每次执行持续的处理时间支付费用 。
如果您想了解更多信息,这里是对无服务器模式的解释 。
许多其他服务
您可能会看到弹性和无服务器服务如何为设置软件基础架构提供非常简单方便的替代方案 。
除了与服务器相关的服务之外,云提供商还提供大量其他解决方案,例如关系和非关系数据库、文件存储服务、缓存服务、身份验证服务、机器学习和数据处理服务、监控和性能分析等等 。一切都托管在云中 。
通过Terraform或 AWS Cloud Formation 等工具,我们甚至可以将基础设施设置为代码 。这意味着我们可以在几分钟内编写一个脚本,在云上设置服务器、数据库以及我们可能需要的任何其他内容 。
从工程的角度来看,这是令人兴奋的,对于我们作为开发人员来说真的很方便 。如今的云计算提供了一套非常完整的解决方案,可以轻松地从微小的小项目适应地球上最大的数字产品 。这就是为什么现在越来越多的软件项目选择将其基础架构托管在云中的原因 。
如前所述,最常用和知名的云提供商是AWS、谷歌云和Azure 。尽管还有其他选择,例如IBM、DigitalOcean和Oracle 。
这些提供商中的大多数都提供相同类型的服务,尽管它们可能有不同的名称 。例如,无服务器函数在 AWS 上称为“lambdas”,在 google 云上称为“云函数” 。
要了解的不同文件夹结构
好的,到目前为止,我们已经了解了架构如何指代基础设施组织和托管 。现在让我们看看一些代码以及架构如何引用文件夹结构和代码模块化 。
一站式文件夹结构
为了说明为什么文件夹结构很重要,让我们构建一个虚拟示例 API 。我们将有一个兔子的模拟数据库,API 将对其执行CRUD操作 。我们将使用 Node 和 Express 构建它 。
这是我们的第一种方法,根本没有文件夹结构 。我们的 repo 将由node modules文件夹、App.js、package-lock.json和package.json文件组成 。

文章插图
在我们的 app.js 文件中,我们将拥有我们的微型服务器、我们的模拟数据库和两个端点:
// App.js const express = require('express'); const app = express() const port = 7070 // Mock DB const db = [ { id: 1, name: 'John' }, { id: 2, name: 'Jane' }, { id: 3, name: 'Joe' }, { id: 4, name: 'Jack' }, { id: 5, name: 'Jill' }, { id: 6, name: 'Jak' }, { id: 7, name: 'Jana' }, { id: 8, name: 'Jan' }, { id: 9, name: 'Jas' }, { id: 10, name: 'Jasmine' }, ] /* Routes */ app.get('/rabbits', (req, res) => { res.json(db) }) app.get('/rabbits/:idx', (req, res) => { res.json(db[req.params.idx]) }) app.listen(port, () => console.log(`??[server]: Server is running at http://localhost:${port}`))如果我们测试端点,我们会发现它们工作得很好:
http://localhost:7070/rabbits # [ # { # "id": 1, # "name": "John" # }, # { # "id": 2, # "name": "Jane" # }, # { # "id": 3, # "name": "Joe" # }, # .... # ] ### http://localhost:7070/rabbits/1 # { # "id": 2, # "name": "Jane" # }那么这有什么问题呢?没什么,实际上,它工作得很好 。只有当代码库变得更大、更复杂并且我们开始向 API 添加新功能时,才会出现问题 。
与我们之前在解释单体架构时所讨论的类似,将所有东西放在一个地方一开始很好也很容易 。但是当事情开始变得更大更复杂时,这是一种令人困惑且难以遵循的方法 。
遵循模块化原则,更好的想法是为我们需要执行的不同职责和操作设置不同的文件夹和文件 。
为了更好地说明这一点,让我们向我们的 API 添加新功能,看看我们如何在层架构的帮助下采用模块化方法 。
图层文件夹结构
分层架构是将关注点和职责划分到不同的文件夹和文件中,并且只允许在某些文件夹和文件之间进行直接通信 。
你的项目应该有多少层,每个层应该有什么名称,以及它应该处理什么动作都是讨论的问题 。因此,让我们看看我认为对于我们的示例来说是一个好的方法 。
推荐阅读
- 事件驱动架构的优点和面临的挑战
- 在云端使用 Redis? 以下是你应该知道的十件事
- 20 个 Python 面试题来挑战你的知识
- 嵌入式开发如何入门?
- Spring Cloud Alibaba-全局配置自定义和支持的配置项
- MinIO OSS服务器的搭建和应用
- 陈萌|陈萌开车接朱小伟回家,介怀陈亚男的存在?称不愿做2婚妻子
- 小叶紫檀|盘点那些招财的翡翠!你有几件?
- 黄山最值得去的五个景点 黄山市旅游景点
- 职场中有效的抱怨是你晋升的阶梯
