关于平台服务(例如Logic Apps和Azure Functions)的各种文章和博客中都弹出“无服务器”一词。这两个服务都有独特的要求,因此,比较Logic Apps和Azure Functions很重要。在博客文章“ 无服务器计算:为什么要考虑使用它? ”中,对无服务器进行了很好的解释,并且Logic Apps和Azure Functions都是平台服务,您甚至可以将它们视为无服务器-无需管理基础架构( Microsoft),自动缩放以及根据执行或操作进行计费。如果查看Microsoft在其演示文稿中显示的图表之一,您会注意到Logic App和Azure Functions都是Azure平台的一部分。 您可以通过使用计划来利用Logic Apps和Azure Functions。但是,两者之间存在差异,并且可以根据您的要求使用Logic Apps,Azure Functions或两者。在此博客文章中,我们将简要讨论这两种服务,然后展示如何在云原生集成方案中使用这两种服务,比较Logic Apps和Azure Functions,以及何时使用其中一种。 Azure逻辑应用 您可以使用Logic App服务在Azure中运行业务工作流。Logic App是一个工作流程的逻辑容器,您可以使用触发器和操作对其进行定义。触发器可以实例化工作流程,该工作流程可以包含一个或多个活动(动作)。例如,您可以通过发送HTTP请求来触发工作流,或者每小时安排一个工作流以从公共网站检索数据。 逻辑应用程序运行在Azure区域(数据中心中的VM)的基础结构上,由于将其抽象出来,因此您看不到。通过配置Logic App,一旦定义工作流程并触发了流程,就可以利用该基础架构的一部分(通过Logic App Service间接)。此外,您还需要执行一些触发器/操作并为您完成扩展操作,如果请求数量增加,则Logic App实例也会增加,直到达到特定界限为止(请参阅 Logic App限制)。 Logic App服务如前所述在一组基础结构上运行,它由几个组件组成。 这些组件是:Logic Apps RP –读取工作流程定义,并分解为具有相关性的任务。Logic Apps运行时 –协调分布式计算/工作人员以按需完成任务。连接管理器 –管理连接配置,凭据和令牌刷新。连接器运行时 –通过开放API描述进行API抽象。 Azure功能 Azure Functions是App Services的Azure Web和Mobile套件的一部分, 旨在允许创建有意义的,可重用的小方法,并在服务之间轻松共享。您可以使用各种语言(例如Node.js,C#,F#,Python,PHP甚至Java)来构建Azure函数。其次是脚本语言,Bash和PowerShell,并通过CMD或BAT文件支持命令行。尽管Azure函数可以包含很多代码。它们通常被设计用于单一目的并响应连接服务中的事件。 该 WebJobs SDK运行时,它简化了编写后台处理代码,在微软Azure运行任务的框架,是Azure的功能的基础。此外,功能利用声明性绑定和触发机制,该机制可与多个Azure服务(如存储,Cosmos DB和服务总线)一起使用。在下面,您可以看到Azure Functions组件的图表。 比较逻辑应用程序和Azure功能 在前面的段落中,我们解释了Logic Apps和Azure Functions。现在,我们将比较Logic Apps和Azure Functions,两者如何一起工作。此外,何时应使用Logic Apps或Azure Functions。Logic Apps和Azure Functions之间的差异从开发人员的经验到部署。在以下段落中,我们将解决它们。 开发者经验 “ Azure功能是由事件触发的代码,而Logic Apps是由事件触发的工作流。” 您可以在浏览器和Visual Studio中开发Logic Apps和Azure函数。但是,体验并不相同–在Visual Studio中开发功能要比在Logic Apps中更好–因为工作流设计器与浏览器相比的响应速度较慢。此外,您在使用Logic Apps设计工作流时,会为功能生成代码。此外,您可以将后者视为“无代码”或“低代码”开发。 使用Azure Functions,当您面对复杂的方案或要求时,您将拥有更多的控制权和更少的限制,因为编码为您提供了很大的灵活性,但同时也带来了更多的责任。Logic Apps具有预定义的触发器(托管连接器)和操作。但是,您可以利用变量,内置表达式或对API或函数的调用(稍后在使用Logic Apps和Azure Functions时会更详细)。此外,如果连接器不存在,则可以为Logic Apps构建自定义连接器。对于函数,如果绑定不可用,这将更加困难。 连接性 逻辑应用程序的基本概念之一是连接器–为工作流程带来连接性。连接器提供了触发工作流程和有效负载进入或流出流程的方法。Microsoft建立了 广泛的连接器集, 从Azure服务到流行的SaaS解决方案。此外,Microsoft继续投资开发越来越多的连接器。如果连接器不存在,则可以 通过Azure市场中的自定义连接器模板自己构建连接器。 您在定义工作流程时选择的每个连接器都带有API连接(连接器是API和操作的包装),并且需要安全地存储凭据。选择连接器并完成身份验证后,您将拥有所谓的托管API连接,您将在Logic App所在的资源组中看到该连接。此外,您可以在其他Logic Apps中重用这些连接。 Azure函数没有连接器,但依赖于 触发器以及输入和输出绑定 -例如存储,事件中心,服务总线和Cosmos DB。Azure Functions中的绑定提供了一种以声明方式连接代码的数据的方法–您可以根据选择的绑定指定连接字符串和其他属性来定义它们。此外,您可以利用WebJob SDK中提供的扩展来扩展绑定。与Logic Apps相比,绑定列表受到限制。 安全 在上一段中,我们提到了Logic App连接器的身份验证和Azure Function绑定的连接字符串。每个连接器都有其安全性,具体取决于它公开的API,例如, Dynamic 365连接器 需要一个Dynamics帐户才能登录到Dynamics365。或者,当您使用HTTP时,可以通过HTTP端点访问Logic App。触发您的工作流时,客户端必须 在URL中包含所谓的“ 共享访问签名”,该共享访问签名是通过可以随时重新生成的密钥生成的。此外,可以通过在其前面放置Azure API管理来保护Logic App的安全。另请参阅 BizTalk360博客和中间件星期五的“ 使用Azure API管理保护Azure逻辑应用程序”。 使用Azure Functions,安全性是不同的–您可以使用授权密钥来保护可访问的公共功能(HTTP和WebHook绑定) 。这些键是在创建函数时生成的,可以重新生成。此外,您可以通过Azure Active Directory,Google,Facebook等的常规设置来利用身份验证功能。在HTTP / WebHook触发函数的顶部,选择 轻量级Azure函数代理 或API管理。 异常处理 逻辑应用程序和Azure功能的基本方面之一是异常的处理。在Logic App或Function中处理异常将使它们更加健壮– Logic Apps和Azure Functions之间的异常处理确实有所不同。 Logic Apps异常处理 具有重试,作用域和配置后运行的功能,而Azure功能则可以应用标准try-catch。在这两种情况下,您都必须进行设计和工作才能将其安装到位–它不是靠它本身来实现的。请注意,使用Azure Functions,除了Azure Queue和Blob存储外,您没有像Logic Apps这样的开箱即用的重试功能。有关使用Azure Functions进行错误处理的更多详细信息,请参见 Azure Functions错误处理。 州 由于初始的Azure函数是无状态的,因此从输入中接受数据,对其进行处理,然后处理适当的操作(即一个或多个输出),该函数充当单个软件开关。然而,这与“耐用功能”或微软称之为“Orchestrator的功能。”随着版本改变了 耐用的功能,微软提供了Azure的功能状态和长期运行的能力,通过利用 耐用的任务框架。此外,持久功能允许顺序和并行执行多个功能,支持具有预定义超时的长时间运行的任务,并提供有状态的参与者,而无需外部存储。状态通过存储队列,表和Blob中的所属Azure存储帐户自动存储,这是防灾的。这些长期运行且有状态的过程在Logic Apps中固有可用,除了有状态的参与者模型。 缩放比例 Logic Apps和Azure Functions的使用模型提供了特定的自动缩放功能,即,当负载增加时,Logic App或Function可以随之扩展到特定点。Logic Apps可以根据您使用的连接器进行扩展,例如,文件系统连接器 当前限制为每分钟100个呼叫。 与Logic Apps一样,Azure Functions可以在使用计划下运行-根据传入事件的数量动态添加和删除Azure Functions主机实例。该计划支持自动缩放-通过消费计划的工作方式了解更多信息 。除了使用计划之外,Azure Functions还可以在App Service Plan下运行 ,这意味着可以通过Basic,Standard,Premium或Isolated SKU指定专用VM的数量。 拥有应用服务计划而不是消耗计划取决于您对超出消耗计划的更多处理能力的要求,或者您需要支持例如功能应用程序需要连续运行的场景。 部署方式 通过在Azure中部署资源,您可以想到Azure资源管理器(ARM)模板。这也说明了部署Logic Apps和Azure Functions。两者都内置了对这些模板的支持。您可以利用自动化脚本或使用Visual Studio通过Azure门户自动化Logic App的部署 。 使用Azure Functions,您可以通过来自Bitbucket,Dropbox,Git,GitHub,OneDrive和VSTS等来源的触发器快速设置连续部署(例如,请参见 Azure平台 博客文章上的“利用函数”)。此外,Azure Functions 在预览中具有 部署插槽,允许先部署和测试vNext,然后再将测试的部署插槽与生产中的当前版本交换。 监控方式 您可以使用可用的Azure监视功能(OMS, Application Insights, Log Analytics)和内置功能来监视Logic Apps和Azure Functions 。 Logic Apps提供了运行历史记录功能,使您可以详细检查特定的运行。另外,您可以根据时间段和生成的运行状态过滤此历史记录。此外,Logic Apps与Azure中的Operations Management Suite(OMS)集成-例如,单击一下即可启用与OMS的集成,您可以 在其中搜索跟踪的属性。 该函数获取最新汇率,并将欧元金额转换为美元(内部货币)。Logic App从队列中提取消息,然后将消息成功扩展到另一个队列。失败时,该消息最终将进入死信队列。 何时使用逻辑应用 Logic Apps是“事件驱动”的,这意味着它们基于触发器运行。这是HTTP请求,队列中的消息,在容器中创建的Blob或计划。 Logic Apps的典型方案是:SaaS事件处理基于计时器的处理数据提取(例如,参见以下中间件星期五的 情节)业务流程(云)服务之间的集成基于内容的路由数据转换与充实 何时使用功能 诸如Logic Apps之类的Azure功能是“事件驱动的”,这意味着它们基于关联和已配置的事件或“触发器”运行。例如,可以通过简单的计时器触发Azure功能,例如每24小时运行一次流程,通过文档管理系统中的事件或新文档上载到SharePoint库时。Azure功能还可以响应特定于Azure的事件,例如添加到存储Blob的图像或到达消息队列的通知。 Azure函数的典型方案是:基于计时器的处理Azure服务事件处理SaaS事件处理无服务器Web应用程序体系结构无服务器移动后端实时流处理实时机器人消息传递 摘要 在此博客文章中,我们讨论了Logic Apps和Azure Functions,它们如何在云原生集成方案上进行协作,Logic Apps与Azure Functions以及何时使用它们。Logic Apps和Azure Functions都是“真正的PaaS”或“无服务器”,可为您的云原生解决方案提供价值。 |