跳到主要内容

Layotto (L8): To be the next layer of OSI layer 7

Layotto Env Pipeline 🌊 Layotto Dev Pipeline 🌊

GoDoc Go Report Card codecov Average time to resolve an issue

Layotto(/leɪˈɒtəʊ/) 是一款使用 Golang 开发的应用运行时, 旨在帮助开发人员快速构建云原生应用,帮助应用和基础设施解耦。它为应用提供了各种分布式能力,比如状态管理,配置管理,事件发布订阅等能力,以简化应用的开发。

Layotto 以开源的 MOSN 为底座,在提供分布式能力以外,提供了 Service Mesh 对于流量的管控能力。

诞生背景

Layotto 希望可以把 Multi-Runtime 跟 Service Mesh 两者的能力结合起来,无论你是使用 MOSN 还是 Envoy 或者其他产品作为 Service Mesh 的数据面,都可以在不增加新的 sidecar 的前提下,使用 Layotto 为这些数据面追加 Runtime 的能力。

例如,通过为 MOSN 添加 Runtime 能力,一个 Layotto 进程可以既作为 istio 的数据面 又提供各种 Runtime API(例如 Configuration API,Pub/Sub API 等)

此外,随着探索实践,我们发现 sidecar 能做的事情远不止于此。 通过引入WebAssembly ,我们正在尝试将 Layotto 做成 FaaS (Function as a service) 的运行时容器 。

如果您对诞生背景感兴趣,可以看下这篇演讲

功能

  • 服务通信
  • 服务治理,例如流量的劫持和观测,服务限流等
  • 作为 istio 的数据面
  • 配置管理
  • 状态管理
  • 事件发布订阅
  • 健康检查、查询运行时元数据
  • 基于 WASM 的多语言编程

工程架构

如下图架构图所示,Layotto 以开源 MOSN 作为底座,在提供了网络层管理能力的同时提供了分布式能力,业务可以通过轻量级的 SDK 直接与 Layotto 进行交互,而无需关注后端的具体的基础设施。

Layotto 提供了多种语言版本的 SDK,SDK 通过 gRPC 与 Layotto 进行交互。

如果您想把应用部署到不同的云平台(例如将阿里云上的应用部署到 AWS),您只需要在 Layotto 提供的 配置文件 里修改配置、指定自己想用的基础设施类型,不需要修改应用的代码就能让应用拥有"跨云部署"能力,大大提高了程序的可移植性。

快速开始

Get started with Layotto

您可以尝试以下 Quickstart demo,体验 Layotto 的功能;或者体验线上实验室

API

APIstatusquick startdesc
Statedemo提供读写 KV 模型存储的数据的能力
Pub/Subdemo提供消息的发布/订阅能力
Service Invokedemo通过 MOSN 进行服务调用
Configdemo提供配置增删改查及订阅的能力
Lockdemo提供 lock/unlock 分布式锁的实现
Sequencerdemo提供获取分布式自增 ID 的能力
Filedemo提供访问文件的能力
BindingTODO提供透传数据的能力

Service Mesh

featurestatusquick startdesc
Istiodemo跟 Istio 集成,作为 Istio 的数据面

可扩展性

featurestatusquick startdesc
API 插件demo为 Layotto 添加您自己的 API

可观测性

featurestatusquick startdesc
SkywalkingdemoLayotto 接入 Skywalking

Actuator

featurestatusquick startdesc
Health Checkdemo查询 Layotto 依赖的各种组件的健康状态
Metadata Querydemo查询 Layotto 或应用对外暴露的元信息

流量控制

featurestatusquick startdesc
TCP Copydemo把 Layotto 收到的 TCP 数据 dump 到本地文件
Flow Controldemo限制访问 Layotto 对外提供的 API

在 Sidecar 中用 WebAssembly (WASM) 写业务逻辑

featurestatusquick startdesc
Go (TinyGo)demo把用 TinyGo 开发的代码编译成 *.wasm 文件跑在 Layotto 上
Rustdemo把用 Rust 开发的代码编译成 *.wasm 文件跑在 Layotto 上
AssemblyScriptdemo把用 AssemblyScript 开发的代码编译成 *.wasm 文件跑在 Layotto 上

作为 Serverless 的运行时,通过 WebAssembly (WASM) 写 FaaS

featurestatusquick startdesc
Go (TinyGo)demo把用 TinyGo 开发的代码编译成 *.wasm 文件跑在 Layotto 上,并且使用 k8s 进行调度。
Rustdemo把用 Rust 开发的代码编译成 *.wasm 文件跑在 Layotto 上,并且使用 k8s 进行调度。
AssemblyScriptdemo把用 AssemblyScript 开发的代码编译成 *.wasm 文件跑在 Layotto 上,并且使用 k8s 进行调度。

Landscapes

  



Layotto enriches the CNCF CLOUD NATIVE Landscape.

社区

平台联系方式
💬 钉钉 (用户群)群号: 31912621 或者扫描下方二维码
💬 钉钉 (社区会议群)群号:41585216 Layotto 在每周五晚 8 点进行社区会议,欢迎所有人

如何贡献

新手攻略:从零开始成为 Layotto 贡献者

从哪下手?看看"新手任务"列表

作为技术同学,你是否有过“想参与某个开源项目的开发、但是不知道从何下手”的感觉? 为了帮助大家更好的参与开源项目,社区会定期发布适合新手的新手开发任务,帮助大家 learning by doing!

文档贡献指南

组件开发指南

Layotto Github Workflow 指南

Layotto 命令行指南

Layotto 贡献者指南

贡献者

感谢所有的贡献者!

设计文档

Actuator 设计文档

Pubsub API 与 Dapr Component 的兼容性

Configuration API with Apollo

RPC 设计文档

分布式锁 API 设计文档

FaaS 设计文档

FAQ

跟 dapr 有什么差异?

dapr 是一款优秀的 Runtime 产品,但它本身缺失了 Service Mesh 的能力,而这部分能力对于实际在生产环境落地是至关重要的,因此我们希望把 Runtime 跟 Service Mesh 两种能力结合在一起,满足更复杂的生产落地需求。