美文网首页
多环境如何共用基础组件

多环境如何共用基础组件

作者: wu_sphinx | 来源:发表于2019-07-18 21:07 被阅读0次

    在软件开发过程中,通常会有多个测试环境,以供开发、测试、性能并行之用,每个环境部署的服务几乎是一样的,不一样的地方在于配置、代码分支等。除了业务部署,基础组件如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)分别是

    • STAGING
    • TEST
    • DEMO

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

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

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

    • foo_STAGING
    • foo_TEST
    • foo_DEMO

    上例中是写缓存,读缓存时一样,也需要加上环境变量,至此,三个环境即可共用同一套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自然也是一样的道理,这个方法固然不是最好的,但是通过加环境变量后缀,简单而有效,也不易出错,落地相对容易,缺点是对代码有改动,如果没改全,就会出问题。

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

    相关文章

      网友评论

          本文标题:多环境如何共用基础组件

          本文链接:https://www.haomeiwen.com/subject/jkbrlctx.html