使用开源(OSS)vlingo/platform实现分布式,并发,被动,事件驱动和微服务架构的简化。与领域驱动设计一起,这是商业战略和现代技术相遇的十字路口。这意味着当您构建有界上下文时,vlingo/platform不会妨碍您。相反,vlingo/platform有助于您的核心业务模型的明确和流畅的语言表达。结合简化的多核支持,您的团队将获得一个功能强大的工具箱,其中包含支持创新的多功能组件。
vlingo/actors
1973年,Carl Hewitt博士及其同事制定了Actor模型。近年来,面向对象的发明者Alan Kay表示,Actor模型更多地保留了他认为的重要对象思想。
vlingo/actors工具包是Actor模型的实现。Actor模型背后的思想是强大的。该工具包在设计上是类型安全的,并且服务于特定于领域的接口定义和实现:
工作原理:
vlingo/cluster
vlingo / cluster是一个关键组件,位于vlingo / actors之上,支持可伸缩和容错工具和应用程序的开发。构建vlingo /平台的其他工具几乎总是构建在vlingo / cluster之上。此外,您将在群集中实施和部署服务/应用程序。
除了可扩展的容错之外,vlingo / cluster还提供了群集范围的同步属性。这使群集能够在所有节点之间共享实时和变异操作状态。
如果三个节点中的一个丢失,群集仍将保持法定人数并保持健康。但是,如果两个节点丢失且只有一个节点仍处于运行状态,则仲裁将丢失,并且群集将被视为运行状况不佳。在那种情况下,剩余的一个节点将进入空闲状态并等待一个或多个其他节点返回到活动操作。当发生这种情况时,群集将再次构成法定人数并达到健康状态。虽然许多服务/应用程序集群只需要三个节点以实现最佳使用,但集群可以支持远超过三个节点。然而,由于我们平台的性能和效率,您可能很少需要很多节点。由于我们的效率标准,即使是9节点,21节点或49节点集群也可能被认为是相当大的。
vlingo/http
vlingo / http组件支持在vlingo / cluster和vlingo / actors上运行的反应性,可伸缩和弹性HTTP服务器以及RESTful服务。因此,该组件不是独立运行的,而是在基于微服务的Bounded Context中提供非常轻量级和高性能的HTTP支持。
虽然这并不表明您的服务应该主要基于REST,但用户界面甚至事件流的分发基于REST是很常见的。vlingo / http组件可以快速,简单地将您带到那里。只需浏览一下REST请求映射到Java对象即可理解这一点。
只需几行请求映射和目标处理程序源代码,您就可以完全基于DDD泛在语言获得高性能的RESTful服务设计。
action.user.register.method = POST action.user.register.uri = /users action.user.register.to = register(body:sample.user.UserData userData) action.user.contact.method = PATCH action.user.contact.uri = /users/{userId}/contact action.user.contact.to = changeContact(String userId, body:sample.user.ContactData contactData)
代码:
<b>public</b> <b>class</b> UserResource <b>extends</b> ResourceHandler { <b>public</b> <b>void</b> register(<b>final</b> UserData userData) { <b>final</b> User user = User.from( Name.from(userData.nameData.given, userData.nameData.family), Contact.from(userData.contactData.emailAddress, userData.contactData.telephoneNumber)); repository.save(user); completes().with(Response.of(Created, headers(of(Location, userLocation(user.id))), serialized(UserData.from(user)))); } <b>public</b> <b>void</b> changeContact(<b>final</b> String userId, <b>final</b> ContactData contactData) { <b>final</b> User user = repository.userOf(userId); <b>if</b> (user.doesNotExist()) { completes().with(Response.of(NotFound, userLocation(userId))); <b>return</b>; } <b>final</b> User changedUser = user.withContact(<b>new</b> Contact(contactData.emailAddress, contactData.telephoneNumber)); repository.save(changedUser); completes().with(Response.of(Ok, serialized(UserData.from(changedUser)))); } }
vlingo/directory
件支持服务注册和发现。当一个新的Bounded Context(作为微服务实现)启动时,它会将自己注册到vlingo/directory。
因此,其他有界上下文将发现他们必须与之合作的服务。当vlingo/directory在企业周围广播注册详细信息(包括主机和端口)时,会发生这种情况。
vlingo/auth
为vlingo / platform的各种组件提供安全性。
它支持以下身份验证和授权概念:租户,具有Profiles的用户,组,具有权限和约束的角色。也可能由您创建的任何服务/应用程序使用,但您的组织并不要求将其用作安全标准。
点击标题进入Github