簡體   English   中英

如何在不重新啟動服務器的情況下將expressjs靜態模板部署到AWS?

[英]How to deploy expressjs static templates to AWS without restarting the server?

我有部署到AWS Elastic beantalk的express.js服務器服務器。 我使用車把引擎進行模板制作。 模板的結構更改比服務器代碼更頻繁,因此我希望有一種快速的方法來部署它們。 我已經嘗試過在單獨的S3靜態存儲桶上托管模板,然后從nodejs代碼加載它們。 這樣,我可以使用S3靜態部署真正快速地將更改部署到模板,而不是通過eb deploy重新啟動所有服務器節點。

這是我用於模板加載的node.js服務器代碼:

const s3 = new aws.S3();
s3.getObject({Bucket: 'bucketname.com', Key: 'views/' + path}, (err, data) => {
  const template = handlebars.compile(data.Body.toString('utf-8'));
  resolve(template);
});

這解決了模板部署速度的問題,但是我不確定它是否不會帶來額外的性能損失。 我以為,由於S3和Elastic beantalk都是亞馬遜服務,因此影響應該很小,但是網站基准使我不這么認為。

也許有更好的方法來解決模板部署速度的問題?

關於基准測試編號,我認為這是因為您的代碼每次需要渲染視圖時,都會嘗試從s3獲取視圖模板。 這些網絡呼叫將導致開銷。

在我以前的一個項目中,我曾經面臨過類似的挑戰。 但是,在我們的情況下,這些頻繁更改的模板的大小和數量都在可接受的范圍內,並且可以將它們存儲在內存中。

我們最終創建了一個不同的GIT存儲庫來存儲這些靜態模板。 express服務器將在啟動時加載這些模板並將其緩存在內存中。

每次模板更改(git repo中的新提交)時,我們都配置了一個Webhook來ping express服務器。 然后,服務器使其緩存無效,並從同一存儲庫加載新模板。 這樣,我們無需為靜態模板中的每個更改重新啟動服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM