修正错别字
This commit is contained in:
12
12.3.md
12
12.3.md
@@ -1,7 +1,7 @@
|
|||||||
# 12.3 应用部署
|
# 12.3 应用部署
|
||||||
程序开发完毕之后,我们现在要部署Web应用程序了,但是我们如何来部署这些应用程序呢?因为Go程序编译之后是一个可执行文件,编写过C程序的读者一定知道使用demon就可以完美的实现程序后台运行,但是目前Go还无法完美的实现demon,因此,针对Go的应用程序部署,我们可以利用第三方工具来管理,第三方的工具有很多,例如Supervisord、upstart、daemontools等,这小节我介绍目前自己系统中采用的工具Supervisord。
|
程序开发完毕之后,我们现在要部署Web应用程序了,但是我们如何来部署这些应用程序呢?因为Go程序编译之后是一个可执行文件,编写过C程序的读者一定知道使用daemon就可以完美的实现程序后台运行,但是目前Go还无法完美的实现daemon,因此,针对Go的应用程序部署,我们可以利用第三方工具来管理,第三方的工具有很多,例如Supervisord、upstart、daemontools等,这小节我介绍目前自己系统中采用的工具Supervisord。
|
||||||
## deamon
|
## deamon
|
||||||
目前Go程序如果要实现deamon还不行,详细的见这个Go语言的bug:http://code.google.com/p/go/issues/detail?id=227,大概的意思说很难从现有的使用的线程中fork一个出来,因为没有一种简单的方法来确保所有已经使用的线程的状态一致性问题。
|
目前Go程序如果要实现daemon还不行,详细的见这个Go语言的bug:http://code.google.com/p/go/issues/detail?id=227,大概的意思说很难从现有的使用的线程中fork一个出来,因为没有一种简单的方法来确保所有已经使用的线程的状态一致性问题。
|
||||||
|
|
||||||
但是我们可以看到很多网上的一些实现deamon的方法,例如下面两种方式:
|
但是我们可以看到很多网上的一些实现deamon的方法,例如下面两种方式:
|
||||||
|
|
||||||
@@ -104,12 +104,12 @@
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
上面提出了两种实现Go的deamon方案,但是我还是不推荐大家这样去实现,因为官方还没有正式的宣布支持deamon,当然第一种方案目前来看是比较可行的,而且目前开源库skynet也在采用这个方案做deamon。
|
上面提出了两种实现Go的daemon方案,但是我还是不推荐大家这样去实现,因为官方还没有正式的宣布支持daemon,当然第一种方案目前来看是比较可行的,而且目前开源库skynet也在采用这个方案做daemon。
|
||||||
|
|
||||||
## Supervisord
|
## Supervisord
|
||||||
上面已经介绍了Go目前是有两种方案来实现他的deamon,但是官方本身还不支持这一块,所以还是建议大家采用第三方成熟工具来管理我们的应用程序,这里我给大家介绍一款目前使用比较广泛的进程管理软件:Supervisord。Supervisord是用Python实现的一款非常实用的进程管理工具。supervisord会帮你把管理的应用程序转成daemon程序,而且可以方便的通过命令开启、关闭、重启等操作,而且它管理的进程一旦奔溃会自动再次重新开启,这样就可以保证程序中断的情况下有自我修复功能。
|
上面已经介绍了Go目前是有两种方案来实现他的daemon,但是官方本身还不支持这一块,所以还是建议大家采用第三方成熟工具来管理我们的应用程序,这里我给大家介绍一款目前使用比较广泛的进程管理软件:Supervisord。Supervisord是用Python实现的一款非常实用的进程管理工具。supervisord会帮你把管理的应用程序转成daemon程序,而且可以方便的通过命令开启、关闭、重启等操作,而且它管理的进程一旦奔溃会自动再次重新开启,这样就可以保证程序中断的情况下有自我修复功能。
|
||||||
|
|
||||||
>我前面在应用中踩过一个坑,就是因为所有的应用程序都是由Supervisord父进程生出来的,那么当你修改了操作系统的文件描述符之后,别忘记重启Supervisord,光重启下面的应用程序没用。当初我就是系统安装好之后就先装了Supervisord,然后开始部署程序,修改文件描述符,重启程序,以为文件描述符已经是100000了,其实Supervisord这个时候还是默认的1024个,导致他管理的进程所有的描述符也是1024.开放之后压力一上来里面狂暴文件描述符用光了,查了很久才找到这个坑。
|
>我前面在应用中踩过一个坑,就是因为所有的应用程序都是由Supervisord父进程生出来的,那么当你修改了操作系统的文件描述符之后,别忘记重启Supervisord,光重启下面的应用程序没用。当初我就是系统安装好之后就先装了Supervisord,然后开始部署程序,修改文件描述符,重启程序,以为文件描述符已经是100000了,其实Supervisord这个时候还是默认的1024个,导致他管理的进程所有的描述符也是1024.开放之后压力一上来系统就开发报文件描述符用光了,查了很久才找到这个坑。
|
||||||
|
|
||||||
### Supervisord安装
|
### Supervisord安装
|
||||||
Supervisord可以通过`sudo easy_install supervisor`安装,当然也可以通过Supervisord官网下载后`setup.py install`安装。
|
Supervisord可以通过`sudo easy_install supervisor`安装,当然也可以通过Supervisord官网下载后`setup.py install`安装。
|
||||||
@@ -172,7 +172,7 @@ Supervisord安装完成后有两个可用的命令行supervisor和supervisorctl
|
|||||||
- supervisorctl reload,载入最新的配置文件,并按新的配置启动、管理所有进程。
|
- supervisorctl reload,载入最新的配置文件,并按新的配置启动、管理所有进程。
|
||||||
|
|
||||||
## 小结
|
## 小结
|
||||||
这小节我们介绍了如何实现Go的deamon,但是我们知道由于目前Go的deamon实现不是很完美,我们需要依靠第三方工具来实现应用程序的deamon管理,这里介绍了一个python写的进程管理工具Supervisord,通过Supervisord可以很方便的把我们的Go应用程序管理起来。
|
这小节我们介绍了如何实现Go的daemon,但是我们知道由于目前Go的daemon实现不是很完美,我们需要依靠第三方工具来实现应用程序的daemon管理,这里介绍了一个python写的进程管理工具Supervisord,通过Supervisord可以很方便的把我们的Go应用程序管理起来。
|
||||||
|
|
||||||
|
|
||||||
## links
|
## links
|
||||||
|
|||||||
Reference in New Issue
Block a user