这是一个模仿php电商项目的go微服务框,会尽可能保持项目目录结构的不变,中间的一些php组件会被go技术栈替换。
- 原框架代码组织架构如下图所示
+----------------------------------------------------------+
| GW |
+--------------------------|-------------------------------+
| Nginx |
+--------------------------|-------------------------------+
| <App> |
| | |
| | |
+---------- UI ------------+------ Service ----------------+
| uiorder | uisale | | | | | |
+-----------------------+ order | sale | item | ugc | user |
| uilib | | | | | |
+----------------------------------------------------------+
| wwbtg util gconfig |
+----------------------------------------------------------+
- 服务监控系统
log file -> filebeat -> kafka -> logstash -> es -> grafana
- 数据管理组织架构
+------------------------------ relation database ------------------------------+
| [ mysql ] |
| | |
| <binlog> |
| | |
| [ kafka ] |
| | |
| ---->>> [ RealTime Data WorkHouse ] (ALI - hologress) |
| | |
| ---->>> [ ETL ] >>> [ Data WorkHouse ] (AWS - redshift) |
| | |
| ---->>> [ RealTime Stream Compute ] (ALI - flink) ------+ |
| | |
+------------------------------ no relation db ----------------------|----------+
| v |
| [ redis ] [ dynamodb ] |
+-------------------------------------------------------------------------------+
- 加载框架基础依赖库
- json处理组件替换
- rpc调用组件替换
- net/rpc实现
- grpc实现
- db连接管理组件替换
- go/mysql驱动连接池管理
- 实现不同模块(UI、Server)服务启动环境
- http请求连接管理组件
php-fmp > multiplexer(net/http)
- http请求连接管理组件
- 实现静态资源服务
以
uibook
模块为例
- 提供基本路由配置
- 提供接口
- 实现一个
invoke()
- 默认请求返回格式
json
- 支持其他返回格式
- 实现一个
以
user
模块为例
- 实现服务注册配置
- 功能接口层(组合多个数据实体对外提供的最小单位)
- 默认rpc请求格式
json
- 默认rpc请求格式
- 数据访问层
- 关系数据库实现
-
nosql
数据库实现
- 服务注册、发现
- 服务链路追踪
- 基于日志的服务监控系统
-
kafka
-
binlog