# optms **Repository Path**: minzzzZ/optms ## Basic Information - **Project Name**: optms - **Description**: springboot2.2.5 springcloud全家桶 - **Primary Language**: Java - **License**: MIT - **Default Branch**: feature - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2020-03-17 - **Last Updated**: 2022-05-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # optms说明文档 ``` 1.目的:不断学习,不断进步,创造一个基于spring cloud的开源架构. 2.工程名称"optms"取自Optimus Prime;希望这个项目能够独当一面,为个人开发者提供一套完善的分布式微服务解决方案. 3.后端技术栈方案:采用springcloud为依托,集成eureka,feign,hystrix,actuator,zuul,redis,apollo,rocketmq,ElasticSearch...持续更新,将作为第一个LTS版本. 4.中台服务一直是想做,但是不知道怎么做的.要以业务为依托.计划采用Netty,Disrupter,StateMachine实现. 5 optms第二版,后端技术栈方案:采用SpringCloudAlibaba,集成nacos,sentinel,seata... 6 optms第三版,后端技术栈方案:采用SpringBoot Dubbo... 7.容器化方案:采用docker,k8s部署,后续可能会考虑service Mesh(istio),severless(knative). 8.后续可能会考虑中台服务,流程引擎.使用技术暂定. 9.计划开源日期:2020-10-03. ``` ## 1.hosts设置 ```shell 127.0.0.1 eureka7000.com 127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 microsvr-gateway.com ``` ## 2.数据库设置 数据库文件路径:/doc/sql 采用druid数据源 数据源配置在:application-druid.yml ## 3.组件说明 ### 3.1 register-center 采用eureka 配置中心 学习过程中实现了2种方式: 1.利用docker-compose实现集群 DockerFile文件路径:register-center/eureka-server-cluster/docker-compose.yml $ docker-compose up -d 2.利用k8s实现集群 yaml文件路径位置: register-center/eureka-server-cluster/eureka-statefulset.yaml 先使用Dockerfile将镜像推到docker,上传aliyun镜像仓库.然后执行kubectl命令. $ kubectl apply -f eureka-statefulset.yaml ### 3.2 microsvr-api 公共模块 用于定义api接口调用,对象信息 1.定义java bean对象 2.定义feign接口 3.hystrix的fallback配置 ### 3.3 service-monitor 服务监控 #### 3.3.1 hystrix-dashboard 断路器监控面板 端口:7100 采用hystrix dashboard用途服务监控 #### 3.3.2 actuator-admin 服务监控 端口:7200 账户/密码: admin/admin 采用hystrix dashboard用途服务监控 1.先使用Dockerfile将镜像推到docker,上传aliyun镜像仓库. 2.使用kubectl部署容器 service-monitor/actuator-admin/actuator-deployment.yaml $ kubectl apply -f actuator-deployment.yaml ### 3.4 microsvr-gateway 网关 端口:7200 采用zuul作为微服务网关,计划采用zuul,rateLimit,auth2 jwt实现网关,限流,验权. ### 3.5 microsvr-common 公共模块 ### 3.6 starter-component 用于启动配置管理,可插拔组件,使用引入对应组件的依赖,做相关配置即可 #### 3.6.1 cache-spring-boot-starter 缓存配置,采用redis缓存 1).在需要cache的子工程中引入starter-cache依赖,在yml文件中配置如下属性. spring: redis: host: 127.0.0.1 port: 6379 database: 11 password: timeout: 10000 lettuce: pool: max-active: 8 # 连接池最大连接数 max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) min-idle: 0 # 连接池中的最小空闲连接 max-idle: 8 # 连接池中的最大空闲连接 2).缓存工具类-redis @Autowired CacheUtil cacheUtil; 3).分布式锁-Redisson @Autowired DistributedLocker distributedLocker; distributedLocker.lock(); distributedLocker.unLock(); 4).分布式锁-Lua Autowired StringRedisTemplate redisTemplate; RedisDistributionLuaLocker locker = new RedisDistributionLuaLocker(redisTemplate); locker.lock(...); locker.unlock(...); #### 3.6.2 swagger2-spring-boot-starter 接口文档-swagger2 1).链接地址: 原生(swagger-ui.html): http://ip:port/swagger-ui.html 美化(doc.html): http://ip:port/doc.html 2).在需要swagger文档的子工程引入starter-swagger2依赖,在yml文件中配置如下属性. swagger2: basePackage: com.yexx.sc version: 1.0 title: XXX description: XXX #### 3.6.3 apollo-spring-boot-starter 配置中心-apollo 如果用k8s的configMap,则完全可以替代apollo 1).启动main方法中设置当前环境,这是其中一种方式,有三种方式,详见apollo在github的说明. System.setProperty("env", "DEV"); #设置当前apollo从DEV环境获取配置信息 2).在需要映入apollo配置中心的子工程引入starter-apollo依赖,在yml文件中配置如下属性 app: id: demo-app #apollo项目名称 apollo: bootstrap: namespaces: application meta: http://127.0.0.1:8080 #apollo配置中心eureka地址 #### 3.6.4 search-spring-boot-starter 原生ElasticSearch实现,废弃使用 ### 3.7 micro-service 微服务:提供基本数据库封装 ### 3.8 front-service 前台服务:提供对外api REST+JSON ### 3.9 middle-service 中台服务,暂定... ### 4.0 基于helm 安装 redis sentinel集群, mysql主从复制模式 1.前提需要安装nfs,rpcbind以及为redis/mysql创建合适的PV,后续完善... 2.添加redis-ha redis哨兵模式 $ helm fetch stable/redis-ha --untar --untardir ./ $ cd redis-ha $ helm install -f values.yaml stable/redis-ha 3.为redis创建NodePort模式的svc,便于客户端,项目连接 4.添加mysql主从复制模式 $ helm fetch apphub/mysqlha --untar --untardir ./ $ cd mysqlha $ helm install -f values.yaml apphub/mysqlha 5.为mysql创建NodePort模式的svc,便于客户端,项目连接 6.添加nodeport类型的svc,方便提供redis desktop Manager以及项目使用