越来越多的开发人员正在将无服务器技术用于下一代应用程序和API。无服务器已被采用比Docker和容器快10倍。本文将提供有关无服务器生态系统以及不同提供程序和框架之间差异的一些信息。
但是,随着微服务的出现,基础架构和运营工作大大增加。突然之间,需要跟踪更多的连续集成/连续交付管道。需要考虑服务的每个版本或变体的互操作性以及它所依赖的其他服务。有复杂的业务流程来管理更多移动的片段。现在,日志记录上下文分散在许多单独的进程中。集成测试负担更多。
无服务器计算还可以降低您的计算成本。尽管大多数云提供商将按小时收费以预订虚拟机,但无服务器计算可以使用基于消耗的定价模型。如果应用未积极使用计算或内存资源,则无需付费。
AWS Lambda
AWS lambda是2014年推出的首批无服务器计算产品之一。
AWS Lambda本机支持多种语言,包括Node.js,Python,Java和C#(.NET Core)。通过从AWS Lambda沙箱中允许的一种受支持语言生成子进程,可以支持其他语言。AWS沙盒隔离不依赖任何允许这种灵活性的语言构造。
可以使用AWS的嵌入式编辑器在线完成开发。但是,一旦需要添加代码才能运行的依赖关系,就需要在本地计算机上进行开发并上载包含代码和任何依赖关系的捆绑软件。如果您开发Node函数,则AWS Lambda将不会运行npm install。部署需要创建和上传部署程序包,以将代码和依赖项捆绑在一起。
AWS将AWS Lambda定位在AWS的前端和中心位置,而不仅仅是带有大量AWS服务的附加产品,这些服务可以用作一键式触发器,从而为使用Lambda提供了很大的灵活性。如果您正在开发API,可以使用非常流行的AWS API Gateway触发器。通过API Gateway,您可以将RESTful API端点(例如GET / items / {id})的HTTP请求映射到AWS Lambda函数getItem(event,context,callback){}。在REST API之外,AWS为事件流,DynamoDB或S3中的更新,甚至从Alexa技能应用触发的事件触发,提供了从Amazon Kinesis(从类似到Kafka)的所有内容的触发。实际上,AWS正在将AWS Lambda视为开发新Alexa技能的主要方法。
Azure提供了类似于AWS的在线编辑器。但是,Azure的编辑器是基于Visual Studio Online构建的。与AWS和Google不同,Azure提供了围绕部署的更多基础结构。您可以从Visual Studio Team Services,Bitbucket和Github中的源设置持续构建和部署部署。
在结构上,Azure Functions与AWS Lambda完全不同,因为Azure Functions的许多基础结构来自Azure App Service和App Service Plan。Azure函数在逻辑上分为一个称为应用程序服务的应用程序容器或环境。应用程序服务中的所有Azure功能共享相同的资源,例如计算或内存。这也使得能够部署应用程序而不是单个功能。您可以将Azure功能视为AWS Lambda与更传统的Azure Web Apps / AWS Elastic Beanstalk之类的环境之间的混合。
与AWS不同,更多的HTTP触发功能是在Azure Functions中本地构建的,而无需设置单独的API网关。其中大部分与Azure在App Service容器下的逻辑功能分组有关。Azure支持各种其他触发器。此类触发器可能包括Azure Blob存储,Azure事件中心和队列。
此外,很难在同一环境中本地镜像和运行功能以进行调试。至关重要的是,要包含尽可能多的上下文以通过故障场景进行调试,而不仅仅是在本地重现问题。有时您无法在云供应商的环境之外重现问题。




