[toc]

# 技术平台建设方案（Hubble)

## 平台介绍

​	Hubble技术平台一套分布式微服务开发平台，它是业务中台建设的关键技术基础，它将保证业务中台的高性能和稳定性。该平台基于 行业成熟框架基础上进行二次开发，开源框架基于Spring Boot 2.1.3、 Spring Cloud Greenwich.SR3 & Alibaba、 Shiro、JWT 的快速开发平台，前端采用 ant-design-vue，简单易用封装各种组件，轻松满足企业级项目需求。



###  技术体系

- 1、Nacos 服务注册和发现

- 2、Nacos 统一配置中心

- 5、SpringCloud Gateway

- 6、JWT + Shiro 权限控制

- 7、分布式文件系统 Minio、阿里OSS

- 9、Spring Boot Admin服务监控

- 10、链路跟踪 SkyWalking

- 13、分布式定时任务 XXL-JOB

- 14、ELK分布式日志

- 15、支持 jenkins、docker-compose、k8s

  

##  平台架构图

![image-20220409094116377](/Users/admin/Library/Application Support/typora-user-images/image-20220409094116377.png)

## 平台逻辑图

![image-20220419091340805](/Users/admin/Library/Application Support/typora-user-images/image-20220419091340805.png)

##  开发环境

- 语言：Java 8
- IDE： IDEA 或 Eclipse （安装lombok插件）
- 依赖管理：Maven
- 数据库：MySQL5.7 & Oracle 11g
- 缓存：Redis



## 技术平台常用系统

| 系统名           | 开源组件 | 地址                                                        | 状态     |
| ---------------- | -------- | ----------------------------------------------------------- | -------- |
| 服务注册中心系统 |          | http://usky-cloud-nacos/nacos/#/login (nacos/naoc@Usky2022) | 建设完成 |
| API文档系统      |          | http://101.133.214.75:7700/                                 | 没有API  |
| 服务监控系统     |          | http://usky-cloud-admin/  (ruoyi/123456)                    | 建设完成 |
| 持续集成发布系统 |          | http://10.0.240.163:8080/ (usky,Usky@208）                  | 建设完成 |
| 代码质量管理系统 |          | http://47.111.81.118:3000/                                  | 建设完成 |
| 容器管理系统     |          | http://192.168.31.114:9000/#/containers                     | 不建设() |
| 基础监控         |          | http://192.168.31.114:3001/                                 | 建设完成 |
| Nexus maven私服  |          | http://101.133.214.75:8081/(admin/Usky@208)                 | 建设完成 |



# 技术点

| 序号 | 知识点               | 资料                                                     |
| :--- | :------------------- | :------------------------------------------------------- |
| 1    | Node.js 入门         | http://www.runoob.com/nodejs/nodejs-tutorial.html        |
| 2    | Npm 命令             | http://www.runoob.com/nodejs/nodejs-npm.html             |
| 3    | Yarn                 | 建议，比npm更快                                          |
| 4    | Vue                  | https://cn.vuejs.org/                                    |
| 5    | ES6                  | https://blog.csdn.net/itzhongzi/article/details/73330681 |
| 6    | Vue全家桶            | Webpack 、axios、Vue router、Vuex、Vue Loader、Vue cli   |
| 7    | Springboot           |                                                          |
| 8    | Mybatis-plus         |                                                          |
| 9    | Shiro                |                                                          |
| 10   | Spring Cloud Alibaba | [微服务技术解决方案](http://doc.jeecg.com/2043893)       |





### 永天云平台结构说明

http://47.111.81.118:3000/uskycloud

usky-cloud

 - base-components    -- 基础组件提供网关，注册中心，监控服务

   - gateway
   - monitor
   - Register

 - base-modules        -- 公共服务模块，提供文件，代码生成，job，系统管理

   ​	- file-service

   ​    - gen-service

       - job-service 
       - System-service

 - base-common       --  公共工具模块

   ​      - common-core     

   ​      - common-util  

 - usky-modules          -- 永天服务模块,每个服务模块结构，参照《微服务业务模块结构说明》

     - demo-service          --  demo服务

     - system-service       --   永天云系统管理

     - backend-service     --   永天云租户后台管理
     
     - dianli-service          --   电力服务
     
     - fire-service     --  消防服务
     
      
     
      
     
      
     
      
     
      



### 微服务业务模块结构说明

```
├── usky-module-xiaofang            --CMS微服务模块
    ├──usky-module-xiaofang-api     -- 实体、dto、vo、服务定义
        ├──dto
        ├──entity
        ├──feign
        ├──vo
    ├──usky-module-xiaofang-biz    --业务实现（引用usky-module-cms-api）
        ├──controller
        ├──mapper
        ├──service
```

- 这种目录结构好处是将实体拆分出去，实现单体和微服务共用实体定义；
- 其他微服务模块需要调用微服务接口，直接引入usky-module-cms-api 即可。



## 现有业务SaaS多租户改造方法



> 针对某个表实现SAAS模式，具体实现以下三点功能：
>
> 1. 添加数据自动注入登录人租户ID。
> 2. 查询自动根据登录人租户ID进行数据筛选。
> 3. 数据库表修改 多租户的表需要添加一个`int`类型字段 `tenant_id`，同时java对应实体也加上字段`tenantId`

参照方案：http://doc.jeecg.com/2044164



## 行业成熟半成品框架

- ruoyi-cloud

https://gitee.com/y_project/RuoYi-Cloud

1.auth 模块合并到 system模块(实现)

2.file 模块合并system模块（实现）

3.客户端可以独立运行，提出common-securit(实现)

4.系统管理模块改为mysqlplus架构（）

- 统一返回（目前盖好）
- 

5.网关不做具体权限控制

 



- Jeecg-cloud

https://gitee.com/enzhouguo/jeecg-cloud



# 平台规范

## 建表规范

## 表设计规范

- 1.主键必须为：ID，类型 [Long(19)] 唯一索引
- 2.外键字段命名：{【关联表名】去掉业务前缀}+“_”+ {关联字段名}，例如：order_main_id
- 3.区分位: iz_* [String(1)] 1表示是 0表示否，（禁用 is_,代码生成实体有问题 )
- 4.状态位: *_status [String(1-2)] 状态字段必须加注释说明每个值代表含义
- 5.字段命名，多单词采用下划线分隔 例如：school_id
- 6.索引命名： 主键索引命名为：pk_表名缩写_字段名（索引要求全库唯一，为兼容多数据库）；
  唯一索引命名为：`uniq_表名缩写_字段名` 或 `uk_表名缩写_字段名`；
  普通索引命令为： `idx_表名缩写_字段名`（表名缩写： 下划线分隔单词首字母组合）
- 7.区分、状态、类型字段，尽量用String类型，避免数字类型的一些问题；如果需要考虑性能建议用int类型
  （禁用tinyint类型，需要兼容其他数据库）；
- 8.字段默认值（字段尽量不设置默认值，采用编码方式加默认值） `因为在转库的过程中，不同数据库会有丢失默认值的情况`

## 表业务前缀 和 建表标准字段

- 1.表命名必须带上业务前缀：例如 sys_开头(系统表前缀)
- 2.所有的表加字段：所属部门，用于部门数据权限
- 3.所有的表加字段：创建时间，创建者，最后更新时间，更新人
- 4.逻辑删除字段，del_flag [int(1)]，1表示删除 0表示未删除 ，可选择加
- 5.乐观锁字段， update_count[Integer]，可选择加
- 6.字符串类型字段，varchar类型长度不允许超过1000（过长转库会变类型）
- 7.大文本尽量少用，字段类型采用text、longtext，禁用blob系列类型（必须用要确认）

## 帮助脚步

```
ALTER TABLE `表名`
ADD COLUMN `create_by`  varchar(32) NULL COMMENT '创建人',
ADD COLUMN `create_time`  datetime NULL COMMENT '创建时间' AFTER `create_by`,
ADD COLUMN `update_by`  varchar(32) NULL COMMENT '修改人' AFTER `create_time`,
ADD COLUMN `update_time`  datetime NULL COMMENT '修改时间' AFTER `update_by`,
ADD COLUMN `del_flag`  int(1) NULL COMMENT '0表示未删除,1表示删除' AFTER `update_time`;
```

其他说明：

- 表字段注释，每个字段必须设置注释说明;
- 表字段注释，状态类型的字段必须说明取值规则（比如性别sex取值规则）
  比如：'性别 0男,1女'
- 索引，查询频率高的字段加索引（单字段索引 、组合索引、唯一索引）;
- 状态、类型字段，尽量用字符串varchar类型1-2长度，少用int类型，避免不必要的问题。



##  服务器部署地址约定

后端部署地址： /var/services/服务名称

前端部署地址：/var/www/服务名称

日志输出地址：/var/log/uskycloud/服务名称



例如：永天电力  服务名  usky-power

后端部署地址： /var/services/usky-power

前端部署地址：/var/www/usky-power

日志输出地址：/var/log/uskycloud/usky-power



# 其它



### Compose 安装

官方文档：https://docs.docker.com/compose/install/

您可以在`macOS`，`Windows`和`Linux`上运行`Compose`。本文演示基于`Linux`环境的安装。我们可以使用`curl`命令从`Github`下载它的二进制文件来使用，运行以下命令下载`Docker Compose`的当前稳定版本。或者从网页下载后上传至服务器指定目录`/usr/local/bin`也行。

- 下载

```sh
curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 因为Docker Compose存放在GitHub，可能不太稳定。可以通过DaoCloud加速下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
```



您可以通过修改 URL 中的版本，自定义您所需要的版本文件。

安装完成以后，查看指定目录，发现该文件没有可执行权限，进行授权操作。

- 授权

```sh
# 将可执行权限应用于该二进制文件
sudo chmod +x /usr/local/bin/docker-compose
```

1
2

- 测试

```sh
docker-compose --version
```

1

- 卸载

```sh
rm /usr/local/bin/docker-compose
```





# 统一网关访问

- 测试环境

​        http://172.16.120.165:801/api

- 线上环境

  http://gateway.usky.cn/api

  

  

  







# # 开发记录





| 平台化-技术平台                             | V0.1 |      |      | 100% |
| ------------------------------------------- | ---- | ---- | ---- | ---- |
| 参与：詹叶俊，杨强，郭恩洲                  |      |      |      |      |
| 内容                                        | 进度 |      |      |      |
| 【数据平台】device-writer-mongo存储服务开发 | 100% |      |      |      |
| 【数据平台】auth模块整合到system            | 100% |      |      |      |
| 【数据平台】mqtt-acceptance 订阅解析发送MQ  | 100% |      |      |      |
| 【业务平台】系统模块开发                    | 100% |      |      |      |



| 平台化-技术平台                                          | V0.2 | 7/4-7/14 |      | 完成评分 |
| -------------------------------------------------------- | ---- | -------- | ---- | -------- |
| 参与：王涛，吉超博，郭恩洲                               |      |          |      |          |
| 内容                                                     | 进度 |          |      |          |
| 【业务平台】system改成租户模式，形成运营中心版本         | 70%  |          |      |          |
| 【数据平台】数据平台查询服务                             | 50%  |          |      |          |
| 【数据平台】data-collector 统一接收监听                  | 0%   |          |      |          |
| 【业务平台】Mybatisplus搭建多租户拦截器模式              | 0%   |          |      |          |
| 【业务平台】新的前端框架增加租户管理，平台管理，登录体系 | 20%  |          |      |          |

#验收结论

1.admin 账号属于





```
```

