掌握Microsoft的P#

通常值得留意招聘广告,因为它们可以作为您可能从未遇到过的新的或流行的开发工具的指针。 微软最近的一则广告来自一个团队,该团队正在研究一种用于构建可靠的分布式应用程序的新语言。

随着Azure等公共云的发展,大规模构建可靠的软件变得越来越重要。 他们迫使我们重新思考关于如何构建和操作软件的许多假设,将我们从单个服务器上的大型单片应用程序世界转移到其中代码由微服务集合构成的微服务,这些微服务在何时何地运行。不需要,我们不需要知道有多少服务正在运行。 可观察性比可管理性更重要。

[ 小心! 每个开发人员都应避免的8个职业陷阱 要成为一名真正的软件开发人员,必须阅读7本书 即使是经验丰富的开发人员,也会犯15个菜鸟错误 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

介绍P

不久前, Microsoft宣布并开源了一种新的类似C的语言,用于基于事件的异步编程。 P原本是C的超集 ,提供了可以编译为C代码的特定于域的结构,然后可以将其用作C应用程序中的组件或库。 基于C的构建可确保P快速而紧凑,非常适合实时系统和IoT设备。

P与其他语言的不同之处在于, 它基于建模概念 ,将计算机添加的工程技术转化为代码。 您可以在P中构建模型,对其进行测试和验证,然后编译该模型,而无需执行将模型转换为应用程序通常需要执行的步骤。 目的是为了使C代码安全,从而减少内存溢出和其他不安全操作的风险。

从本质上讲,P是用于构建异步事件驱动的应用程序的语言,因此它是各种规模的基于微服务的分布式应用程序的理想选择。 它将您的应用程序分为一系列交互的状态机,每个状态机在其他状态机之间以及应用程序外部发送和接收事件。 这类似于流行的Akka和Microsoft自己的Orleans actor / message框架所使用的方法

有趣的是,P具有使用相同的代码来验证您的应用程序和运行该应用程序的能力,通过将其包装在一个封闭的系统空间中进行模型检查,并使用开发团队所谓的“鬼机”来控制状态交互。 在将P转换为可执行的C代码时,这些幻影机不会被编译并被忽略。 在测试过程中,将检查系统的响应能力,以确保每台机器在每种状态下都处理每个事件。 标记了违规行为,必要时,可以使用P代码将特定事件定义为“延迟”,从而延迟处理。 可以检查事件的“活动性”,以使事件不会永远被延迟。

通过在P程序中搜索每个状态机的整个状态空间,可以确信其安全性。 微软一直在使用P重新制作Windows关键驱动程序,从而大大提高了稳定性并提高了抗崩溃性。

从P到P#

并非所有应用程序都需要P和C的裸机方法。Microsoft已采用类似P的语法和方法, 并将它们作为P#引入.Net平台 ,该平台与C#的关系与P对C的关系相同。在.Net任务并行库的顶部,P#使用熟悉的C#构造和熟悉的开发工具,直到安装为NuGet软件包,其安全含义与P相同。 Microsoft提供了一组在您的应用程序中使用P#的工具:一个编译器和一系列调试工具,包括跟踪查看器,竞争检测器和批处理测试器。

您可以使用C#代码中的P#元素将P#代码编写为纯P#应用程序或C#库 。 这两种方法都要求您了解如何构造,设计和实现P#应用程序的状态机。 每个状态机都是独立的,与您的应用程序中的所有其他机同时运行。 它们有一个输入队列,该队列在调用外部方法之前为事件处理程序提供信息,这些事件处理程序管理状态转换。 您可以将每台计算机视为一个单一用途的程序,从其队列中获取事件并使用其内容来处理简单的操作。 操作是非阻塞的,因此来自一台计算机的消息最终会出现在目标计算机的输入队列中。

P#是使用.Net Roslyn编译器的C#扩展,具有新的语言元素。 作为独立系统,Visual Studio不与Visual Studio集成,因此,如果要获取IntelliSense和重构,则应将其用作C#库。 这确实需要更多代码,但是您可以利用Visual Studio。 团队正在致力于全面集成,这将使编写纯P#应用程序变得更加容易。

构建P#应用程序

任何P#程序的关键元素都是事件和机器 。 这些定义了程序接收的消息以及管理它们的状态机。 您可以认为P#机器的工作方式与C#类非常相似,并带有附加的状态定义。 为应用程序中的每台计算机定义初始状态非常重要。 每个状态都有一组动作,这些动作在机器进入和退出特定状态时执行,并且进入和退出动作在单独的代码块中。

例如,入口块可以创建状态机的新实例,并根据需要向其发送事件,并在代码块外部声明事件。 与机器关联的其余代码是事件处理,更改其状态和触发动作。 一切都是异步的,事件从P#事件队列中读取,并通过底层的任务并行库进行管理。

P#用于构建分布式应用程序的真正优势在于它的安全性,它具有测试工具以帮助最大程度地减少错误 。 P#测试器使用P#调度程序来序列化分布式应用程序,以探究代码对调度决策和各种输入的响应,目的是隔离错误。 由于它旨在发现不确定的错误,因此即使是最模糊的问题也可以简化查找过程。 并行测试选项可以增加使用的实例数,并应用不同的概率模型,并使用模糊测试来提高快速发现错误的可能性。

P#是用于构建安全的,基于确定性参与者/消息的分布式应用程序的强大工具。 在C#内部使用它意味着无需学习新技能或使用新的开发工具。 它甚至与Azure的分布式计算平台兼容,该平台在Service Fabric或Kubernetes的.Net Core容器中运行。

更令人兴奋的是,可以想象它与新的KEDA(基于Kubernetes的事件驱动自动缩放)结合使用,因为它的事件模型应允许P#微服务按需生成。 可靠的分布式代码和事件驱动的扩展模型的结合非常引人注目,对于新一代的云原生应用程序,这是非常值得考虑的。

From: https://www.infoworld.com/article/3437416/coming-to-grips-with-p.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值