微服务是一种软件技术架构,是将一个大型的单个应用或服务拆分成多个微服务,可扩展单个组件而不是整个应用程序堆栈,从而满足服务等级需求。
Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具,是一个 Web 应用程序框架,具有富有表现力、优雅的语法。
它致力于给开发者提供完整的微服务研发体验,通过整合,可以产出一套完整的微服务治理体系,从而让开发者更加专注于业务交付。
Kratos 可以做什么
微服务,通过可独立演进的微服务快速交付生产级功能。
指定 API,API 协议使用 Protobuf 二进制协议来定义 HTTP或gRPC 通信的接口。
组件可插拔,组件的实现遵循提供插件设计概念的 OpenTelemetry 规范。
Kratos UI,完整的服务管理平台 UI,简单配置即可拥有。
设计原则
Kratos,除了为开发者提供强大的开发能力外,还遵循主流的软件设计原则,为开发者提供了极大的便利。
- 简单:不过度设计,代码平实简单;
- 通用:通用业务开发所需要的基础库的功能;
- 高效:提高业务迭代的效率;
- 稳定:基础库可测试性高,覆盖率高,有线上实践安全可靠;
- 健壮:通过良好的基础库设计,减少错用;
- 高性能:性能高,但不特定为了性能做 hack 优化,引入 unsafe ;
- 扩展性:良好的接口设计,来扩展实现,或者通过新增基础库目录来扩展功能;
- 容错性:为失败设计,大量引入对 SRE 的理解,鲁棒性高;
- 工具链:包含大量工具链,比如 cache 代码生成,lint 工具等等;
主要特性
-
服务发现与注册:集成了常见的服务发现组件,如 Consul、Etcd 等,支持服务的自动注册和发现,使微服务之间能够方便地进行通信和协作。
-
配置管理:提供了统一的配置管理功能,支持从本地文件、远程配置中心(如 Nacos)等多种数据源加载配置信息,并且能够实时监听配置的变化,实现配置的动态更新。
-
日志与监控:内置了强大的日志记录功能,支持多种日志格式和输出方式。同时,与 Prometheus、Jaeger 等监控和追踪工具集成良好,方便开发者对微服务的运行状态进行监控和性能分析。
-
HTTP 与 RPC 支持:同时支持 HTTP 和 RPC 两种通信协议,HTTP 协议适用于与前端应用或外部系统进行交互,RPC 协议则用于微服务之间的高效通信,提高了系统的灵活性和可扩展性。
-
熔断器与限流:集成了熔断器和限流组件,如 Hystrix、Golang 的 rate limiter 等,能够防止微服务在高并发或出现故障时出现雪崩效应,保证系统的稳定性和可靠性。
设计哲学
Kratos是一个Go语言实现的微服务框架,说得更准确一点,它更类似于一个使用Go构建微服务的工具箱,开发者可以按照自己的习惯选用或定制其中的组件,来打造自己的微服务。也正是由于这样的原因,Kratos并不绑定于特定的基础设施,不限定于某种注册中心,或数据库ORM等,所以您可以十分轻松地将任意库集成进项目里,与Kratos共同运作。
围绕这样的核心设计理念,我们设计了如下的项目生态:
kratos Kratos框架核心,主要包含了基础的CLI工具,内置的HTTP/gRPC接口生成和服务生命周期管理,提供链路追踪、配置文件、日志、服务发现、监控等组件能力和相关接口定义。
contrib 基于上述核心定义的基础接口,对配置文件、日志、服务发现、监控等服务进行具体实现所形成的一系列插件,可以直接使用它们,也可以参考它们的代码,做您需要的服务的适配,从而集成进kratos项目中来。
aegis 我们将服务可用性相关的算法:如限流、熔断等算法放在了这个独立的项目里,几乎没有外部依赖,它更不依赖Kratos,您可以在直接在任意项目中使用。您也可以轻松将它集成到Kratos中使用,提高服务的可用性。
layout 我们设计的一个默认的项目模板,它包含一个参考了DDD和简洁架构设计的项目结构、Makefile脚本和Dockerfile文件。但这个项目模板不是必需的,您可以任意修改它,或使用自己设计的项目结构,Kratos依然可以正常工作。框架本身不对项目结构做任何假设和限制,您可以按照自己的想法来使用,具有很强的可定制性。
gateway 用Go开发的API Gateway,后续您可以使用它来作为您Kratos微服务的网关,用于微服务API的治理。
应用场景
-
大型互联网应用:适用于构建像 B 站这样的大型互联网应用,能够支持海量用户的高并发访问,处理复杂的业务逻辑,保证系统的稳定性和可靠性。
-
企业级应用:在企业级应用开发中,Kratos 可以帮助企业快速构建微服务架构的应用系统,实现业务的模块化和分布式部署,提高企业应用的开发效率和运维管理水平。
-
云原生应用:随着云原生技术的发展,Kratos 能够很好地适配云原生的应用场景,与容器化技术(如 Docker)、Kubernetes 等云原生平台无缝集成,便于应用的部署和管理。