10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

Lagom:一个新的微服务框架

  • 2016-03-16
  • 本文字数:2031 字

    阅读完需:约 7 分钟

Lightbend (最近由 Typesafe 改名而来),是 Akka 背后的公司,最近发布了一款开源的微服务框架, Lagom (在瑞典语中,“刚刚好的”意思),它构建在 Reactive 平台之上。尤其是使用了 Play 框架和 Akka 家族产品,并添加了 ConductR 用于部署。默认情况下,Lagom 是消息驱动和异步的,使用分布式 CQRS 持久化模式,并将事件溯源(event sourcing)作为主要实现。

按照 Jonas Bonér (他是 Lightbend 的 CTO 和 Akka 的创建者)的说法,将其命名为 Lagom 的原因在于移除微服务对于“微”(也就是规模)的强调,它的关注点在于正确规模的服务,而不仅仅是小型的服务。

在与 InfoQ 的一次交流中,Bonér 分享了他对这个新框架的观点。

InfoQ:你认为 Lagom 的主要特性是什么呢?

Bonér:我认为 Lagom 与其他微服务框架相比,与众不同的特性包括:

  • 目前,大多数已有的微服务框架关注于简化单个微服务的构建——这是比较容易的一部分内容。Lagom 将其扩展到了 _ 微服务所构成的系统 _,这是大型的系统——也是较为困难的一部分内容,因为在这里我们会面临到分布式系统的复杂性。
  • 通信默认是异步的——基于消息和流——但是,如果需要的话,也考虑到了使用其他的方案,如同步的 REST。
  • 持久化默认是基于事件的——使用事件溯源和 CQRS——但是,如果需要的话,也支持 JPA 和 NoSQL 这些技术。
  • 完整的集成开发环境,通过这个环境,用一条命令就能管理上百的微服务。在整个服务中,支持自动化地代码热重载,并且能够与 IDE 以及其他工具进行集成。开发环境是基于生产环境(通过使用 ConductR)的,因此支持直接在生产环境下部署和扩展。

InfoQ:你是否将 Lagom 描述为带有一定倾向性的框架?

Bonér:是的,它具有一定的倾向性。我们在构建 Akka 和 Play 框架的过程中学到了很多知识,并且看到很多客户使用我们的平台来构建微服务——他们采取这种做法已经有很多年了,甚至比微服务这个词出现地还要早。

Lagom 是基于 Reactive 理念的(这种理念定义在 Reactive 宣言之中)。它有很多特定的含义并且指导了 Lagom 的设计,其目标在于使直接做“正确的事情”变得更加容易,并为此提供了保护措施,也就是好的默认实现。但是,如果你有合理的理由并且明白自己在做什么的话,也是允许对其进行更改的。

InfoQ:更具体来讲,Lagom 鼓励的做法是什么?

Bonér:我在上面进行了简单地介绍,接下来详细阐述一下。Lagom 倡导一些核心的原则,并使它们更易于实现,这些原则如下所示:

  • 通过非共享的设计,实现真正的隔离:这意味着 Lagom 中的服务都是自我管理、松耦合以及位置可变的(对位置透明)——对于可恢复性和弹性来讲,这都是必要的需求。在 Lagom 中,微服务是基于如下技术构建的:
    • Akka Actors:基于 Actor 模型实现了非共享架构(share nothing architecture),从而提供了隔离性。
    • Akka Cluster:微服务系统是由一组独立且互相隔离的服务所组成的,Akka Cluster 为这些服务提供了可恢复性、分区、复制、可扩展性以及负载均衡。
    • ConductR:从最底层提供了隔离性,为微服务实例实现运行时管理。
  • 职责单一:在 Unix 哲学中,有一条古老的原则:“所编写程序要只做一件事,并将其做好”,这条原则帮助很多开发人员编写的程序符合如下的特点:只有一项目标、很小但是具备定义良好的责任并且能够很容易地与其他小程序进行组合。这是很明智的,在这个更加关注微服务的时代,它会比以往更加重要。这其实与规模大小没有什么关系。微服务这个词其实很糟糕,因为它会让我们关注规模大小和代码行数。通过移除大多数的样板式代码,Lagom 会试图简化设计,能够让我们关注于服务的本质,同时创建明晰的协议也会变得很容易,不管这些协议是通过异步消息、请求 / 响应还是通过持续的流来进行组合的。
  • 服务持有其数据::每个服务不仅要有行为,还要持有它的数据,服务会一直延伸到持久层。在 Lagom 中,默认的持久化模型使用的是事件溯源和 CQRS——使用 Akka Persistence 和 Cassandra——它具有很强的可扩展性、易于复制和保持完全的弹性。另外,它的审计和调试也很棒,能够在任意时间点及时地重放和探查事件日志。它还避免了传统的对象 - 关系阻抗不匹配,过去我们都是使用像 JPA 和 Hibernate 这样的 ORM 技术来摆脱它所带来的困扰。也就是说,使用微服务的一个好处就是服务可以根据所要解决的问题自由选择最合适的持久化模型,也就是所谓的 Polyglot Persistence。
  • 始终保持异步:在 Lagom 中,通信和 IO 默认都是异步和无阻塞的,这也是 Reactive 系统设计的基石。它的好处在于:通过更高效地使用资源,这种方式更加划算;它有助于最小化系统中对共享资源的竞争(拥挤)——在实现可扩展性、低延迟以及高吞吐量方面,这通常是最大的负担所在;它有助于创建更加松耦合的系统,从而实现动态性、可用性和弹性。基于微服务的系统要拥抱这样的现实,那就是要能够应对如今现实世界的挑战。

Lagom 第一个针对 Java 的 MVP 版本可以在 GitHub 上获取,Scala 版本将会稍后推出。

查看英文原文: Lagom, a New Microservices Framework

2016-03-16 19:0039046

评论

发布
暂无评论
发现更多内容

武汉链(基于ETH)BSN官方DDC链上数据解析

BSN研习社

区块链

当科学家决定搞点“花里胡哨”的东西

图灵教育

你的数据是如何泄露的?企业和个人应该这样做……

火绒安全

安全漏洞 数据泄露 黑客攻击

袋鼠云数栈基于CBO在Spark SQL优化上的探索

袋鼠云数栈

阿里内部流出的绝密文档JDK源码学习笔记(2022版)限时分享

Java工程师

Java 源码 jdk

DTMO直播预告|Taier的Web前端架构解析

袋鼠云数栈

走好数据中台最后一公里,为什么说数据服务API是数据中台的标配?

袋鼠云数栈

2022年了,你还不会手撕轮播图?

知心宝贝

JavaScript 算法 前端 可视化 签约计划第三季

2022-08微软漏洞通告

火绒安全

microsoft 终端安全 安全漏洞

Apache APISIX 在微软云 ARM 和 x86 服务器上的性能测试对比

API7.ai 技术团队

API网关 APISIX 微软云

招生报名小程序开发笔记二:功能需求设计

CC同学

元宇宙|高阶音频处理能力,让声音「声临其境」

融云 RongCloud

音视频技术

基于SpringBoot的OnlineMusicPlayer项目

bug郭

签约计划第三季 8月月更

PHP 项目对接视频号原来如此简单,小白也能轻松完成【带附件】

CRMEB

招生报名小程序开发笔记一:开发背景和技术方案的选型确定

CC同学

编译器优化:何为SLP矢量化

华为云开发者联盟

开发 编译器 SLP

实时开发平台建设实践,深入释放实时数据价值丨04期直播回顾

袋鼠云数栈

IDC:阿里云位居2021年中国关系型数据库市场第一

Lily

如何读取redis的手机号验证码数据,实现自动化登录测试

Liam

程序员 测试 自动化测试 测试开发 测试自动化

一张图,理清微服务架构路线(收藏)

C++后台开发

微服务 微服务架构 Linux服务器开发 C/C++后台开发 C/C++开发

【接入指南 之 云云接入】快速接入HONOR Connect平台(上)

荣耀开发者服务平台

IoT 新手指南 万物互联 荣耀 honor

招生报名小程序开发笔记三:数据库设计

CC同学

金融信创爆发年!袋鼠云数栈DTinsight全线产品通过信通院信创专项测试

袋鼠云数栈

一步一图带你深入剖析 JDK NIO ByteBuffer 在不同字节序下的设计与实现

bin的技术小屋

网络编程 Netty nio Java Concurrency java nio

开源一夏 | jQuery scroll() 滚动加载列表 获取腾讯云图片像素信息

六月的雨在InfoQ

开源 COS ​jQuery 8月月更

离线数仓建设,企业大数据的业务驱动与技术实现丨03期直播回顾

袋鼠云数栈

直播预告 | Authing 如何打造云原生 SaaS 产品架构?

Authing

云图说丨初识云速建站服务

华为云开发者联盟

云计算 网站 华为云 搭建网站

在小程序中SVG的打开方式

Geek_99967b

小程序 SVG

实时云渲染——让元宇宙从科幻走入现实

Finovy Cloud

云渲染 GPU渲染

黄东旭,TiDB的灵魂骑手,和他的叛逆“问答”

B Impact

Lagom:一个新的微服务框架_语言 & 开发_Jan Stenberg_InfoQ精选文章