第12章错别字修改

This commit is contained in:
Jerry Zhang
2013-01-26 14:37:39 +08:00
parent a0fa02d9fa
commit 2c834fcb8b
5 changed files with 8 additions and 8 deletions

View File

@@ -1,7 +1,7 @@
# 12 部署与维护
到目前为止我们前面已经介绍了如何开发程序、调试程序以及测试程序正如人们常说的开发最后的10%需要花费90%的时间所以这一章我们将强调这最后的10%部分要真正成为让人信任并使用的优秀应用需要考虑到一些细节以上所说的10%就是指这些小细节。
本章我们将通过四个小节来介绍这些小细节的处理第一小节介绍如何在生产服务上记录程序产生的日志如何记录日志第二小节介绍发生错误时我们的程序如何处理如何保证尽量少的影响到用户的访问第三小节介绍如何来部署Go的独立程序由于目前Go程序还无法像C那样写成daemon那么我们如何管理这样的进程程序后台运行呢第四小节介绍应用数据的备份和恢复,尽量保证应用在溃的情况能够保持数据的完整性。
本章我们将通过四个小节来介绍这些小细节的处理第一小节介绍如何在生产服务上记录程序产生的日志如何记录日志第二小节介绍发生错误时我们的程序如何处理如何保证尽量少的影响到用户的访问第三小节介绍如何来部署Go的独立程序由于目前Go程序还无法像C那样写成daemon那么我们如何管理这样的进程程序后台运行呢第四小节介绍应用数据的备份和恢复,尽量保证应用在溃的情况能够保持数据的完整性。
## 目录
![](images/navi12.png?raw=true)

View File

@@ -1,5 +1,5 @@
# 12.1 应用日志
我们期望开发的Web应用程序能够把整个程序运行过程中出现的各种事件一一记录下来Go语言中提供了一个简易的log包我们使用该包可以方便的实现日志记录的功能这些日志都是基本的给予fmt包的打印再结合panic之类的一些函数来处理我们一般的打印抛出错误之类的。如果我们想把我们的应用日志保存到文件然后又能够结合日志实现很多复杂的功能编写过Java或者C++的读者应该都使用过log4j和log4cpp之类的日志工具Go目前标准包就如前面介绍的只是包含了一个简单的包但是目前第三方开发的一个日志系统实现了很强大的日志功能`https://github.com/cihub/seelog`,接下来我们介绍如何该日志系统来实现我们应用的日志功能。
我们期望开发的Web应用程序能够把整个程序运行过程中出现的各种事件一一记录下来Go语言中提供了一个简易的log包我们使用该包可以方便的实现日志记录的功能这些日志都是基本的给予fmt包的打印再结合panic之类的一些函数来处理我们一般的打印抛出错误之类的。如果我们想把我们的应用日志保存到文件然后又能够结合日志实现很多复杂的功能编写过Java或者C++的读者应该都使用过log4j和log4cpp之类的日志工具Go目前标准包就如前面介绍的只是包含了一个简单的包但是目前第三方开发的一个日志系统实现了很强大的日志功能`https://github.com/cihub/seelog`,接下来我们介绍如何通过该日志系统来实现我们应用的日志功能。
## seelog介绍
seelog是用Go语言实现的一个日志系统它提供了一些简单的函数来实现复杂的日志分配、过滤和格式化。主要有如下特性

View File

@@ -20,7 +20,7 @@
- 通知访问用户出现错误了不论出现的是一个系统错误还是用户错误用户都应当知道Web应用出了问题用户的这次请求无法正确的完成了。例如用户的错误请求我们显示一个统一的错误页面(404.html),出现系统错误我们通过自定义的错误页面显示系统暂时不可用之类的错误页面(error.html)
- 记录错误系统出错错误时一般就是我们调用函数的时候返回err不为nil的情况下使用前面小节介绍的日志系统记录到日志文件如果是一些致命错误通过邮件通知系统管理员例如一般404之类的错误不需要发送邮件只需要记录到日志系统。
- 回滚当前的请求操作:如果一个用户请求过程中出现了一个服务器错误,那么已完成的操作需要回滚。下面来看一个例子:一个系统用户递交的表单保存到数据库,并将这个数据递交到一个第三方服务器,但是第三方服务器挂了,这就导致一个错误,那么先前存储到数据库的表单数据应该删除(应告知无效),而且应该通知用户系统出现错误了。
- 回滚当前的请求操作:如果一个用户请求过程中出现了一个服务器错误,那么已完成的操作需要回滚。下面来看一个例子:一个系统用户递交的表单保存到数据库,并将这个数据递交到一个第三方服务器,但是第三方服务器挂了,这就导致一个错误,那么先前存储到数据库的表单数据应该删除(应告知无效),而且应该通知用户系统出现错误了。
- 保证现有程序可运行可服务:我们知道没有人能保证程序一定能够一直正常的运行着,万一哪一天程序崩溃了,那么我们就需要记录错误,然后立刻让程序重新运行起来,让程序继续提供服务,然后再通知系统管理员,通过日志等找出问题。
## 如何处理错误

View File

@@ -109,7 +109,7 @@
## Supervisord
上面已经介绍了Go目前是有两种方案来实现他的daemon但是官方本身还不支持这一块所以还是建议大家采用第三方成熟工具来管理我们的应用程序这里我给大家介绍一款目前使用比较广泛的进程管理软件Supervisord。Supervisord是用Python实现的一款非常实用的进程管理工具。supervisord会帮你把管理的应用程序转成daemon程序而且可以方便的通过命令开启、关闭、重启等操作而且它管理的进程一旦崩溃会自动重启这样就可以保证程序执行中断后的情况下有自我修复的功能。
>我前面在应用中踩过一个坑就是因为所有的应用程序都是由Supervisord父进程生出来的那么当你修改了操作系统的文件描述符之后别忘记重启Supervisord光重启下面的应用程序没用。当初我就是系统安装好之后就先装了Supervisord然后开始部署程序修改文件描述符重启程序以为文件描述符已经是100000了其实Supervisord这个时候还是默认的1024个导致他管理的进程所有的描述符也是1024.开放之后压力一上来系统就开报文件描述符用光了,查了很久才找到这个坑。
>我前面在应用中踩过一个坑就是因为所有的应用程序都是由Supervisord父进程生出来的那么当你修改了操作系统的文件描述符之后别忘记重启Supervisord光重启下面的应用程序没用。当初我就是系统安装好之后就先装了Supervisord然后开始部署程序修改文件描述符重启程序以为文件描述符已经是100000了其实Supervisord这个时候还是默认的1024个导致他管理的进程所有的描述符也是1024.开放之后压力一上来系统就开报文件描述符用光了,查了很久才找到这个坑。
### Supervisord安装
Supervisord可以通过`sudo easy_install supervisor`安装当然也可以通过Supervisord官网下载后解压并转到源码所在的文件夹下执行`setup.py install`来安装。

View File

@@ -19,7 +19,7 @@ rysnc的官方网站http://rsync.samba.org/ 可以从上面获取最新版本
tar xvf rsync-xxx.tar.gz
cd rsync-xxx
./configure --prefix=/usr ;make ;make install 注在用源码包编译安装之前您得安装gcc等编译具才行;
./configure --prefix=/usr ;make ;make install 注在用源码包编译安装之前您得安装gcc等编译具才行;
### rsync配置
rsync主要有以下三个配置文件rsyncd.conf(主配置文件)、rsyncd.secrets(密码文件)、rsyncd.motd(rysnc服务器信息)。
@@ -149,9 +149,9 @@ rsync主要有以下三个配置文件rsyncd.conf(主配置文件)、rsyncd.secr
00 00 * * * /root/mysql_backup.sh
## MySQL恢复
前面介绍MySQL备份分为热备份和冷备份热备份主要目的是为了能够实时的恢复例如应用服务器出现了硬盘故障那么我们可以通过修改配置文件把数据库的读取和写入改成slave这样就可以尽量少时间的中断服务。
前面介绍MySQL备份分为热备份和冷备份热备份主要目的是为了能够实时的恢复例如应用服务器出现了硬盘故障那么我们可以通过修改配置文件把数据库的读取和写入改成slave这样就可以尽量少时间的中断服务。
但是有时候我们需要通过冷备份的SQL进行数据恢复,既然有了数据库的备份,就可以通过命令导入:
但是有时候我们需要通过冷备份的SQL进行数据恢复,既然有了数据库的备份,就可以通过命令导入:
mysql -u username -p databse < backup.sql
@@ -163,7 +163,7 @@ redis是目前我们使用最多的NoSQL它的备份也分为两种热备
## redis恢复
redis的恢复分为热备份恢复和冷备份恢复热备份恢复的目的和方法同MySQL的恢复一样只要修改应用的相应的数据库连接即可。
但是有时候我们需要根据冷备份来恢复数据redis的冷备份恢复其实就是只要把保存的数据库文件copy到redis的编译目录然后启动redis就可以了redis在启动的时候会自动加载数据库文件到内存中启动的速度根据数据库的文件大小来决定。
但是有时候我们需要根据冷备份来恢复数据redis的冷备份恢复其实就是只要把保存的数据库文件copy到redis的工作目录然后启动redis就可以了redis在启动的时候会自动加载数据库文件到内存中启动的速度根据数据库的文件大小来决定。
## 小结
本小节介绍了我们的应用部分的备份和恢复即如何做好灾备包括文件的备份、数据库的备份。同时也介绍了使用rsync同步不同系统的文件MySQL数据库和redis数据库的备份和恢复希望通过本小节的介绍能够给作为开发的你对于线上产品的灾备方案提供一个参考方案。