- 这里是一个社交应用的demo,我们在这个项目中探索最佳实践
- 项目的主要目标是提供一个社交平台,用户可以在这里发布自己的动态,参与投票,评论等
- 与此同时,在客户端上将尝试一些动画的制作
- 使用Flutter进行前端开发
- 使用gRPC进行微服务之间的通信
- 使用Consul进行服务注册和发现
- 使用RabbitMQ进行消息队列
- 使用Redis进行缓存
- 使用MongoDB进行数据存储
- 使用Kubernetes进行容器编排
- 使用Prometheus+Grafana进行监控
aorb
├── backend
│ ├── api-gateway
│ ├── services
│ │ ├── auth
│ │ ├── comment
│ │ ├── event
│ │ ├── poll
│ │ ├── user
│ │ └── vote
│ ├── rpc
│ └── utils
├── build
├── frontend
│ ├── lib
│ │ ├── conf
│ │ ├── generated
│ │ ├── models
│ │ ├── routes
│ │ ├── screens
│ │ ├── services
│ │ ├── utils
│ │ └── widgets
│ └── test
├── idl
├── k8s
├── logs
├── monitoring
│ ├── grafana
│ └── prometheus
└── scripts
推荐使用vscode进行开发,安装flutter插件,以及dart插件
git clone https://github.com/BigNoseCattyHome/aorb.git
在这个项目中需要用到的工具有:
- flutter
- go
- protoc
- consul
- rabbitMQ
- redis
- mongodb
在项目拉取到本地之后需要执行make proto
生成前后端中所需要的一些代码
开发和测试flutter应用,在项目根目录下执行
make run frontend
或者是尝试进入到frontend目录下执行
flutter run
Flutter 会自动编译 fronted/lib/main.dart
文件并运行,选择一个合适的平台进行查看就好,不同平台需要满足特定的工具包。
figma原型设计共享链接:Aorb原型设计
这里是一篇MongoDB安装和简单上手文档,可以参考一下
确保在本地安装好MongoDB后,进行数据库初始化:
mongodump --db aorb --out ./database_init # 备份数据库
mongorestore --db aorb ./database_init/aorb # 恢复数据库
RabbitMQ:
systemctl start rabbitmq-server # Linux
brew services start rabbitmq # MacOS
Consul:
consul agent -dev
Redis:
redis-server
链路监控和性能检测:
- 需要分别开启Prometheus、Jaeger、Grafana 其中Jaeger可以使用docker命令拉
docker run -d --name jaeger \ ─╯
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14250:14250 \
-p 14268:14268 \
-p 9411:9411 \
jaegertracing/all-in-one:1.28
- 另外两个需要手动启动,其中Prometheus需要修改启动文件prometheus.yml为:
global:
scrape_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: [
"localhost:9090",
"localhost:37100",
"localhost:37101",
"localhost:37102",
"localhost:37103",
"localhost:37104",
"localhost:37105"
]
- 然后使用命令
prometheus ..../prometheus.yml
即可监控对应的metric,完成之后可以在Grafana中查看调用情况
可以执行以下命令来启动后端各个微服务
make run backend
执行以下命令来启动客户端,因为项目中运用了 gRPC 进行通讯,浏览器目前不支持
推荐使用各个平台的客户端,比如Linux、Windows、MacOS等
make run frontend
对于在手机上进行真机测试,需要手机打开开发者模式,并且使用USB连接到电脑上,并将连接方式设置为文件传输。
执行以下命令检查是否连接成功
adb devices
如果连接成功,执行以下命令启动客户端
make run frontend # 在项目根目录下
flutter run # 在frontend目录下
- 使用Apifox测试的时候返回了
invalid wire type[13 INTERNAL]
错误
- 原因:本质上是因为客户端(Apifox)与服务端(项目后端)所使用的pb类型定义不一致
- 解决方法:检查后端的proto文件,并且重新上传到Apifox,参考链接是这篇博客
- Consul报错:
too many colons in address
- 原因:grpc的包里面没有针对consul的解析器,无法讲请求解析到正确的微服务端口
- 解决方法:在每个微服务的main.go中引入
import _ "github.com/mbobakov/grpc-consul-resolver"
,参考链接