多环境如何共用基础组件

2019-07-18  本文已影响0人  wu_sphinx

在软件开发过程中,通常会有多个测试环境,以供开发、测试、性能并行之用,每个环境部署的服务几乎是一样的,不一样的地方在于配置、代码分支等。除了业务部署,基础组件如rediskafkazk等,因为不存在迭代(除了升级),配置上通常也不会有什么变化,因为需要多个环境,所以需要部署多套 一模一样 的基础组件,这就造成了资源的浪费。聪明如你,为了节省资源,能否以尽可能小的代价让多个环境共用这些基础组件呢?当然可以

多环境REDIS共用

我们都知道redisk:v内存数据库,简单易用,以一为写缓存示例:

// open a connection to Redis
...


connection.set("foo", "bar");
String value = connection.get("foo");
System.out.println(value);

假设我们现有3个环境,环境名(ENV_NAME)分别是

要做到这三个环境共用redis组件,只需要将k加上环境变量即可(加上_作为k与环境变量的分隔符),比如示例代码中的kfoo,
代码稍加改动

connection.set("foo" + "_" + System.getenv("ENV_NAME"), "bar");

修改后三个环境的k分别为:

上例中是写缓存,读缓存时一样,也需要加上环境变量,至此,三个环境即可共用同一套redis组件,可将取key统一成一个方法如下所示

  static String getKey(String key) {
    String envName = System.getenv("ENV_NAME");
    // 因为组件共用主要用于测试环境,线上环境(假设ENV_NAME为“PRO”)或其它情况未设ENV_NAME,则保持不变
    if(envName == null || envName.isEmpty() || envName.equals("PRO")){
        return key;
    }
    return String.join(key,"_", envName);
  }

多环境KAFKA共用

上例中讲到多环境共用redis, 自然,kafka用的一个套路, 因为topic在逻辑上可以被认为是一个queue, 使用时,topic带上环境变量即可

zk自然也是一样的道理,这个方法固然不是最好的,但是通过加环境变量后缀,简单而有效,也不易出错,落地相对容易,缺点是对代码有改动,如果没改全,就会出问题。

如果你有更好的共用组件方法,欢迎不吝赐教。

上一篇下一篇

猜你喜欢

热点阅读