-
架构师需要懂的环境配置标准化
基本概述
在真实的研发环境中,一般存在
local
、developer
、test
、product
等等环境。如何在这些环境中,实现统一的、标准化的配置问题是架构师需要考虑的一件事情。
每种环境一般都需要配置如下部分:
- 组件(MySQL、Redis、MongoDB等)
- 数据(MySQL中的表结构、特定的表数据,如:省市区数据)
- 应用参数
组件标准化
除线上环境需要考虑到稳定性外,在运维角色没有对容器化有丰富经验的情况下,可以考虑线上环境传统部署,如:自己搭组件集群或者使用云服务。
其余环境皆使用容器化部署。
可以考虑的部署方案有如下:
local
部署:docker-compose
;developer
、test
部署:docker-swarm
orkubernetes
。- 所有环境都基于
kubernetes
部署。PS:部署脚本一般由运维角色维护,
local
部署脚本从运维角色获取。
附上一个local
部署docker-compse
脚本
-
docker-compose.yml
version: '2'
services:
mysql:
image: mysql:5.6
command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci]
environment:
MYSQL_ROOT_PASSWORD: 123456
# For testing from the host:
# mysql --host=127.0.0.1 --port=3306 --user root -p
ports:
- "3306:3306"
redis:
image: redis:3.0
command: ['redis-server', '--requirepass 123456']
expose:
- 6379
ports:
- "6379:6379"
mongo:
image: 'umputun/mongo-auth'
environment:
- MONGO_PASSWD=123456
ports:
- "27017:27017"
PS:docker-compose官方文档
PS:按需使用相应组件,也可以自己添加需要的组件,local
环境没做数据持久化处理,如需用在其余环境,请参考文档配置。
数据标准化
数据标准化主要解决的是各环境表结构不一致的问题。
线上环境一定要关掉该功能。
线上环境的数据变更一定要按规范、走变更流程,经
DBA
或者运维
角色执行。其余环境个人解决方案:
flyway
springboot
环境中flyway
的使用
-
在
application.yml
中填入相应配置文件
flyway:
enabled: true
baseline-on-migrate: true
locations: "db/migration"
schemas: table_name
-
在指定目录下设置配置脚本
-
脚本命名规范:
V{版本}__{脚本名}.sql
-
脚本命名规范:
- 配置数据库环境
-
启动
springboot
项目 - 在数据库中查看表结构、表数据
PS:flyway官网
应用参数标准化
配置中心解决
apollo
、nacos
、spring cloud config
https://www.cnblogs.com/switchvov/p/15093853.html
local
环境可以从配置中心拉一份developer
环境配置下来,更改参数至local
环境组件。
出处:
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比