开发便于运维的Windows服务
过去几个月,DevOps on Windows网站推出了一系列文章,详细讲解了开发者应怎样创建便于运维的Windows服务。这一系列文章详细分析了如何克服在运维部门看来最困难的部分:Windows服务的安装与其启动阶段。
其中有些困难是由于安装基于.Net的Windows服务时,普遍使用了InstallUtil这个非原生的Windows工具。同时要特别当心启动阶段的代码,它应在启动失败时确保提供清晰的错误信息,并且要能够支持运行时间较长的操作,例如从数据库中装载与缓存数据。
DevOps on Windows网站为应对这些挑战提出的建议是基于某个非常简单的框架来创建Windows服务,这个框架的基本前提是自包含性:即某个Windows服务应用必须了解如何安装自己,并且妥善地处理启动阶段的各种错误。这个框架最主要的部分是以下三个类:BasicServiceInstaller、BasicService与BasicServiceStarter。
BasicServiceInstaller提供了自行安装与卸载的功能,它为应用程序返回一个Installer对象,这个类提供了创建定制化安装过程的基本功能。自行安装功能意味着运维团队不需要再使用sc或InstallUtil之类的外部工具了。
BasicService确保你在启动阶段正确地与服务控制管理器进行交互,作为一种最佳实践。这个Windows进程会管理所有已注册的Windows服务的方方面面,包括它们的整个生命周期,并在此阶段决定这些服务所应遵循的规则。BasicService在以下两个方面为你提供帮助:它首先确保Windows服务无法启动时,会将有意义的错误代码返回给服务控制管理器。其次,它帮助开发者在启动阶段执行运行时间较长的操作,并且不必担心服务控制管理器会强制中止这个Windows服务。
最后,BasicServiceStarter将负责决定这个应用的运作模式:安装服务、卸载服务、以控制台方式运行,或者是以Windows服务方式运行。BasicServiceStarter还确保在Windows服务启动阶段可能发生的任何后台线程的异常信息都将报告给Windows事件日志。
这一系列共包含7篇文章,详细解释了这个框架的各种细节。这个网站的观点是:“与其关注于自动化,不如更加关注于你的软件的一致性与简单性”。
查看英文原文:Operations-Friendly Windows Services
开发便于运维的Windows服务的更多相关文章
- Redis开发与运维学习笔记
<Redis开发与运维>读书笔记 一.初始Redis 1.Redis特性与优点 速度快.redis所有数据都存放于内存:是用C语言实现,更加贴近硬件:使用了单线程架构,避免了多线程竞争 ...
- 百度王一男: DevOps 的前提是拆掉业务-开发-测试-运维中间的三面墙
这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变. 由数人云.优维科技.中生代社区联合发起的 系列 Meetup < DevOps&SRE 超越传统运维之道&g ...
- Redis开发与运维:SDS
STRING 我们会经常打交道的string类型,在redis中拥有广泛的使用.也是开启redis数据类型的基础. 在我最最开始接触的redis的时候,总是以为字符串类型就是值的类型是字符串. 比如: ...
- redis 学习(20)-- 常见的持久化开发与运维问题
常见的持久化开发与运维问题 fork 操作 fork 操作是一个同步操作,若执行较慢会阻塞 redis 主线程 执行时间与内存量相关:内存越大,耗时越长:虚拟机较慢,真机较快 查看 fork 执行时间 ...
- 从谷歌CRE谈起,运维如何培养服务意识?
从谷歌CRE谈起,运维如何培养服务意识? 2016年10月,谷歌云平台博客(Google Cloud Platform Blog)上更新了一篇文章,谷歌宣布了一个新的专业岗位,CRE(Customer ...
- Redis 开发与运维
Getting Start 高性能 性能优势的体现 C语言实现的内存管理 epoll的I/O多路复用技术+IO连接/关闭/读写通过事件实现异步的非阻塞IO TCP协议 单线程架构,不会因为高并发对服务 ...
- C#开发可以可视化操作的windows服务
使用C#开发自定义windows服务是一件十分简单的事.那么什么时候,我们需要自己开发windows服务呢,就是当我们需要计算机定期或者一 直执行我们开发的某些程序的时候.我经常看到许多人开发的win ...
- python bottle框架(WEB开发、运维开发)教程
教程目录 一:python基础(略,基础还是自己看书学吧) 二:bottle基础 python bottle web框架简介 python bottle 框架环境安装 python bottle 框架 ...
- 【C#】开发可以可视化操作的windows服务
使用C#开发自定义windows服务是一件十分简单的事.那么什么时候,我们需要自己开发windows服务呢,就是当我们需要计算机定期或者一直执行我们开发的某些程序的时候.这里我以一个WCF的监听服务为 ...
随机推荐
- vue简单使用
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- java相关的小问题
对线程异常的处理 调用Thread的静态方法Thread.setDefaultUncaughtExceptionHandler()
- 在IIS8.5的环境下配置WCF的Restful Service
今天在客户的环境中(Windows Server 2012 R2 + IIS 8.5)搭建Call WCF Restful Service的功能,发现了几个环境配置的问题,记录如下: 1):此环境先安 ...
- 移动端js知识总结
1.如果使用jquery绑定touch事件的话,获取touchstart,touchmove的触点坐标用 e.originalEvent.targetTouches[0].pageX, 获取touch ...
- 毕业论文中使用的技术—FileReader接口
用来把文件读入内存,并且读取文件中的数据. FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据 FileReader接口的方法 方法名 参 ...
- 关于UnsupportedClassVersionError的错误处理
错误:Java.lang.UnsupportedClassVersionError: Bad version number in .class file 造成这种错误的原因是你的支持Tomcat运行的 ...
- mybatis自增长插入id
第一种: <insert id="insertUser" parameterClass="ibatis.User"> <selectKey r ...
- [知识点]字符串Hash
1.前言 字符串的几大主要算法都多少提及过,现在来讲讲一个称不上什么算法, 但是非常常用的东西——字符串Hash. 2.Hash的概念 Hash更详细的概念不多说了,它的作用在于能够对复杂的状态进行简 ...
- 【生活没有希望】poj1273网络流大水题
你不能把数据规模改大点吗= =我优化都不加都过了 #include <cstdio> #define INF 2147483647 int n,m,ans,x,y,z,M; ],l[],f ...
- UBUNTU 16.04 编译 OPENJDK8
参考了几篇文章,和错误查询,最后总结如下 一.下载 我比较倾向于使用mercurial来获取源代码,虽然你得挑网络稳定的时候更新,但是易更新. 从官网查找一下,可以通过以下步骤完成源代码的下载 1. ...