`

Lagom

 
阅读更多

Lagom,一个新的微服务框架

原文地址:http://www.infoq.com/news/2016/03/lagom-microservices-framework 

     Lightbend原名Typesafe,发布了一个新的微服务开源框架,名为Lagom(瑞典俚语:刚刚好的意思)。Lagom基于Akka响应式平台,尤其和Play框架、Akka系列产品、ConductR一起用于系统部署。默认的情况下,Lagom是消息驱动和异步的,并采用分布式命令查询职责分离(Command Query Responsibility Segregation,CQRS)和事件源模式作为主要的实现方式。

     Lightbend公司的CTO 和 Akka项目创始人乔纳斯博纳(Jonas Bonér),把Typesafe改名为Lagom原因之一就是为了强调微服务的“微”概念,“微”强调的是刚刚好的(Lagom)服务粒度,而不只是强调是微服务系统是有多小。  

 

在与InfoQ的Bonér交谈中提到了他对新框架Lagom的看法: 

 

InfoQ:您认为Lagom主要特点是什么? 
Jonas Bonér:我认为Lagom相比较其他的微服务框架独特的地方在于以下几点: 

•大多数的微服务框架专注于使单个微服务的构建简单化,当然这是很容易就能够做到的。Lagom扩展到了微服务的系统级别,而且是大系统,这就需要解决复杂的分布式问题,这是最困难的部分

•默认情况下,Lagom是异步通信,但是如果需要使用其他的协议,例如同步rest请求,通信就需要基于流

•默认情况下数据持久化是基于事件源驱动模式的,但是如果需要支持JPA或NoSQL数据库就需要CQRS模式(是分离命令(改变数据的命令)和查询(读取数据).读写分离。)

•一个由数百个微服务完全集成的开发环境,只需要通过一个命令来管理。它支持跨所有服务的自动热码重装,并与IDE和其他工具的集成。开发环境是基于在生产环境(通过ConductR),这直接支持部署和在扩大生产。

 

InfoQ:Lagom是一种引导型框架吗?  

 

Bonér:  是的,它是一个引导型的框架,我们从Akka项目和Play框架中积累了大量经验,我们的用户也使用我们的平台建立微服项目很多年了,甚至在微服务这个词出现之前他们就已经在用了。 

Lagom是基于反应式原理(如在反应式宣言定义),这点意义很大,集具有响应性(Responsive),具有韧性(Resillient),具有可伸缩性(Elastic)和消息驱动(Message Driven)的系统,称之为反应式系统Reactive Systems。而Lagom的设计就是遵循着反应式系统的理念设计的。Lagom的目标是让用户拿过去就能很容易的做事情,并且提供了护栏的做法,都有设置的默认值。你也可以不去关心Lagom,专心做自己的业务。 

 

InfoQ:更具体地说,Lagom提倡鼓励什么?  

 

Bonér:我们刚刚简单的接触了一下Lagom,现在我来详细说明。使Lagom使用起来很容易的一些关键性的原理主要有: 

 

1.真正的隔离设计是互不共享的,这就意味着Lagom的各个服务都是独立的,松耦合的,流动的(位置是透明的),这也是系统具备任性(resilience)和可伸缩性(elasticity)必然要求。Lagom的微服务是基于: 

◦Akka Actors-隔离的实现是根据无共享架构的Actor模型

◦Akka的集群-一组具有韧性(Resillient),分片,主从复制,可扩展性、负载均衡的单个服务的实例构成了微服务

◦ConductR-为微服务的底层实现和实例的运行管理提供安全隔离

 

2.单一职责:一个经典的法则:一个类只负责一项职责并且要做好它,它在Unix原理中数十年前就被提到过。这也帮助了很多开发者写单一职责的程序,写小而明确职责的类能够与其他的程序完美组合。 如果提到微服务你就会想到它的大小和代码的长短,就太糟糕了。Lagom通过减少模板代码来简化设计,是你更能专注于你自己的开发服务。很容易创建一个明确类型的组合协议,无论通过异步消息还是请求/响应再或者是持续不断的流。

3.谁拥有数据谁服务(谁拥有数据谁担当职责):每个服务不仅需要行为也需要数据,下至数据持久化。 Lagom默认持久化模型是事件源和CQRS,使用Akka项目和Cassandra持久化,这就具有了可扩展性,易于实现主从复制,完全弹性化了。作为一种福利吧,Lagom检查调试也很方便,能够及时下断点重现或检查的事件日志.它也能避免传统的对象关联不匹配的情况,例如JPA和Hibernate等ORM技术。能够自由选择持久化模型微服务的好处之一,特别适合解决手头上的问题,这就是所谓的多语言持久化(Polyglot Persistence)

 

 

4.异步贯彻其中:Lagom的通信和IO默认是异步无阻塞的,这也是响应式系统设计的基本。这就很合乎情理了:通过利用高效的资源产生更大成本效益;它有助于最大限度地减少系统中共享资源竞争,这也是系统实现可扩展性、低延迟、高吞吐量的最大障碍;异步不阻塞对于动态创建韧性松耦合系统也起到很大的作用。基于微服务的系统需要面对并接受现实世界的系统带来的挑战。

分享到:
评论

相关推荐

    lagom用于创建基于微服务系统的框架

    lagom:用于创建基于微服务系统的框架

    Python-lagom用于强化学习算法快速原型构建的轻量级PyTorch架构

    lagom: 用于强化学习算法快速原型构建的轻量级PyTorch架构

    Lagom-简单,直观且完全响应的WHMCS主题 v2.1.1

    提供用于管理Lagom主题颜色和样式的基本工具,而无需任何技术知识。您将有权应用各种样式和配色方案,以根据您的品牌风格定制我们的主题。 菜单管理器​ 从现在开始,您不需要创建复杂的WHMCS钩子来修改Lagom主题...

    activator-lagom-cargotracker, Lagom的货物跟踪器示例应用程序.zip

    activator-lagom-cargotracker, Lagom的货物跟踪器示例应用程序 lagom-cargotracker用Lagom构建的货物跟踪器应用。Reactive的核心概念已经在他的报告反应性Microservices体系结构中引入。 Lagom 是描述的概念的实现...

    lagom:JVM的React式微服务

    Lagom-React式微服务框架拉各姆(Lagom)是瑞典语,意为恰到好处。 微服务是关于创建大小合适的服务,也就是说,它们具有正确的功能和隔离级别,以能够适当地实现可伸缩和有弹性的系统。 Lagom致力于确保您的应用...

    Python库 | lagom-0.7.1.tar.gz

    python库。 资源全名:lagom-0.7.1.tar.gz

    Ansible-lagom-on-kube.zip

    Ansible-lagom-on-kube.zip,本教程描述如何在kubernetes环境中引导生产就绪的lagom微服务集群。,ansible是一个简单而强大的自动化引擎。它用于帮助配置管理、应用程序部署和任务自动化。

    lagom-scala-sbt-standalone:构建Lagom Scala项目以在Lightbend Production Suite(aka ConductR)外部运行的基本示例

    Lagom-scala-sbt-standalone 构建一个Lagom项目(在Scala中)以在Lightbend Production Suite(aka ConductR)之外运行的基本示例。 它最初是从lagom-scala模板( sbt new lagom/lagom-scala.g8 )创建的,具有以下...

    lagom-pb:使用协议缓冲区的Lagom开发中的Scala Developer速度

    lagom-pb = lagom +协议缓冲区 使用协议缓冲区的开发中的Scala Developer速度。 该库通过使用协议缓冲区消息来定义es / cqrs核心组件(如api请求/响应, grpc服务,事件,命令和状态) ,帮助轻松编写lagom微服务...

    lagom.github.io:拉各姆网站

    该项目负责生成Lagom网站。 Lagom网站是一个静态网站,部署到从该项目生成的GitHub页面上。 该项目使用twirl进行模板化,并使用sbt-web处理Web资产,并使用webjar进行依赖。 该文档是从lagom主项目生成的,作为未...

    lagom-sbt-standalone

    lagom-sbt-standalone 构建Lagom项目以在Lightbend Production Suite(aka ConductR)外部运行的基本示例。 它最初是从lagom-java模板( sbt new lagom/lagom-java.g8 )创建的,具有以下更改: 如所述,向每个...

    Lagom-crx插件

    功能(不是那么多,我们喜欢它) º当前时间/日期 º精确的天气 每天新设计 º类型以搜索网络 --- Safari,Firefox和Lagom.io支持的Internet Explorer 用于反馈,支持,情书或仇恨邮件:hello@lagom.io

    lagom:presentation简化的演示生成器

    轻松: lagom create ,您已经创建了一个带有演示文稿的文件夹。 简单性:一张<section> ,一张幻灯片。 可维护: lagom server在浏览器中引导您的演示文稿。 它带有livereloading,可轻松进行编辑。 魔术: ...

    tasktick:使用Lagom创建的示例任务管理器项目

    TaskTick 使用Lagom创建的示例任务管理器项目。 TaskTick太棒了;)博客文章总览该项目与我的博客文章一起发布,用于演示用Lagom生成现代渐进式Web应用程序有多快和容易。 一些功能包括: 使用WebSocket连接连接到...

    lagom-slickreadside-scala

    lagom-slickreadside-scala 该项目旨在演示使用Slick实现Lagom多语种读取侧持久性。范围面向员工的CRUD Apis。设置Mysql创建用户$ mysql -u root -pmysql> CREATE USER 'codingkapoor'@'localhost' IDENTIFIED BY '...

    pact-lagom:消费者驱动的Lagom服务合同测试库

    Pact-Lagom是一个消费者驱动的合同测试库。 建造 由于这是原型,因此需要在本地发布: sbt publishLocal 验证示例 源自储存库,该测试应放在online-auction-scala/item-impl/src/test/scala/...

    lagom::package:python 3的自动装配依赖项注入容器

    Lagom-依赖注入容器 什么 Lagom是一个依赖项注入容器,旨在为您提供“足够”的帮助来构建依赖项。 目的是使几乎所有代码都不知道或不依赖于lagom。 Lagom仅会在最高层参与,以将一切融合在一起。 产品特点 基于类型...

    偶尔「Lagom」-crx插件

    Lagom [lá-gohm] 1.不要太多,不要太少 2.恰到好处 Lagom是您的新标签页的简约主页。 它每天都有一个新的主页。总是很简单。只有最基本的要素 - 日期,时间,天气,类型才能搜索,全部在每日新鲜的设计中。 特点...

    lagom-service-locator-eureka:使用Eureka的Lagom服务定位器

    用Java编写的Eureka服务定位器 **这项工作的灵感来自Consul客户端, 和。 用法 先决条件: ... 您的应用程序需要在src/main/resources/application.conf启用该模块,并为...play.modules.enabled += me.sutii.lagom.eurek

Global site tag (gtag.js) - Google Analytics