暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Serverless之AWS Lambda,Azure Functions

AWS Azure技术分享 2019-10-22
1015
什么是无服务器计算?
无服务器计算是一种新的基于云的计算形式,类似于在云提供商上运行的虚拟机和容器。尽管这并不意味着没有服务器,但是底层的云提供商会认真管理服务器的管理,扩展和容量规划。应用程序开发人员只需要关注功能和业务逻辑。


越来越多的开发人员正在将无服务器技术用于下一代应用程序和API。无服务器已被采用比Docker和容器快10倍。本文将提供有关无服务器生态系统以及不同提供程序和框架之间差异的一些信息。

微服务入门
在进行无服务器计算之前,许多企业采用了微服务,即一种面向服务的体系结构(SOA)的形式。微服务使应用程序可以组织为通过API连接在一起的松耦合服务的集合。每个服务都是在其自己的进程/容器/ VM中的一个完全独立的微型应用程序。主要好处是我们从计算机科学101中学到的知识:模块化和关注点分离。微服务可以使复杂的应用程序在大型公司中更易于开发和扩展。可以轻松地将应用程序划分为各个职能团队,每个团队负责一个单独的微服务或一组微服务。可以将代码库保持较小,并为快速迭代开发构建简短的代码库。可以独立于其他微服务扩展应用程序的各个部分。


但是,随着微服务的出现,基础架构和运营工作大大增加。突然之间,需要跟踪更多的连续集成/连续交付管道。需要考虑服务的每个版本或变体的互操作性以及它所依赖的其他服务。有复杂的业务流程来管理更多移动的片段。现在,日志记录上下文分散在许多单独的进程中。集成测试负担更多。

迈向无服务器
无服务器计算将微服务推向了极致。基础架构,业务流程层和部署被删除。仍然有服务器和虚拟机,但是它们由云提供商完全管理。作为应用程序开发人员,您只需编写业务逻辑和功能,然后将其余部分留给AWS或Azure。


无服务器计算还可以降低您的计算成本。尽管大多数云提供商将按小时收费以预订虚拟机,但无服务器计算可以使用基于消耗的定价模型。如果应用未积极使用计算或内存资源,则无需付费。

无服务器计算提供商
云计算厂商正在推动这一领域的许多创新。下面的比较集中在三个方面:构建(支持的语言),部署(易于设置和管理)和触发器(触发功能)。


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 Functions
继AWS在2016年中推出Lambda功能之后,Azure进入了无服务器领域。与AWS相比,Azure支持更多种语言。除了Node.js,C#和Python,Azure还支持F#,PHP,Bash和PowerShell。2017年10月4日,Azure宣布将在旧金山的JavaOne会议期间支持Java。此外,他们的逻辑应用程序和流程使非开发人员能够为业务流程设置自己的逻辑,就像Zapier如何连接多个业务工具一样。


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事件中心和队列。

无服务器挑战
无服务器计算面临的日益严峻的挑战之一就是监视和调试所有这些功能。与微服务体系结构相比,日志记录上下文现在分散在甚至更多的组件上。很多的日志是非常特定于供应商的,与查看标准NGINX或HaProxy日志不同。


此外,很难在同一环境中本地镜像和运行功能以进行调试。至关重要的是,要包含尽可能多的上下文以通过故障场景进行调试,而不仅仅是在本地重现问题。有时您无法在云供应商的环境之外重现问题。

文章转载自AWS Azure技术分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论