Lagom

汲时铭
2023-12-01

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

 类似资料: