Как оптимизировать приложение REST API Nodejs 24/7 для бесплатной героки или openshift - PullRequest
0 голосов
/ 10 мая 2019

В настоящее время я создаю приложение Nodejs API. По сути, он вызывает несколько тикеров из бирж, каждые T секунд, а затем предоставляет конечную точку, которая дает консолидированный JSON в качестве вывода. Проблема, с которой я сталкиваюсь, заключается в ее развертывании.

Многие облачные решения сильно заряжаются, поэтому я не могу запустить это приложение 24/7. Но если я остановлюсь, это также будет означать потерю данных (я бы создал другое приложение, которое получает этот тикер и сохраняет в базе данных).

Например, в Redhat openshift , для бесплатной опции, приложение должно спать 18 часов в течение 72 часов. Если мое приложение спит 4 минуты на каждые 5 минут, это легко спит около 57 часов. У меня вопрос, как мне сделать, чтобы мое приложение это делало?

Q1: Простой set timeout вызов функции?
Q2: Если я должен использовать фоновых работников для этого, как мне это сделать? Не могли бы вы объяснить на простом примере, скажем, с помощью redis, если это возможно, с w.r.t heroku или openshift?

Я планирую попробовать его на бесплатном плане Heroku или бесплатном Openshift.

ИСТОЧНИК: Для краткости я включил только основной контент сервера. Особенно шаг 4.1 Start Ticker - это тот, который выполняет задание, вызванное функцией settimeout в конце.

//1. Import
var express = require('express');
var path = require('path');
var routes = require('./routes/route.js');
var fs = require('fs'); // to clean up the file

//2. Initiate
var app = express();
var http = require('http').Server(app);


//3. Configure
app.use(express.static(path.join(__dirname, '../client/public')));
app.use(express.json())  // for POST body parser
app.set('views', path.join(__dirname, '../client/views'));
app.set("view engine","ejs");

//4. Setup Routing
app.get("/",routes.home);
app.get("/ticker",routes.ticker);


//4.1 Start Ticker
var ticker = require('./ticker/ticker.js');
var tickerCounter = 0;
function periodicTicker() 
{        
    ticker.go();
    ++tickerCounter;
    console.log("Ticker Count: " + tickerCounter);
} 


//5. Listen
var port = process.env.PORT || 8080;
var server = http.listen(port,
    function(request,response)
    {
        console.log(`Node Server started. Running at http://localhost:${port}/`);
    }
);

//6. Repeat ticker forever..
setInterval(periodicTicker, 2000);   //2 seconds

...