过去几个月,DevOps on Windows网站推出了一系列文章,详细讲解了开发者应怎样创建便于运维的Windows服务。这一系列文章详细分析了如何克服在运维部门看来最困难的部分:Windows服务的安装与其启动阶段。

其中有些困难是由于安装基于.Net的Windows服务时,普遍使用了InstallUtil这个非原生的Windows工具。同时要特别当心启动阶段的代码,它应在启动失败时确保提供清晰的错误信息,并且要能够支持运行时间较长的操作,例如从数据库中装载与缓存数据。

DevOps on Windows网站为应对这些挑战提出的建议是基于某个非常简单的框架来创建Windows服务,这个框架的基本前提是自包含性:即某个Windows服务应用必须了解如何安装自己,并且妥善地处理启动阶段的各种错误。这个框架最主要的部分是以下三个类:BasicServiceInstallerBasicServiceBasicServiceStarter

BasicServiceInstaller提供了自行安装与卸载的功能,它为应用程序返回一个Installer对象,这个类提供了创建定制化安装过程的基本功能。自行安装功能意味着运维团队不需要再使用sc或InstallUtil之类的外部工具了。

BasicService确保你在启动阶段正确地与服务控制管理器进行交互,作为一种最佳实践。这个Windows进程会管理所有已注册的Windows服务的方方面面,包括它们的整个生命周期,并在此阶段决定这些服务所应遵循的规则。BasicService在以下两个方面为你提供帮助:它首先确保Windows服务无法启动时,会将有意义的错误代码返回给服务控制管理器。其次,它帮助开发者在启动阶段执行运行时间较长的操作,并且不必担心服务控制管理器会强制中止这个Windows服务。

最后,BasicServiceStarter将负责决定这个应用的运作模式:安装服务、卸载服务、以控制台方式运行,或者是以Windows服务方式运行。BasicServiceStarter还确保在Windows服务启动阶段可能发生的任何后台线程的异常信息都将报告给Windows事件日志。

这一系列共包含7篇文章,详细解释了这个框架的各种细节。这个网站的观点是:“与其关注于自动化,不如更加关注于你的软件的一致性与简单性”。

查看英文原文:Operations-Friendly Windows Services

开发便于运维的Windows服务的更多相关文章

  1. Redis开发与运维学习笔记

    <Redis开发与运维>读书笔记   一.初始Redis 1.Redis特性与优点 速度快.redis所有数据都存放于内存:是用C语言实现,更加贴近硬件:使用了单线程架构,避免了多线程竞争 ...

  2. 百度王一男: DevOps 的前提是拆掉业务-开发-测试-运维中间的三面墙

    这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变. 由数人云.优维科技.中生代社区联合发起的 系列 Meetup < DevOps&SRE 超越传统运维之道&g ...

  3. Redis开发与运维:SDS

    STRING 我们会经常打交道的string类型,在redis中拥有广泛的使用.也是开启redis数据类型的基础. 在我最最开始接触的redis的时候,总是以为字符串类型就是值的类型是字符串. 比如: ...

  4. redis 学习(20)-- 常见的持久化开发与运维问题

    常见的持久化开发与运维问题 fork 操作 fork 操作是一个同步操作,若执行较慢会阻塞 redis 主线程 执行时间与内存量相关:内存越大,耗时越长:虚拟机较慢,真机较快 查看 fork 执行时间 ...

  5. 从谷歌CRE谈起,运维如何培养服务意识?

    从谷歌CRE谈起,运维如何培养服务意识? 2016年10月,谷歌云平台博客(Google Cloud Platform Blog)上更新了一篇文章,谷歌宣布了一个新的专业岗位,CRE(Customer ...

  6. Redis 开发与运维

    Getting Start 高性能 性能优势的体现 C语言实现的内存管理 epoll的I/O多路复用技术+IO连接/关闭/读写通过事件实现异步的非阻塞IO TCP协议 单线程架构,不会因为高并发对服务 ...

  7. C#开发可以可视化操作的windows服务

    使用C#开发自定义windows服务是一件十分简单的事.那么什么时候,我们需要自己开发windows服务呢,就是当我们需要计算机定期或者一 直执行我们开发的某些程序的时候.我经常看到许多人开发的win ...

  8. python bottle框架(WEB开发、运维开发)教程

    教程目录 一:python基础(略,基础还是自己看书学吧) 二:bottle基础 python bottle web框架简介 python bottle 框架环境安装 python bottle 框架 ...

  9. 【C#】开发可以可视化操作的windows服务

    使用C#开发自定义windows服务是一件十分简单的事.那么什么时候,我们需要自己开发windows服务呢,就是当我们需要计算机定期或者一直执行我们开发的某些程序的时候.这里我以一个WCF的监听服务为 ...

随机推荐

  1. oracle对/dev/shm的使用

    查看共享内存打开的文件数 [root@db2 ~]# lsof -n | grep /dev/shm | wc -l 34693 共享内存中总共文件数 [root@db2 ~]# ls -l /dev ...

  2. ppmoney

    build/config.js 改 8080端口 build/webpack.dev.conf.js 改路径简写 alias:{ 'vux-components':'vux/dist/componen ...

  3. Tomcat 9.0安装配置(转)

    http://www.cnblogs.com/saratearing/p/5811866.html

  4. HTTP请求应答服务——HTTP Request & Response Service

    服务站点:https://httpbin.org/ Freely hosted in HTTP, HTTPS & EU flavors by Runscope DESCRIPTION Test ...

  5. Flash: An Efficient and Portable Web Server

    Introduction This paper presents the design of a new Web server architecture called the asymmetric m ...

  6. sql字段属性

  7. 网站Bannr适应大小屏幕,图片始终居中不被压缩

    网站banner一般都是2000px以上的宽度,为了让在小的屏幕上图片不被压缩并且是居中表现: 方法是让包裹图片全部的那个大容器始终正居中 <!-- banner --> <div ...

  8. CVE-2010-3654分析及利用

    三年前分析的一个漏洞,最近又温习一遍,这个flash中混淆漏洞的鼻祖,10年最经典的漏洞. 漏洞触发原因 该漏洞主要因为avm对返回的类没有进行校验,通过修改swf文件,实现Ref类和Origin类的 ...

  9. Ue4的容器(数据结构)

    之前都没注意,作为程序眼这些还是比较重要的 Engine\Source\Runtime\Core\Public\Containers\

  10. unison+inotify-tools触发式双向自动同步

    双向实时数据同步部署 首先添加服务器ssh信任,即免秘钥登陆 Web1:192.168.10.36 Web2:192.168.10.37 分别在web1和web2上执行以下命令 mkdir ~/.ss ...