# openmore-cloud **Repository Path**: fortree/openmore-cloud ## Basic Information - **Project Name**: openmore-cloud - **Description**: 微服务框架 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2019-09-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 参考:@link: https://github.com/mirrormingzZ/hello-spring-cloud-alibaba --- * envirement: docker本地快速搭建环境参考、配置文件备份... * openmore-common :公共依赖库 * openmore-storage :文件操作库(阿里云、保利威视) * openmore-opc-:账户系统、权限管理(多租户模型) * openmore-third-platform :三方账户信息服务模块(微信、支付宝...) * ./test/db/schema: 模块依赖数据库数据 --- 各模块业务说明: ~~~ openmore-cloud ---------openmore-cloud-common:公共类和工具包基础依赖包 ---------openmore-opc:账户系统服务模块(所有模块都采用redis共享session记录账户信息) ---------openmore-third-platform:三方账户服务模块(微信、支付宝、登录、支付等服务模块) ---------openmore-storage: 文件处理服务模块(阿里oss、七牛、保利威视...) ---------openmore-consumer: 消费模块(具体业务模块) ~~~ 主要架构设计 ~~~ 1.微服务使用springcloud alibaba+nacos, nacos作为注册中心和配置中心 2.服务消费使用OpenFeign方式,启动类注解EnableFeignClients 3.权限验证使用shiro登录共享无状态token方式,由redis服务起缓存session,不信任客户端session 4.账户系统采用saas多租户模式,数据隔离采用共享数据库、共享数据架构。 ~~~ 工具框架: ~~~ * Spring-Test** * Mybatis-Pagehelper5.0** * Mybatis通用Mapper3** * Druid1.1.9** * UrlRewrite** * Freemarker** ~~~ httpCode说明 ~~~ * 正常返回code:200 msg:ok * 异常情况:400 msg:异常信息 * 如果是登录没有权限,返回401或4001 * 如果是业务需要回显给前端的,需要将code设置为6000以下的码 * 如果是前端需要单独处理的,需要设置code为6000以上的码,如:后台返回60001,前端需要弹出一个二次确认窗口。 ~~~ 接口安全: ~~~ * 使用Shiro里的SessionId控制登录 * 用户登录时,Header里将device-token带过来,服务器保存device-token到db里,当用户在其它设备登录时,device-token变化,导致服务器端device-token发生变化,在校验时会拒绝老用户的接口请求返回401,来控制客户端访问,比如:互踢,拉黑机制 * 当需要禁止一个用户登录时,将device-token清空,这里强迫用户下次请求必须登录,然后再将用户状态改成disable,就可以达到禁止登录的目的 * 防止篡改,所有请求接口都带有sign签名,sign = md5(SessionId + nonce + method + uri + tenant + timestamp + device-token) * 防止重放攻击,Header里带有时间戳,超过时间差容忍范围(默认60秒),拒绝访问 * 关键数据可加密,Header中encrypt=1时,接口数据进行AES128加密,隐藏明文发送数据(先不实现) * 模块间访问使用OpenFeign,请求时转发请求头等身份信息(FeignConfiguration),或者二次签名(参照请求参数签名) Http Header请求参数如下: * sign:签名(签名算法见下面) * Content-Type:application/json * tenant:应用ID(必传用于租户间数据隔离) * timestamp:时间戳(秒) * Device-Token: 每个设备自己生成的token * nonce:6位随机数 * encrypt:1表示内容加密,参数不存在或为其它值,表示内容不加密(先不实现) ~~~ 运行环境 ~~~ develop: 开发模式 tril: 试用版(预发布版) release: 正式版(发布版) 根据不同模式从nacos配置中心加载不同配置 ~~~ 注册中心/配置中心 ~~~ * 使用nacos作为注册中心和配置中心 * http://localhost:8488/nacos/index.html account:nacos password:nacos ~~~ 容错、熔断、服务降级、限流 ~~~ *Feign+Sentinel *Feign默认加载负载均衡 *使用Sentinel Dashboard可视化限流、熔断服务 *@SentinelResource可用于方法限流不仅限于接口限流 *注意: Sentinel集群资源汇总仅支持 500 台以下的应用集群,有大概 1 - 2 秒的延时。 * http://localhost:9001/ account: sentinel password: sentinel ~~~ 链路追踪 ~~~ *Apache SkyWalking 是观察性分析平台和应用性能管理系统。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。 *自动化配置方案参考environment中docker部署文件 *以下为手动配置说明: *配置SkyWalking服务器 1.使用官方推荐的存储方案是 ElasticSearch,安装ElasticSearch服务参考envirement(elasticSearch-docker-compose.yml) 2.下载skywalking编译版本客户端:@link: http://skywalking.apache.org/downloads/ 3.修改skywalking客户端配置文件application做三件事: 注释 H2 存储方案 启用 ElasticSearch 存储方案 修改 ElasticSearch 服务器地址 4.startup.bat启动skywalking服务端 *部署服务探针 探针文件在 apache-skywalking-apm-incubating/agent 目录下 一下提供Java启动部署探针方式 *java启动项目命令: -javaagent:D:\Mirror\Coding\hello-spring-cloud-alibaba\hello-spring-cloud-external-skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=provider -Dskywalking.collector.backend_service=localhost:11800 *参数说明: -javaagent:用于指定探针路径(IDEA右键skywalking-agent.jar,copy path) -Dskywalking.agent.service_name:用于重写 agent/config/agent.config 配置文件中的服务名 -Dskywalking.collector.backend_service:用于重写 agent/config/agent.config 配置文件中的服务地址 *例:java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=provider -Dskywalking.collector.backend_service=localhost:11800 -jar yourApp.jar *为方便docker集群部署可使用Maven Assembly将探针打包 * http://localhost:8080 account:admin password: admin ~~~ 路由 ~~~ 暂未使用 ~~~