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 是一个高度可扩展的开源框架,专为构建现代微服务系统而设计。它源自 Lightbend(前身为 Typesafe),旨在简化 Java 和 Scala 开发者的微服务开发流程。Lagom 的核心理念是提供一种轻量...
Python-lagom是一个轻量级的PyTorch框架,专为强化学习(Reinforcement Learning, RL)算法的快速原型构建而设计。它提供了一套简单易用的接口,使得研究者和开发者能够更加高效地实验和开发各种RL算法。在Python...
**Python库 lagom-0.7.1** Python是一种广泛使用的高级编程语言,以其简洁、易读的语法和丰富的库生态系统而闻名。在Python的世界中,库是代码重用的关键,它们提供了各种功能,帮助开发者快速构建应用程序。"lagom...
提供用于管理Lagom主题颜色和样式的基本工具,而无需任何技术知识。您将有权应用各种样式和配色方案,以根据您的品牌风格定制我们的主题。 菜单管理器 从现在开始,您不需要创建复杂的WHMCS钩子来修改Lagom主题...
activator-lagom-cargotracker, Lagom的货物跟踪器示例应用程序 lagom-cargotracker用Lagom构建的货物跟踪器应用。Reactive的核心概念已经在他的报告反应性Microservices体系结构中引入。 Lagom 是描述的概念的实现...
Lagom-React式微服务框架拉各姆(Lagom)是瑞典语,意为恰到好处。 微服务是关于创建大小合适的服务,也就是说,它们具有正确的功能和隔离级别,以能够适当地实现可伸缩和有弹性的系统。 Lagom致力于确保您的应用...
Ansible-lagom-on-kube.zip,本教程描述如何在kubernetes环境中引导生产就绪的lagom微服务集群。,ansible是一个简单而强大的自动化引擎。它用于帮助配置管理、应用程序部署和任务自动化。
Lagom-scala-sbt-standalone 构建一个Lagom项目(在Scala中)以在Lightbend Production Suite(aka ConductR)之外运行的基本示例。 它最初是从lagom-scala模板( sbt new lagom/lagom-scala.g8 )创建的,具有以下...
lagom-pb = lagom +协议缓冲区 使用协议缓冲区的开发中的Scala Developer速度。 该库通过使用协议缓冲区消息来定义es / cqrs核心组件(如api请求/响应, grpc服务,事件,命令和状态) ,帮助轻松编写lagom微服务...
** Lagom 框架简介 ** Lagom 是一个基于 Scala 和 Java 的微服务开发框架,由 Lightbend 公司(前身为 Typesafe)开发。它为构建分布式、可扩展的应用程序提供了全面的支持,特别适合云计算环境。Lagom 提供了服务...
该项目负责生成Lagom网站。 Lagom网站是一个静态网站,部署到从该项目生成的GitHub页面上。 该项目使用twirl进行模板化,并使用sbt-web处理Web资产,并使用webjar进行依赖。 该文档是从lagom主项目生成的,作为未...
该项目为Java并发理论课程项目,源码设计精良,包含85个文件,涵盖62个Java源文件、16个XML配置文件、6个配置文件以及1个Git忽略文件,旨在通过实践加深对并发理论的理解和应用。
lagom-sbt-standalone 构建Lagom项目以在Lightbend Production Suite(aka ConductR)外部运行的基本示例。 它最初是从lagom-java模板( sbt new lagom/lagom-java.g8 )创建的,具有以下更改: 如所述,向每个...
功能(不是那么多,我们喜欢它) º当前时间/日期 º精确的天气 每天新设计 º类型以搜索网络 --- Safari,Firefox和Lagom.io支持的Internet Explorer 用于反馈,支持,情书或仇恨邮件:hello@lagom.io
轻松: lagom create ,您已经创建了一个带有演示文稿的文件夹。 简单性:一张<section> ,一张幻灯片。 可维护: lagom server在浏览器中引导您的演示文稿。 它带有livereloading,可轻松进行编辑。 魔术: ...
TaskTick 使用Lagom创建的示例任务管理器项目。 TaskTick太棒了;)博客文章总览该项目与我的博客文章一起发布,用于演示用Lagom生成现代渐进式Web应用程序有多快和容易。 一些功能包括: 使用WebSocket连接连接到...
lagom-slickreadside-scala 该项目旨在演示使用Slick实现Lagom多语种读取侧持久性。范围面向员工的CRUD Apis。设置Mysql创建用户$ mysql -u root -pmysql> CREATE USER 'codingkapoor'@'localhost' IDENTIFIED BY '...
Pact-Lagom是一个消费者驱动的合同测试库。 建造 由于这是原型,因此需要在本地发布: sbt publishLocal 验证示例 源自储存库,该测试应放在online-auction-scala/item-impl/src/test/scala/...
Lagom-依赖注入容器 什么 Lagom是一个依赖项注入容器,旨在为您提供“足够”的帮助来构建依赖项。 目的是使几乎所有代码都不知道或不依赖于lagom。 Lagom仅会在最高层参与,以将一切融合在一起。 产品特点 基于类型...
Lagom [lá-gohm] 1.不要太多,不要太少 2.恰到好处 Lagom是您的新标签页的简约主页。 它每天都有一个新的主页。总是很简单。只有最基本的要素 - 日期,时间,天气,类型才能搜索,全部在每日新鲜的设计中。 特点...