乐趣区

架构师需要懂的环境配置标准化

架构师需要懂的环境配置标准化

[TOC]

基本概述

在真实的研发环境中,一般存在 localdevelopertestproduct 等等环境。

如何在这些环境中,实现统一的、标准化的配置问题是架构师需要考虑的一件事情。

每种环境一般都需要配置如下部分:

  1. 组件(MySQL、Redis、MongoDB 等)
  2. 数据(MySQL 中的表结构、特定的表数据,如:省市区数据)
  3. 应用参数

组件标准化

除线上环境需要考虑到稳定性外,在运维角色没有对容器化有丰富经验的情况下,可以考虑线上环境传统部署,如:自己搭组件集群或者使用云服务。

其余环境皆使用容器化部署。

可以考虑的部署方案有如下:

  1. local部署:docker-composedevelopertest部署:docker-swarm or kubernetes
  2. 所有环境都基于 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 的使用

  1. application.yml 中填入相应配置文件
flyway:
  enabled: true
  baseline-on-migrate: true
  locations: "db/migration"
  schemas: table_name
  1. 在指定目录下设置配置脚本

    • 脚本命名规范:V{版本}__{脚本名}.sql
  2. 配置数据库环境
  3. 启动 springboot 项目
  4. 在数据库中查看表结构、表数据

PS:flyway 官网

应用参数标准化

配置中心解决

apollonacosspring cloud config

local环境可以从配置中心拉一份 developer 环境配置下来,更改参数至 local 环境组件。

PS:各环境重要参数,通过配置中心配置,而不是放在项目目录,上传至git。这样配置信息不会有配置文件级外泄风险。

PS:apollo

PS:nacos

PS:spring cloud config

本文由博客一文多发平台 OpenWrite 发布!

退出移动版