开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
安全的发布 .NET 应用的改动到产品服务器环境 - 技术翻译 - 开源中国社区

安全的发布 .NET 应用的改动到产品服务器环境 【已翻译100%】

oschina 推荐于 4年前 (共 4 段, 翻译完成于 03-09) 评论 7
收藏  
47
推荐标签: IIS 待读

当你往生产环境的服务器上布署增量式的变化时,服务器正在运行且一直都是可用的,你有时会看到这样的错误消息“编译错误消息:类型'XXX'同时存在于……” 有时,你会发现Application_start事件没有启动,虽然你已经装载了类、动态链接库或者web.config配置文件。有时,你会发现静态变量没有初始化,等等。当你增量式的布署变化到服务器时,有许多奇怪的事情会在网络服务器上发生,这些服务器已经启动并运行了许多周了。因此我想出了简便的步骤,这些步骤是我们在向在服务器布署增量式的变化时总要做的事情。这些步骤可以确保网站可以被恰当的回收,缓存可以被清理,所有存储在应用层的数据都被初始化。

LitStone
 翻译得不错哦!

首先,在负载均衡器后面你部署了多个Web服务器。这样,你就可以让其中一台服务器脱离生产环境,然后对其进行部署和一些脱离生产环境后才能执行的任务,比如重新启动IIS,然后再把这台服务器放回到生产环境。接着你就可以对第二台服务器做同样的操作,以此类推。这样给客户提供的服务就不会中断。如果你做这一切速度相当快,那么幸运的话客户将不会意识到服务器之间有一些不一致:一些已经是新代码,一些还是旧代码。只有更改的内容不是很多时,你才可以做到这些。例如,你没有发布完成经过完全修改的UI。这种情况下,一些正好访问已经是最新UI的server1的用户突然看到完全不同的界面,然后刷新下一个页面,它们可能正好访问的是还是旧代码的server2,那么看到的是完全不同于前一次的界面。因此,只有非大量的增加型更改才能这么做。

image

几点人
 翻译得不错哦!

部署的时候,请遵循以下步骤:

  • 把服务器X从负载均衡器组中脱离出来,这样这台服务器就不会有任何服务交互了

  • 停止这台服务器上运行的所有.NET Windows 服务

  • 停止IIS

  • 如果你运行了多个版本的.NET,那么请删除所有.NET版本的临时ASP.NET文件夹。如果你不清楚怎么删除,那么请看这个链接

  • 部署更改的内容

  • 生成你用到的分布式缓冲,比如,Velocity 或者Memcached。

  • 启动IIS

  • 启动这台服务器上的的.NET Windows服务。

  • 点击主要的URL激活这些Web站点。你应当编写一些自动执行的脚本做这些事情。你可以使用tinyget实现点击一些主要的URL,尤其是访问那些需要很长时间才能编译的页面。要实现零代码访问,请阅读我的博文: 始终激活web站点

  • 把这台服务器放回到负载均衡器组里,这样它就可以接收访问了。

以上就是整个操作步骤。此时你应该非常清楚如何部署了,这样也就不会出现意向不到的错误了。你应当把这些步骤打印出来,并把它悬挂在哪些部署人员的桌面上方,这样在部署紧张的时候部署人员就不会忘记该怎么做了。

手动完成所有这些步骤很冒险。在部署时间紧张的时候,生产环境的部署人员就可能操作失误,从而把服务器搞得一团糟。因此我总是提前编写一个批处理文件,用它来实现服务器脱离生产环境并为部署代码做一些准备工作,然后再部署完成,服务器激活之后,使用另一个批处理文件把服务器放回到负载均衡交互式轮询组里。

几点人
 翻译得不错哦!

通常负载均衡器都被配置为访问web站点的某个网页,如果这个网页返回的是HTTP 200,那么这个服务器就是存活的。如果没有返回HTTP 200,那么负载均衡器就认为这台服务器已经挂死,然后就把这台服务器剔除出轮询组了。例如,假设web站点上存在文件alive.txt,这个文件是负载均衡器密切关注的文件。如果这个文件被删除,那么这台服务器就会脱离轮询组了。遇到这种情况,你就可以创建批处理文件来完成服务器脱离负载均衡轮询组的工作,然后等待几秒以确保完成正在运行的请求,接着停止IIS,删除临时性的ASP.NET文件,准备在这台服务器上部署。要做的这些工作如下批处理:

serverout.bat
=====================
Ren alive.txt dead.txt
typeperf "\ASP.NET Applications(__Total__)\Requests Executing" -sc 30
iisreset /stop
rmdir /q /s "C:\WINDOWS\Microsoft.NET\Framework64\v1.1.4322\Temporary ASP.NET Files"
rmdir /q /s "C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files"
md "C:\WINDOWS\Microsoft.NET\Framework64\v1.1.4322\Temporary ASP.NET Files"
md "C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files"
xcacls "C:\WINDOWS\Microsoft.NET\Framework64\v1.1.4322\Temporary ASP.NET Files" 
/E /G MYMACHINE\IIS_WPG:F /Q
xcacls "C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files" 
/E /G MYMACHINE\IIS_WPG:F /Q

与上面所做的工作类似,你还应该创建一个批处理文件,用它来启动IIS,激活某些网页,然后把这台服务器放回到负载均衡器轮询组里。

serverin.bat
============
SET TINYGET=C:\Program Files (x86)\IIS Resources\TinyGet\tinyget.exe
iisreset /start"%TINYGET%" -srv:localhost -uri:http://localhost/ -status:200
ren dead.txt alive.txt
typeperf "\ASP.NET Applications(__Total__)\Requests Executing" -sc 30

通常总试图自动地完成这样的管理杂务。因为在紧急部署的时候,要做到始终手工正确地完成这些工作是很困难的。

几点人
 翻译得不错哦!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们
评论(7)
Ctrl/CMD+Enter

顶下

引用来自“Tenzing”的评论

顶下

点击此处输入评论
看看~
这标题鲁棒得很啊
很有价值的文章!
好文
顶部