搞不定Serverless?让你秒懂掌握Profiling让一份程序优雅自适应

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介: 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 终端查看:

image.png

process对象为Node上下文的内置对象,可以直接获取,这个对象管理了node进程相关的数据。

比如 process.env就是我们获取环境变量设置的入口了(读者可以自行打印查看更多信息)。

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

export NODE_ENV=雷学委

打开node的终端

image.png

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


继续根据环境自适应的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)

我们直接来看效果;

image.png

运行代码在这:

#开发环境启动应用
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如何做了。(可以三连了)


下面看看为什么。


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

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


image.png

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

image.png

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

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


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


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


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


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


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


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


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

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


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


相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
8月前
|
JavaScript 前端开发 Serverless
函数计算只支持Node.js,我用C++写的程序怎么运行?
函数计算只支持Node.js,我用C++写的程序怎么运行?
119 1
|
5月前
|
JavaScript Java Serverless
函数计算产品使用问题之如何使用Node.js编写程序
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
存储 弹性计算 监控
函数计算产品使用问题之程序正常运行,但无法在 /home/lang_serve_severless_log 下找到日志文件,该如何排查
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
8月前
|
运维 Serverless Go
Serverless 应用引擎产品使用之在阿里云函数计算中c++模板,将编译好的C++程序放进去部署如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
8月前
|
Web App开发 Java Serverless
Serverless 应用引擎操作报错合集之阿里函数计算中,使用自定义运行时部署程序时,发现Chrome层已经建立但运行程序仍然缺失如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
8月前
|
运维 Serverless Go
Serverless 应用引擎产品使用之在阿里云函数计算中,Go语言的函数计算服务Go程序没有正确打包如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
8月前
|
Serverless 开发者 微服务
serverless应用引擎问题之程序包维护如何解决
在进行Serverless应用开发和部署时,开发者可能会遇到不同类型的报错信息;本合集着重收录了Serverless环境中常见的报错问题及其解决策略,以助于开发者迅速诊断和解决问题,保证服务的连续性和可用性。
271 1
|
监控 安全 JavaScript
函数计算构建弹性应用程序介绍
函数计算构建弹性应用程序介绍
108 2
|
关系型数据库 MySQL Serverless
RDS入门——RDS MySQL Serverless资源与负载自适应
通过本教程的操作,可以掌握如何创建RDS Serverless版实例、配置RDS Serverless版实例和体验RDS Serverless动态计费。
|
弹性计算 关系型数据库 Serverless
RDS MySQL Serverless资源与负载自适应
本场景主要介绍如何创建RDS Serverless版实例、配置RDS Serverless版实例和体验RDS Serverless动态计费。

相关产品

  • 函数计算