@ -1,40 +1,36 @@ |
|||||||
# Kratos |
![kratos](img/kratos3.png) |
||||||
|
# Kratos |
||||||
Kratos是bilibili开源的一套Go微服务框架,包含大量微服务相关框架及工具。 |
|
||||||
|
Kratos是bilibili开源的一套Go微服务框架,包含大量微服务相关框架及工具。 |
||||||
### Goals |
|
||||||
|
### Goals |
||||||
我们致力于提供完整的微服务研发体验,整合相关框架及工具后,微服务治理相关部分可对整体业务开发周期无感,从而更加聚焦于业务交付。对每位开发者而言,整套Kratos框架也是不错的学习仓库,可以了解和参考到bilibili在微服务方面的技术积累和经验。 |
|
||||||
|
我们致力于提供完整的微服务研发体验,整合相关框架及工具后,微服务治理相关部分可对整体业务开发周期无感,从而更加聚焦于业务交付。对每位开发者而言,整套Kratos框架也是不错的学习仓库,可以了解和参考到bilibili在微服务方面的技术积累和经验。 |
||||||
### Principles |
|
||||||
|
### Principles |
||||||
* 简单:不过度设计,代码平实简单 |
|
||||||
* 通用:通用业务开发所需要的基础库的功能 |
* 简单:不过度设计,代码平实简单 |
||||||
* 高效:提高业务迭代的效率 |
* 通用:通用业务开发所需要的基础库的功能 |
||||||
* 稳定:基础库可测试性高,覆盖率高,有线上实践安全可靠 |
* 高效:提高业务迭代的效率 |
||||||
* 健壮:通过良好的基础库设计,减少错用 |
* 稳定:基础库可测试性高,覆盖率高,有线上实践安全可靠 |
||||||
* 高性能:性能高,但不特定为了性能做hack优化,引入unsafe |
* 健壮:通过良好的基础库设计,减少错用 |
||||||
* 扩展性:良好的接口设计,来扩展实现,或者通过新增基础库目录来扩展功能 |
* 高性能:性能高,但不特定为了性能做hack优化,引入unsafe |
||||||
* 容错性:为失败设计,大量引入对SRE的理解,鲁棒性高 |
* 扩展性:良好的接口设计,来扩展实现,或者通过新增基础库目录来扩展功能 |
||||||
* 工具链:包含大量工具链,比如cache代码生成,lint工具等等 |
* 容错性:为失败设计,大量引入对SRE的理解,鲁棒性高 |
||||||
|
* 工具链:包含大量工具链,比如cache代码生成,lint工具等等 |
||||||
### Features |
|
||||||
* HTTP Blademaster:核心基于[gin](https://github.com/gin-gonic/gin)进行模块化设计,简单易用、核心足够轻量; |
### Features |
||||||
* GRPC Warden:基于官方gRPC开发,集成[discovery](https://github.com/bilibili/discovery)服务发现,并融合P2C负载均衡; |
* HTTP Blademaster:核心基于[gin](https://github.com/gin-gonic/gin)进行模块化设计,简单易用、核心足够轻量; |
||||||
* Cache:优雅的接口化设计,非常方便的缓存序列化,推荐结合代理模式[overlord](https://github.com/bilibili/overlord); |
* GRPC Warden:基于官方gRPC开发,集成[discovery](https://github.com/bilibili/discovery)服务发现,并融合P2C负载均衡; |
||||||
* Database:集成MySQL/HBase/TiDB,添加熔断保护和统计支持,可快速发现数据层压力; |
* Cache:优雅的接口化设计,非常方便的缓存序列化,推荐结合代理模式[overlord](https://github.com/bilibili/overlord); |
||||||
* Config:方便易用的[paladin sdk](config-paladin.md),可配合远程配置中心,实现配置版本管理和更新; |
* Database:集成MySQL/HBase/TiDB,添加熔断保护和统计支持,可快速发现数据层压力; |
||||||
* Log:类似[zap](https://github.com/uber-go/zap)的field实现高性能日志库,并结合log-agent实现远程日志管理; |
* Config:方便易用的[paladin sdk](config-paladin.md),可配合远程配置中心,实现配置版本管理和更新; |
||||||
* Trace:基于opentracing,集成了全链路trace支持(gRPC/HTTP/MySQL/Redis/Memcached); |
* Log:类似[zap](https://github.com/uber-go/zap)的field实现高性能日志库,并结合log-agent实现远程日志管理; |
||||||
* Kratos Tool:工具链,可快速生成标准项目,或者通过Protobuf生成代码,非常便捷使用gRPC、HTTP、swagger文档; |
* Trace:基于opentracing,集成了全链路trace支持(gRPC/HTTP/MySQL/Redis/Memcached); |
||||||
|
* Kratos Tool:工具链,可快速生成标准项目,或者通过Protobuf生成代码,非常便捷使用gRPC、HTTP、swagger文档; |
||||||
|
|
||||||
<br> |
|
||||||
|
------------- |
||||||
------------- |
|
||||||
|
> 名字来源于:《战神》游戏以希腊神话为背景,讲述由凡人成为战神的奎托斯(Kratos)成为战神并展开弑神屠杀的冒险历程。 |
||||||
> 名字来源于:《战神》游戏以希腊神话为背景,讲述由凡人成为战神的奎托斯(Kratos)成为战神并展开弑神屠杀的冒险历程。 |
|
||||||
|
|
||||||
------------- |
|
||||||
|
|
||||||
[文档目录树](summary.md) |
|
@ -1,8 +1,6 @@ |
|||||||
# Summary |
|
||||||
|
|
||||||
* [介绍](README.md) |
* [介绍](README.md) |
||||||
* [快速开始](quickstart.md) |
* [快速开始 - 项目初始化](quickstart.md) |
||||||
* [案例](https://github.com/go-kratos/kratos-demo) |
* [FAQ](FAQ.md) |
||||||
* [http blademaster](blademaster.md) |
* [http blademaster](blademaster.md) |
||||||
* [bm quickstart](blademaster-quickstart.md) |
* [bm quickstart](blademaster-quickstart.md) |
||||||
* [bm module](blademaster-mod.md) |
* [bm module](blademaster-mod.md) |
@ -0,0 +1,42 @@ |
|||||||
|
# 开始使用 |
||||||
|
|
||||||
|
## 配置 |
||||||
|
|
||||||
|
进入项目中的configs目录,mysql.toml,我们可以看到: |
||||||
|
|
||||||
|
```toml |
||||||
|
[demo] |
||||||
|
addr = "127.0.0.1:3306" |
||||||
|
dsn = "{user}:{password}@tcp(127.0.0.1:3306)/{database}?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true&loc=Local&charset=utf8mb4,utf8" |
||||||
|
readDSN = ["{user}:{password}@tcp(127.0.0.2:3306)/{database}?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true&loc=Local&charset=utf8mb4,utf8","{user}:{password}@tcp(127.0.0.3:3306)/{database}?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true&loc=Local&charset=utf8,utf8mb4"] |
||||||
|
active = 20 |
||||||
|
idle = 10 |
||||||
|
idleTimeout ="4h" |
||||||
|
queryTimeout = "200ms" |
||||||
|
execTimeout = "300ms" |
||||||
|
tranTimeout = "400ms" |
||||||
|
``` |
||||||
|
|
||||||
|
在该配置文件中我们可以配置mysql的读和写的dsn、连接地址addr、连接池的闲置连接数idle、最大连接数active以及各类超时。 |
||||||
|
|
||||||
|
如果配置了readDSN,在进行读操作的时候会优先使用readDSN的连接。 |
||||||
|
|
||||||
|
## 初始化 |
||||||
|
|
||||||
|
进入项目的internal/dao目录,打开db.go,其中: |
||||||
|
|
||||||
|
```go |
||||||
|
var cfg struct { |
||||||
|
Client *sql.Config |
||||||
|
} |
||||||
|
checkErr(paladin.Get("db.toml").UnmarshalTOML(&dc)) |
||||||
|
``` |
||||||
|
使用paladin配置管理工具将上文中的db.toml中的配置解析为我们需要使用db的相关配置。 |
||||||
|
|
||||||
|
# TODO:补充常用方法 |
||||||
|
|
||||||
|
# 扩展阅读 |
||||||
|
|
||||||
|
[tidb模块说明](database-tidb.md) |
||||||
|
[hbase模块说明](database-hbase.md) |
||||||
|
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 661 KiB After Width: | Height: | Size: 661 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
@ -0,0 +1,30 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="en"> |
||||||
|
<head> |
||||||
|
<meta charset="UTF-8"> |
||||||
|
<title>Document</title> |
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> |
||||||
|
<meta name="description" content="Description"> |
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> |
||||||
|
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify/lib/themes/vue.css"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<div id="app"></div> |
||||||
|
<script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script> |
||||||
|
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js"></script> |
||||||
|
<script src="//cdn.jsdelivr.net/npm/docsify-edit-on-github"></script> |
||||||
|
<script> |
||||||
|
window.$docsify = { |
||||||
|
loadSidebar: true, |
||||||
|
auto2top: true, |
||||||
|
autoHeader: true, |
||||||
|
name: 'go-kratos/kratos', |
||||||
|
repo: 'https://github.com/go-kratos/kratos', |
||||||
|
search: 'auto', |
||||||
|
plugins: [ |
||||||
|
EditOnGithubPlugin.create('https://github.com/go-kratos/kratos/blob/master/docs/') |
||||||
|
] |
||||||
|
} |
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
@ -1,4 +1,4 @@ |
|||||||
## testing/lich 运行环境构建 |
## testing/lich 运行环境构建 |
||||||
基于 docker-compose 实现跨平台跨语言环境的容器依赖管理方案,以解决运行ut场景下的 (mysql, redis, mc)容器依赖问题。 |
基于 docker-compose 实现跨平台跨语言环境的容器依赖管理方案,以解决运行ut场景下的 (mysql, redis, mc)容器依赖问题。 |
||||||
|
|
||||||
使用说明参见:https://github.com/go-kratos/kratos/tree/master/tool/testcli/README.md |
使用说明参见:https://go-kratos.github.io/kratos/#/ut |