小编Chr*_*s F的帖子

如何使用多核,反向代理和SSL在云中部署Node.js以实现高可用性

我已将此发布到ServerFault,但Node.js社区似乎很小,所以我希望这会带来更多曝光.

我有一个Node.js(0.4.9)应用程序,正在研究如何最好地部署和维护它.我想在云端(EC2或RackSpace)以高可用性运行它.该应用应该在HTTPS上运行.稍后我会担心East/West/EU完全故障转移.

我已经做了大量关于keep-alive(Upstart,Forever),多核实用程序(Fugue,多节点,Cluster)和代理/负载均衡器(node-http-proxy,nginx,Varnish和Pound)的阅读.但是,我不确定如何结合我可用的各种实用程序.

我有这个设置,需要解决一些问题并获得反馈.

  1. Cluster是Node.js中最活跃且看似流行的多核实用程序,因此使用它在非特权端口(比如3000)上为每个应用服务器运行1个节点"集群".Q1:应该永远被用于保持集群活着还是只是多余的?
  2. 使用1个nginx的每端口80上运行的应用程序服务器,只需反向代理在端口3000节点Q2:请问节点-HTTP代理更适合,即使它不会很快gzip压缩或服务器静态文件这个任务?
  3. 如上所述,拥有最少2x的服务器,独立服务器充当这些盒子的负载均衡器.使用Pound listen 443终止HTTPS并将HTTP传递给Varnish,这将在上面的服务器的IP上循环负载平衡.问题3:是否应该使用nginx代替两者?问题4:是否应考虑使用AWS或RackSpace负载均衡器(后者不会终止HTTPS)

一般的问题:

  1. 你认为上面有(2)的需要吗?
  2. 终止HTTPS的最佳位置在哪里?
  3. 如果将来需要WebSockets,你会做出哪些nginx替换?

我真的很想知道人们如何建立当前的生产环境以及他们喜欢哪种工具组合.非常感激.

deployment node.js

46
推荐指数
1
解决办法
1万
查看次数

Upstart env节不为Node.js应用程序设置环境变量(如NODE_ENV)

我的服务器的Upstart脚本如下所示:

description "myapp node.js server"

start on runlevel [2345]
stop on shutdown

env NODE_ENV=production
env CUSTOM=somevalue
exec sudo -u nodejs /usr/local/bin/node /opt/myapp/app.js >> /var/log/nodejs/myapp.log 2>&1

post-start script
    NODE_PID=`status myapp | egrep -oi '([0-9]+)$' | head -n1` 
    echo $NODE_PID > /var/run/nodejs/myapp.pid
end script
Run Code Online (Sandbox Code Playgroud)

但是,该应用程序未将NODE_ENV设置为生产.事实上,如果我在app中使用console.log(process.env),我看不到NODE_ENV或CUSTOM.有什么想法发生了什么?

顺便说一句,NODE_ENV =生产节点app.js工作正常.

ubuntu upstart environment-variables node.js

27
推荐指数
1
解决办法
3万
查看次数

当太多依赖项注入服务或控制器时重构的策略

我有一个ASP.NET MVC 1应用程序,它使用NHibernate和Castle Windsor用于IoC.控制器注入了服务类,这些服务类处理应用程序所需的所有逻辑和操作.服务类注入了存储库.每个存储库处理单个对象.对象通过NH映射到DB表.我试图在服务和控制器之间保持一对一的关系,但是一些服务在多个控制器中使用.

问题是某些服务现在依赖于10-15个存储库.例如,系统具有开票组件,其中某些操作取决于用户,客户,工作单,工作单行项目,发票,发票行项目,税金等.

当涉及到依赖性过载时,人们用什么策略来有效地重构?我正在考虑将一个服务拆分为多个服务,并删除服务和控制器之间的一对一尝试.但随后控制器级别的依赖性将增加.在事先建议的情况下,可以将一个控制器拆分成多个控制器,但我不相信,除非您将视图分解为部分视图,否则不会这样做?我意识到这是一个广泛的问题,但我更需要指导而不是确切的答案.随意提供类似重构的文章或示例的链接.

asp.net-mvc refactoring dependency-injection

11
推荐指数
2
解决办法
2608
查看次数

以守护程序形式运行Redis并使用Upstart来管理它不起作用

我为Redis编写了一个Upstart脚本,如下所示:

description "Redis Server"

start on runlevel [2345]
stop on shutdown
expect daemon

exec sudo -u redis /usr/local/bin/redis-server /etc/redis/redis.conf

respawn
respawn limit 10 5
Run Code Online (Sandbox Code Playgroud)

然后我通过它的redis.conf配置redis到:

daemonize yes
Run Code Online (Sandbox Code Playgroud)

所有文档和我自己的实验都表示Redis以守护进程形式分叉两次并且"expect daemon"应该可以工作,但Upstart脚本始终保持前父级的PID(PID-1).有人有这个工作吗?

daemon upstart redis

5
推荐指数
2
解决办法
7836
查看次数

需要正则表达式来验证 URL 并支持 %20 和 ()

我目前正在使用以下正则表达式来验证 URL:

^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)?  (?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|edu|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$
Run Code Online (Sandbox Code Playgroud)

我从网络上的某个地方借用了这个(不记得在哪里)来改进这一点:

^((https?|file|ftp|gopher|news|nntp):\/\/)([a-z]([a-z0-9\-]*\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&]*)?)?(#[a-z][a-z0-9_]*)?$
Run Code Online (Sandbox Code Playgroud)

但是,这些都无法验证此 url(应该是有效的):

http://somedomain.com/users/1234/images/Staff%20Photos%202008/FirstName%20LastName_1%20(Small).jpg
Run Code Online (Sandbox Code Playgroud)

问题在于 %20 和圆括号 ()。尽我所能,我无法使用上面的任何一个正则表达式来正确验证上面的 url,而不会破坏其他内容。我没有编写花哨的正则表达式的经验,所以这也没有帮助。我发现的所有其他网络结果都因愚蠢的事情而失败,例如:

http://www.test..com
Run Code Online (Sandbox Code Playgroud)

如有帮助,将不胜感激。

regex validation url url-validation

4
推荐指数
1
解决办法
1467
查看次数

ASP.NET MVC中htmlAttributes的匿名类和IDictionary <string,object>之间的速度差异

我正在尝试使用一些技术来优化我的ASP.NET MVC应用程序,这些技术包括调整URL生成:http://www.chadmoran.com/blog/2009/4/23/optimizing-url-generation-in-aspnet- MVC-部分2.HTML

如果使用RouteValueDictionary代替匿名类之间的速度差异很大,那么在定义html属性时我是否还应该使用Dictionary代替匿名类?

例如,我应该这样做:

Html.ActionLink("LinkName", "Action", "Controller",
                new RouteValueDictionary { { "id", Model.Id } },
                new { @class = "someCSSClass" })
Run Code Online (Sandbox Code Playgroud)

或者我应该通过这样做进一步优化:

Html.ActionLink("LinkName", "Action", "Controller",
                new RouteValueDictionary { { "id", Model.Id } },
                new Dictionary<string, object> { { "class", "someCSSClass" } })
Run Code Online (Sandbox Code Playgroud)

我知道使用Url.Action更快,或者更好地使用RouteLink技术,但我只是想知道为了速度,是否应该完全避免使用匿名类.

html url asp.net-mvc anonymous-class

2
推荐指数
1
解决办法
1038
查看次数

在ASP.NET MVC中构建ActionLinks时是否应该调用Html.Encode

如果从数据库中提取链接的名称,您是否应该调用Html.Encode方法来清除名称?

例如:

Html.ActionLink(Model.PersonFromDB.FirstName,
                "Action",
                "Controller",
                new RouteValueDictionary { { "id", Model.PersonFromDB.Id } },
                null)
Run Code Online (Sandbox Code Playgroud)

要么:

Html.ActionLink(Html.Encode(Model.PersonFromDB.FirstName),
                "Action",
                "Controller",
                new RouteValueDictionary { { "id", Model.PersonFromDB.Id } },
                null)
Run Code Online (Sandbox Code Playgroud)

有意义的是你想要这样做以确保没有危险的字符串注入到页面之间<a></a>标签之间,但是脚本和锚标签之间的可执行文件?

asp.net-mvc html-encode actionlink

2
推荐指数
1
解决办法
776
查看次数

对于SQL select,返回多于1个值,当Id为GUID时,它们如何排序?

我想知道SQL Server如何命令从查询返回的数据,并且各个表的Id列都是uniqueidentifier类型.

我在创建所有GUID时使用NHibernate GuidComb并执行以下操作:

Sheet sheet = sheetRepository.Get(_SheetGuid_); // has many lines items
IList<SheetLineItem> lineItems = sheet.LineItems;
Run Code Online (Sandbox Code Playgroud)

我只想弄清楚当我做以下事情时如何订购它们:

foreach (SheetLineItem lineItem in lineItems)
Run Code Online (Sandbox Code Playgroud)

我无法在订购时找到关于GUID与SQL进行比较的方式的好文章,如果这是正在发生的事情.

sql t-sql sql-server nhibernate uniqueidentifier

2
推荐指数
1
解决办法
225
查看次数