搞不定serverless?让你秒懂掌握profiling让一份程序优雅自适应(代码片段)

雷学委 雷学委     2022-12-27     271

关键词:

NodeJS 后端开发09 多环境Profiling优雅根据不同环境自适应

学委好久没有更新NodeJS专栏,还以为NodeJS冷门,没想到最近看到几个读者留言问怎么优雅的管理多环境的配置。

太忙了,写篇短文简单展示一下原理。正好基于前篇 【NodeJS 后端开发 07 MySQL数据库连接池开发生产应用 】简单尝试了mysql库来连接数据库。

本篇尝试一个更加优雅的方式,通过环境变量来控制程序动态加载不同的配置。

这个搞Java的同学最清楚,比如我们开发springboot应用的时候会放置多个application.yml。

然后部署的时候通过环境变量来选择配置。

这个用NodeJS来做就更加简单了

NODE_ENV=process.env.NODE_ENV
console.log('NODE_ENV:', NODE_ENV)

直接贴在node REPL 终端查看:

process对象为Node上下文的内置对象,可以直接获取,这个对象管理了node进程相关的数据。
比如 process.env就是我们获取环境变量设置的入口了(读者可以自行打印查看更多信息)。

配置一个环境变量,重试代码

export NODE_ENV=雷学委

打开node的终端

这里我们看到,设置的环境变量被进程内部读取到了。

继续根据环境自适应的profiling。

上面展示了设置不同变量代码中能够获取到该环境变量的值。

安照这个机制,我们可以把配置文件按照下面进行命名,让程序加载不同的文件名,比如下面:

  • config.dev.json
  • config.testing.json
  • config.prod.json

然后只需要写一份应用代码:

复制下面代码保存为app.js

//雷学委Demo代码
const NODE_ENV=process.env.NODE_ENV || 'dev'
console.log('NODE_ENV:', NODE_ENV)
//定位当前目录下的config.<环境类型>.json
const configPath = __dirname + '/config.' + NODE_ENV + '.json'
console.log('configPath:', configPath)
//加载并打印数据库的配置细节
const dbConfig = require(configPath)
console.log('dbConfig:', dbConfig)

我们直接来看效果;


运行代码在这:

#开发环境启动应用
node app.js
#测试环境启动应用
export NODE_ENV=testing && node app.js
#生产环境启动应用
export NODE_ENV=prod && node app.js

很轻松吧,一份代码根据不同的环境适配了。
实际运行应用app.js的服务器,上面会配置环境变量NODE_ENV为对应的dev/testing/prod值。
上面代码仅为原理展示。

好了到这里读者应该能够懂得profling如何做了。(可以三连了)

下面看看为什么。

为啥搞这么多外部配置,直接写在代码里面根据主机名字加载不好么?

一般企业会有大量的服务器,然后会把服务器划分为几类,比较典型的划分为:

很多中大公司会有下面这样一个划分:

这样能够把一个应用层层把关提拔到最上层的生产环境(production)。

学委想对小白说的: 比如说一个游戏的新功能,往往会经过开发机器调试,然后大量测试,把大量的潜在的重要的bug解决了,提拔到预发布,最后到生产环境。这个过程通过一些列的自动化测试,回归测试,可以大大保证系统的质量。还有一种高端玩法就是灰度发布,加上这个制度,这就是我们常说产品平滑上线的流程了。

这好像扯远了,产品发布这一套能再写亿篇!

我们回到主题,通常就是只开发一份代码,发布到不同环境之后,程序动态的连接到正确的数据库,加载对应的数据,数据虽不同但是程序在任意环境的行为要绝对一致。

这里配置外部化考量是:配置外部化可以减少代码跟环境的耦合

而不是发布一个类型的环境,就得修改代码。

特别是互联网/金融项目都会有严苛的质量把关,哪怕是修改一个标点符号,整个产品提升的过程都得从开发环境重新来过。

因此,配置外部化很有必要。

那么,应用能否跟外部环境毫无关联?

比较有经验的朋友,可能会想匿名函数,或者亚马逊的lamda,或者serverless app(无服务器应用)

如果业务没有任何环境区分,那就可以做到程序跟环境没有耦合,这就充分的说明了serverless的一个优点!(没有耦合,意味着随便拿一个云服务器部署,即可轻松实现弹性伸缩了,但这并非此文出发点,有机会再说)

对了,学委还有这个可以关注长期阅读 =>雷学委趣味编程故事汇编
或者=> 雷学委NodeJS系列

持续学习持续开发,我是雷学委!
编程很有趣,关键是把技术搞透彻讲明白。
创作不易,请多多支持,点赞收藏支持学委吧!

更多代码可以查看/Star: LearnNodeJS代码下载

19张图让你秒懂springcloud全家桶!

点击上方蓝色“终端研发部”,选择“设为星标”学最好的别人,做最好的我们 来源 | cnblogs.com/three-fighter/p/13485459.html本文用19张思维导图描述微服务相关的概念和架构,建议收藏。包括什么是微服务、架构演进、... 查看详情

数学和物理太难?这些gif让你秒懂抽象概念

...很难懂吗?今天我们来分享一组数学和物理相关的动图,让你秒懂抽象概念。数学动图△从椭圆的一个焦点射出的光线总会通过另一个焦点。△真人版。△一图看懂正弦、余弦和正切什么意思。△圆的面积。△如何理解圆的面积... 查看详情

让你秒懂的lambda表达式超级详细讲解(代码片段)

一、Lambda表达式(1)函数式编程思想概述在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿数据做操作”面向对象思想强调“必须通过对象的形式来做事情”函数式思想则尽量忽略面向对象的复... 查看详情

掌握tar命令让你秒变大牛

...,下面是整理文章的的一些命令与技巧,学习Tar命令将会让你处理文件时更加得心应手。Tar(TapeARchive,磁带归档的缩写;最初设计用于将文件打包到磁带上,现在我们大都使用它来实现备份某个分区或者某些重要的目录)是类U... 查看详情

3张图让你秒懂web3.0,从1.0到3.0你不知道的互联网的演进史!

Web3.0可以说是最近最火的词之一。简单说,Web3.0意味着互联网发展史进入到新阶段,把互联网带到全新的水平。计算机科学家和互联网专家认为,Web3.0会让互联网更加智能,让我们的生活更轻松。所以,为了... 查看详情

8大原则带你秒懂happens-before原则(代码片段)

摘要:在并发编程中,Happens-Before原则是我们必须要掌握的,今天我们就一起来详细聊聊并发编程中的Happens-Before原则。本文分享自华为云社区《【高并发】一文秒懂Happens-Before原则》,作者:冰河。在并发编... 查看详情

it轮子系列——dropdownlist的绑定,你秒懂了吗

前言 最近猛然惊觉(说是猛然,是因为自己工作那么多年,居然不自知、不反省),在开发中,自己碰到一些常用的功能代码块,还是习惯性的baidu,然后copy....这样的操作,不知自己重复了多少遍。现在回想起来,其实每... 查看详情

说软件测试太难学不会?几张图教你秒懂软件测试!图

前言软件测试太难学?几张图教你秒懂软件测试软件测试分类:软件开发模型测试模型最后为方便大家学习测试,特意给大家准备了一份13G的超实用干货学习资源,涉及的内容非常全面。包括,软件学习路线... 查看详情

说软件测试太难学不会?几张图教你秒懂软件测试!图

前言软件测试太难学?几张图教你秒懂软件测试软件测试分类:软件开发模型测试模型最后为方便大家学习测试,特意给大家准备了一份13G的超实用干货学习资源,涉及的内容非常全面。包括,软件学习路线... 查看详情

从零入门serverless|一文搞懂函数计算及其工作原理

...德慧(夏莞)?阿里云函数计算开发工程师本文整理自《Serverless技术公开课》,关注“Serverless”公众号,回复“入门”,即可获取Serverless系列文章PPT。什么是函数计算?大家都了解,Serverless并不是没有服务器,而是开发者不再... 查看详情

从零入门serverless|一文搞懂函数计算及其工作原理

...德慧(夏莞)?阿里云函数计算开发工程师本文整理自《Serverless技术公开课》,关注“Serverless”公众号,回复“入门”,即可获取Serverless系列文章PPT。什么是函数计算?大家都了解,Serverless并不是没有服务器,而是开发者不再... 查看详情

tcp协议图文秒懂(代码片段)

点击上方关注“终端研发部”设为“星标”,和你一起掌握更多数据库知识作为开发,TCP协议一定要搞明白,我们既要知道怎么使用,又要明白其原理。今天分享一篇TCP协议比较好的一篇文章,希望大家有所... 查看详情

android面试:整理了android面试官最常问的174道面试题,让你秒变offer收割机

本文是专为Android开发工程师准备的高薪面试真题汇总题库,涵盖历年大厂高频面试题总结+核心考点深度解析,可以帮助大家全面梳理知识点,并针对面试中可能遇到的问题进行深入分析,在众多面试者中脱颖... 查看详情

爆肝强烈推荐十多款2023年必备国内外王炸级ai工具(免费精品好用)让你秒变装逼佬,感受人工智能带来的生产力!

查看详情

163vip邮箱注册及登陆方法详解,一分钟秒懂!

...登陆方法是什么呢?一分钟!用吃一片厚切牛舌的时间带你秒懂!注册1、在百度搜索TOMvip邮箱,点击进入2、点击屏幕右侧的“立即注册按钮”3、选择套餐以及使用年限4、依次设置用户名、密码、再次输入密码、手机号、验证... 查看详情

云开发系列课程让你从入门到精通快速上手serverless和云开发技术

...:云开发系列课程主要介绍了从入门到精通快速上手Serverless和云开发技术。学习内容涵盖云开发协同、云函数、云数据库、多媒体托管、前后端一体化框架等ServerlessWeb开发必备知识。希望通过云开发系列课程的学习与实际... 查看详情

8道大厂指针笔试题让你秒杀指针!!!(代码片段)

这篇博客收录了8道大厂的指针笔试题,这8道题涵盖的知识点比较全面,所以我认为有必要分享出来,相信只要理解这8道题,那其他的指针题都会迎刃而解。废话不多说,直接上题:第一题:intmain()inta... 查看详情

漫画|一口气搞懂serverless!

简介: 第二届云原生编程挑战赛为热爱技术的年轻人提供一个挑战世界级技术问题的舞台,希望用技术为全社会创造更大价值。作者|刘欣呃,我可能是别人眼中所说的不用奋斗的一代。大家喜欢听的什么多姿多彩的... 查看详情