我们公司文化的一个基本组成部分是为工程师提供自由开发。我们认为,最好的工程师是那些想要获得各种技能并且永不停止学习的人。这意味着找到具有挑战性的问题并建立一个指导环境,让程序员永不停止发展他们的技能和增长他们的专业知识。但自由开发不仅仅意味着有趣的问题和教育机会。它意味着鼓励工程师发挥创造力并承担风险。当我们设计软件时,我们为失败而设计;我们在应用程序中构建的安全网越多,工程师在创新时就会感到越安全。Lineate LunaVision 架构是围绕系统和硬件有时会失败以及人类也会失败的原则构建的。应用程序的每个组件在面对故障时都应该表现得可预测。无服务器架构非常适合这一点。
无服务器提供独立的功能单元,这些功能单元以离散 赌博数据库 实体的形式配置。这种分段式架构是 Lineate 应用程序的首选部署模型,无论是本地托管、部署在虚拟化云上还是使用无服务器。无服务器的主要优势在于它默认强制采用这种设计,并将每个组件的基础设施管理工作转移给云提供商。通过将基础设施管道视为一种实用程序,它使我们能够专注于快速、稳健地构建有价值的功能。
对于习惯于在自己的机器或开发服务器上将所有内容开发为整体式应用程序的开发人员来说,在无服务器上进行开发可能是一个挑战。
我们的实践负责人 Anton Koval 已经在 Lineate 担任了 11 年的关键工程职务,他编写了一份非常详细的 5 章指南,其中既提供了有关整个实施过程中决策影响的提示,也提供了从零到发布的逐步指导。
Anton 确定了无服务器中的几个重要主题,并指导我们如何使用真实世界的假设来实现它们。这不是一个帮助您入门的基本“hello world”程序,而是基于无数真实世界的端到端业务应用程序部署的经验。在本培训指南中,我们涵盖:
Lambda 函数(或 Google Cloud 或 Azure)– 设计和配置决策
Lambda 函数本质上是微服务的逻辑推导,它对应于单独配置的特定应用程序函数。这种方法有利于构建大规模可扩展性,并强制实施 Lineate Luna 架构中标准的一系列最佳实践。但与任何技术一样,部署、初始化和冷启动等方面也存在复杂性——这种复杂性可能会影响实现语言的选择和其他设计决策。
为实际使用配置数据库
可以将数据库直接安装在虚拟化云实例(例如 Amazon EC2)之上,但虚拟化存储的底层波动性通常使这种选择变得糟糕。因此,我们通常建议使用云原生“无服务器”数据存储实现(例如 Amazon RDS)。理论上,云提供商负责管理后台的硬件和软件。但数据库很复杂,正确配置、保护和管理生产无服务器数据库需要知识和细心。使用 API 网关进行有效管理。
将功能和数据公开给 Web 应用程序意味着将其公开给全世界。API 网关使我们能够仔细控制服务周围的身份验证和授权,以及控制和监控其使用情况。我们讨论如何在管理开发沙箱的同时安全地设计一个网关,以使开发人员团队能够灵活地快速迭代并部署新功能而不会互相干扰。
自动化部署和检测
无服务器特别适合持续集成或持续部署。如果新更改通过了自动测试和任何其他已设置的检查,则可以轻松地在生产环境中将其部署到整个系统(并且回滚也同样容易)。我们将介绍在无服务器世界中配置硬件资源、日志、跟踪、并行化和部署自动化的一些最佳实践。
这份文件技术性很强,但基于数十位高级工程师的实际经验(和失误!)。我们希望它能对工程界有所帮助,并欢迎任何反馈或改进。