Layotto (L8): To be the next layer of OSI layer 7
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
API | status | quick start | desc |
---|---|---|---|
State | ✅ | demo | 提供读写 KV 模型存储的数据的能力 |
Pub/Sub | ✅ | demo | 提供消息的发布/订阅能力 |
Service Invoke | ✅ | demo | 通过 MOSN 进行服务调用 |
Config | ✅ | demo | 提供配置增删改查及订阅的能力 |
Lock | ✅ | demo | 提供 lock/unlock 分布式锁的实现 |
Sequencer | ✅ | demo | 提供获取分布式自增 ID 的能力 |
File | ✅ | demo | 提供访问文件的能力 |
Binding | ✅ | TODO | 提供透传数据的能力 |
Service Mesh
feature | status | quick start | desc |
---|---|---|---|
Istio | ✅ | demo | 跟 Istio 集成,作为 Istio 的数据面 |
可扩展性
feature | status | quick start | desc |
---|---|---|---|
API 插件 | ✅ | demo | 为 Layotto 添加您自己的 API |
可观测性
feature | status | quick start | desc |
---|---|---|---|
Skywalking | ✅ | demo | Layotto 接入 Skywalking |
Actuator
feature | status | quick start | desc |
---|---|---|---|
Health Check | ✅ | demo | 查询 Layotto 依 赖的各种组件的健康状态 |
Metadata Query | ✅ | demo | 查询 Layotto 或应用对外暴露的元信息 |
流量控制
feature | status | quick start | desc |
---|---|---|---|
TCP Copy | ✅ | demo | 把 Layotto 收到的 TCP 数据 dump 到本地文件 |
Flow Control | ✅ | demo | 限制访问 Layotto 对外提供的 API |
在 Sidecar 中用 WebAssembly (WASM) 写业务逻辑
feature | status | quick start | desc |
---|---|---|---|
Go (TinyGo) | ✅ | demo | 把用 TinyGo 开发的代码编译成 *.wasm 文件跑在 Layotto 上 |
Rust | ✅ | demo | 把用 Rust 开发的代码编译成 *.wasm 文件跑在 Layotto 上 |
AssemblyScript | ✅ | demo | 把用 AssemblyScript 开发的代码编译成 *.wasm 文件跑在 Layotto 上 |
作为 Serverless 的运行时,通过 WebAssembly (WASM) 写 FaaS
feature | status | quick start | desc |
---|---|---|---|
Go (TinyGo) | ✅ | demo | 把用 TinyGo 开发的代码编译成 *.wasm 文件跑在 Layotto 上,并且使用 k8s 进行调度。 |
Rust | ✅ | demo | 把用 Rust 开发的代码编译成 *.wasm 文件跑在 Layotto 上,并且使用 k8s 进行调度。 |
AssemblyScript | ✅ | demo | 把用 AssemblyScript 开发的代码编译成 *.wasm 文件跑在 Layotto 上,并且使用 k8s 进行调度。 |
Landscapes
Layotto enriches the CNCF CLOUD NATIVE Landscape.
社区
平台 | 联系方式 |
---|---|
💬 钉钉 (用户群) | 群号: 31912621 或者扫描下方二维码 |
💬 钉钉 (社区会议群) | 群号:41585216 Layotto 在每周五晚 8 点进行社区会议,欢迎所有人 |
如何贡献
作为技术同学,你是否有过“想参与某个开源项目的开发、但是不知道从何下手”的感觉? 为了帮助大家更好的参与开源项目,社区会定期发布适合新手的新手开发任务,帮助大家 learning by doing!
贡献者
感谢所有的贡献者!
设计文档
Pubsub API 与 Dapr Component 的兼容性
FAQ
跟 dapr 有什么差异?
dapr 是一款优秀的 Runtime 产品,但它本身缺失了 Service Mesh 的能力,而这部分能力对于实际在生产环境落地是至关重要的,因此我们希望把 Runtime 跟 Service Mesh 两种能力结合在一起,满足更复杂的生产落地需求。