[toc]
基于微服务的思想,构建在 B2C 电商场景下的项目实战。
| 模块 | 名称 | 端口 | |
|---|---|---|---|
admin-web |
【前端】管理后台 | HTTP 8080 | |
user-application |
用户 HTTP 服务 | HTTP 18082 | |
product-application |
商品 HTTP 服务 | HTTP 18081 | |
order-application |
订单 HTTP 服务 | HTTP 18088 |
后端项目,目前的项目结构如下:
[-] xxx
├──[-] xxx-restful // 提供对外 HTTP API 。
├──[-] xxx-service-api // 提供 Dubbo 服务 API 。
├──[-] xxx-service-impl // 提供 Dubbo 服务 Service 实现。考虑到大多数公司,无需拆分的特别细,并且过多 JVM 带来的服务器成本。所以目前的设定是:
xxx-service-impl内嵌在xxx-application中运行。- MQ 消费者、定时器执行器,内嵌在
xxx-service-impl中运行。
也就是说,一个 xxx-application 启动后,该模块就完整启动了。
-
启动Zookeeper,这里不做演示,使用默认端口即可,dubbo中间的服务注册中心就是zookeeper,我个人觉得nacos比较好。
-
如果是Nacos 启动Nacos,这里不做演示,使用默认端口即可(bin/start)
-
启动Dubbo的提供者服务, 再启动服务的消费者服务
-
启动Sentinel (官关、限流等)
-Djava.net.preferIPv4Stack=true -Dcsp.sentinel.api.port=8189 -Dproject.name=consumer-service -Dcsp.sentinel.dashboard.server=127.0.0.1:8080 -
启动Dubbo admin 的服务管理中心(微服务的状态)。
-
启动Seata 分布式事物中心(服务端。
-
如果用户较少,且可容忍较少数据错误,推荐直接使用乐观锁。
| 框架 | 说明 | 版本 |
|---|---|---|
| Spring Boot | 应用开发框架 | 2.1.4 |
| MySQL | 数据库服务器 | 5.6 |
| Druid | JDBC 连接池、监控组件 | 1.1.16 |
| MyBatis | 数据持久层框架 | 3.5.1 |
| MyBatis-Plus | Mybatis 增强工具包 | 3.1.1 |
| Redis | key-value 数据库 | 暂未引入,等压测后,部分模块 |
| Redisson | Redis 客户端 | 暂未引入,等压测后,部分模块 |
| Elasticsearch(暂废除) | 分布式搜索引擎 | 6.7.1 |
| Dubbo | 分布式 RPC 服务框架 | 2.7.1 |
| RocketMQ(暂废除) | 消息中间件 | 4.3.2 |
| Seata | 分布式事务中间件 | 0.5.1 |
| Zookeeper | 分布式系统协调 | 3.4.9 作为注册中心 |
| XXL-Job(暂废除) | 分布式任务调度平台 | 2.0.1 |
| springfox-swagger2 | API 文档 | 2.9.2 |
| swagger-bootstrap-ui | Swagger 增强 UI 实现 | 1.9.3 |
未来考虑引入
- 配置中心 Apollo
- 网关 Soul
一般来说,监控会有三种方式:
- 1、Tracing ,我们采用 Apache SkyWalking
- 2、Logging ,我们采用 ELK
- 3、Metrics ,我们采用 Prometheus
| 框架 | 说明 | 版本 |
|---|---|---|
| SkyWalking | 分布式应用追踪系统 | 6.0.0 |
| Prometheus | 服务监控体系 | 2.9.2 |
| Alertmanager | 告警管理器 | 0.17.0 |
| Grafana | 仪表盘和图形编辑器 | 0.17.0 |
下面,我们会提供目前用到的中间件的管理平台。
Swagger UI
- 地址:http://ip:端口/swagger-ui.html
- 演示账号:无 / 无
- 用于展示 接口文档数据的界面。
Dubbo Admin
- 地址:http://dubbo-admin.shop.iocoder.com:18099
- 管理员账号:无需登陆
Sentinel Console
- 地址:http://sentinel.shop.iocoder.com:18099
- 账号:sentinel / sentinel
- Jenkins 持续集成
- Nginx 服务器
- Docker 容器
- Nginx
