@ -1,40 +1,36 @@ |
||||
# Kratos |
||||
|
||||
Kratos是bilibili开源的一套Go微服务框架,包含大量微服务相关框架及工具。 |
||||
|
||||
### Goals |
||||
|
||||
我们致力于提供完整的微服务研发体验,整合相关框架及工具后,微服务治理相关部分可对整体业务开发周期无感,从而更加聚焦于业务交付。对每位开发者而言,整套Kratos框架也是不错的学习仓库,可以了解和参考到bilibili在微服务方面的技术积累和经验。 |
||||
|
||||
### Principles |
||||
|
||||
* 简单:不过度设计,代码平实简单 |
||||
* 通用:通用业务开发所需要的基础库的功能 |
||||
* 高效:提高业务迭代的效率 |
||||
* 稳定:基础库可测试性高,覆盖率高,有线上实践安全可靠 |
||||
* 健壮:通过良好的基础库设计,减少错用 |
||||
* 高性能:性能高,但不特定为了性能做hack优化,引入unsafe |
||||
* 扩展性:良好的接口设计,来扩展实现,或者通过新增基础库目录来扩展功能 |
||||
* 容错性:为失败设计,大量引入对SRE的理解,鲁棒性高 |
||||
* 工具链:包含大量工具链,比如cache代码生成,lint工具等等 |
||||
|
||||
### Features |
||||
* HTTP Blademaster:核心基于[gin](https://github.com/gin-gonic/gin)进行模块化设计,简单易用、核心足够轻量; |
||||
* GRPC Warden:基于官方gRPC开发,集成[discovery](https://github.com/bilibili/discovery)服务发现,并融合P2C负载均衡; |
||||
* Cache:优雅的接口化设计,非常方便的缓存序列化,推荐结合代理模式[overlord](https://github.com/bilibili/overlord); |
||||
* Database:集成MySQL/HBase/TiDB,添加熔断保护和统计支持,可快速发现数据层压力; |
||||
* Config:方便易用的[paladin sdk](config-paladin.md),可配合远程配置中心,实现配置版本管理和更新; |
||||
* Log:类似[zap](https://github.com/uber-go/zap)的field实现高性能日志库,并结合log-agent实现远程日志管理; |
||||
* Trace:基于opentracing,集成了全链路trace支持(gRPC/HTTP/MySQL/Redis/Memcached); |
||||
* Kratos Tool:工具链,可快速生成标准项目,或者通过Protobuf生成代码,非常便捷使用gRPC、HTTP、swagger文档; |
||||
|
||||
|
||||
<br> |
||||
|
||||
------------- |
||||
|
||||
> 名字来源于:《战神》游戏以希腊神话为背景,讲述由凡人成为战神的奎托斯(Kratos)成为战神并展开弑神屠杀的冒险历程。 |
||||
|
||||
------------- |
||||
|
||||
[文档目录树](summary.md) |
||||
![kratos](img/kratos3.png) |
||||
# Kratos |
||||
|
||||
Kratos是bilibili开源的一套Go微服务框架,包含大量微服务相关框架及工具。 |
||||
|
||||
### Goals |
||||
|
||||
我们致力于提供完整的微服务研发体验,整合相关框架及工具后,微服务治理相关部分可对整体业务开发周期无感,从而更加聚焦于业务交付。对每位开发者而言,整套Kratos框架也是不错的学习仓库,可以了解和参考到bilibili在微服务方面的技术积累和经验。 |
||||
|
||||
### Principles |
||||
|
||||
* 简单:不过度设计,代码平实简单 |
||||
* 通用:通用业务开发所需要的基础库的功能 |
||||
* 高效:提高业务迭代的效率 |
||||
* 稳定:基础库可测试性高,覆盖率高,有线上实践安全可靠 |
||||
* 健壮:通过良好的基础库设计,减少错用 |
||||
* 高性能:性能高,但不特定为了性能做hack优化,引入unsafe |
||||
* 扩展性:良好的接口设计,来扩展实现,或者通过新增基础库目录来扩展功能 |
||||
* 容错性:为失败设计,大量引入对SRE的理解,鲁棒性高 |
||||
* 工具链:包含大量工具链,比如cache代码生成,lint工具等等 |
||||
|
||||
### Features |
||||
* HTTP Blademaster:核心基于[gin](https://github.com/gin-gonic/gin)进行模块化设计,简单易用、核心足够轻量; |
||||
* GRPC Warden:基于官方gRPC开发,集成[discovery](https://github.com/bilibili/discovery)服务发现,并融合P2C负载均衡; |
||||
* Cache:优雅的接口化设计,非常方便的缓存序列化,推荐结合代理模式[overlord](https://github.com/bilibili/overlord); |
||||
* Database:集成MySQL/HBase/TiDB,添加熔断保护和统计支持,可快速发现数据层压力; |
||||
* Config:方便易用的[paladin sdk](config-paladin.md),可配合远程配置中心,实现配置版本管理和更新; |
||||
* Log:类似[zap](https://github.com/uber-go/zap)的field实现高性能日志库,并结合log-agent实现远程日志管理; |
||||
* Trace:基于opentracing,集成了全链路trace支持(gRPC/HTTP/MySQL/Redis/Memcached); |
||||
* Kratos Tool:工具链,可快速生成标准项目,或者通过Protobuf生成代码,非常便捷使用gRPC、HTTP、swagger文档; |
||||
|
||||
|
||||
------------- |
||||
|
||||
> 名字来源于:《战神》游戏以希腊神话为背景,讲述由凡人成为战神的奎托斯(Kratos)成为战神并展开弑神屠杀的冒险历程。 |
||||
|
@ -1,8 +1,6 @@ |
||||
# Summary |
||||
|
||||
* [介绍](README.md) |
||||
* [快速开始](quickstart.md) |
||||
* [案例](https://github.com/go-kratos/kratos-demo) |
||||
* [快速开始 - 项目初始化](quickstart.md) |
||||
* [FAQ](FAQ.md) |
||||
* [http blademaster](blademaster.md) |
||||
* [bm quickstart](blademaster-quickstart.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 运行环境构建 |
||||
基于 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 |