类似SpringCloud的vlingo平台是一套事件驱动的微服务工具

栏目: 服务器 · 发布时间: 5年前

内容简介:使用开源(OSS)vlingo/platform实现分布式,并发,被动,事件驱动和微服务架构的简化。与领域驱动设计一起,这是商业战略和现代技术相遇的十字路口。这意味着当您构建有界上下文时,vlingo/platform不会妨碍您。相反,vlingo/platform有助于您的核心业务模型的明确和流畅的语言表达。结合简化的多核支持,您的团队将获得一个功能强大的工具箱,其中包含支持创新的多功能组件。1973年,Carl Hewitt博士及其同事制定了Actor模型。近年来,面向对象的发明者Alan Kay表示,

使用开源(OSS)vlingo/platform实现分布式,并发,被动,事件驱动和微服务架构的简化。与领域驱动设计一起,这是商业战略和现代技术相遇的十字路口。这意味着当您构建有界上下文时,vlingo/platform不会妨碍您。相反,vlingo/platform有助于您的核心业务模型的明确和流畅的语言表达。结合简化的多核支持,您的团队将获得一个功能强大的 工具 箱,其中包含支持创新的多功能组件。

vlingo/actors

1973年,Carl Hewitt博士及其同事制定了Actor模型。近年来,面向对象的发明者Alan Kay表示,Actor模型更多地保留了他认为的重要对象思想。

vlingo/actors工具包是Actor模型的实现。Actor模型背后的思想是强大的。该工具包在设计上是类型安全的,并且服务于特定于领域的接口定义和实现:

类似SpringCloud的vlingo平台是一套事件驱动的微服务工具

工作原理:

  • actor在其邮箱中接收消息,并在线程可用时处理一条消息。
  • 从根本上说,actor是非阻挡的,与外界没有任何可变的状态,甚至与其他actor也没有。
  • actor使用可用的线程,并且您不能同时运行比可用核心更多的线程,例如Runtime.getRuntime().availableProcessors()
  • 计算的基本单位通过actor表达。Actor异步发送和接收消息。
  • 当对象创建其他对象时,actor可以创建其他actor。
  • 每个actor都可以指定它将为其接收的下一条消息展示的行为。使用vlingo / actors,这可以通过实现多个类型安全的域特定接口的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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

思考的技术

思考的技术

[日]大前研一 / 刘锦秀、谢育容 / 中信出版社 / 2010-11 / 32.00元

思路决定出路,没有了思路,也就没有了出路。 在充满危机与冒险的当下,我们缺乏的不是技巧而是揭发事务本质的动力和好奇心,缺少怀疑一切的心态和对固有模式的怠惰。 大前研一凭借他30多年的管理咨询经验,为我们提供了一种全新的可借鉴的思考方式。 企业和个人惟有改变既有的思考模式,放弃对过去成功经验的迷恋,学习有创意的思考方法,方能找到正确的经营思路。一起来看看 《思考的技术》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码