DevOps


DevOps 是一套实践方法,在保证高质量的前提下缩短系统变更从提交到部署到生产环境的时间,它设想在开发组和运维组之间没有冲突。

1   什么是 DevOps

DevOps 是敏捷开发的延续,它将敏捷的精神延伸至运维(Operation)阶段。敏捷开发主要关注软件开发,主要目的是响应变化,快速交付价值,强调迭代增量的开发模式,没有自动化测试和部署,更没有监控等相关的流程。也就是敏捷 Scrum 可用在 DevOps 的开发过程中,但 DevOps 不仅仅是敏捷 Scrum。 一个明显的区别就是敏捷开发可能1-6周一次迭代,而 DevOps 一天几十次迭代都可以,这就是联合系统运维高效之处。 除外之外,DevOps 还关注团队协作与沟通,协作需要工具,沟通效果最好效率也最高的方式是面对面交谈。

1.1   Scrum 敏捷框架

DevOps 中可以使用敏捷框架开发,常见敏捷框架有 Scrum、Kanban。大部分 IT 企业都使用 Scrum 框架,Scrum 采纳一种迭代和增量式的方法来优化对未来的预测和控制风险。作者著有《Scrum 指南》,有中文版可下载,下面简单介绍: Scrum 框架由 Scrum 团队以及与之相关的角色、事件、工件和规则组成,Scrum 的规则把角色、事件和工件组织在一起,管理它们之间的关系和交互。

Scrum 的使用者必须经常检视 Scrum 的工件和完成 Sprint 目标的进展。

1.2   DevOps 应用与研究现状

目前针对 DevOps 的研究主要集中在微服务、持续集成与持续部署、自动化工具的研发等内几个方面。

注:为了降低工具的成本和使用门槛,包括 CODING 在内的很多云服务厂商都在做打通全流程的 DevOps 工具链的尝试,希望可以做到让企业开箱即用,低成本的践行 DevOps 理念。不过基本上还是不能满足企业真正的需要。还是得自己搭建。

2   DevOps 流程

这里其实并非 DevOps 所定义的,而是为了用一个更结构化的方式来归类及最佳实践。大体有以下流程,每个流程可以进一步细分为一系列阶段、过程。

3   软件架构

软件框架一般是指单个服务内部的组织形式,软件框架一般是分层的(展示层、服务层、模型层、持久层),并有对类的管理如依赖注入容器等。软件的交互方式有:时间驱动、事件驱动、请求驱动。

而软件架构是一个或多个服务的交互和部署方式:

从服务来看:

从部署来看:

4   组织架构

今日头条、抖音、西瓜视频……字节跳动的每款 App 都基于三个核心部门(技术、Growth 和商业化,分别负责研发、推广和收入)来发展。在项目开始时,公司会为每个项目设置虚拟项目组,由三个核心部门抽调人员组成,试水成功后直接推广。所有产品共用一条技术线,快速试错。针对 App 类产品的快速迭代的业务特性,字节跳动依据 DevOps 理念对组织架构进行调整和优化,从结构上保证了技术支持业务创新的能力。

描述云时,常用电网进行类比。当要使用电时,你将设备插到标准电路上并打开开关。你要为你所使用的电付费。大多数情况下,你不用关心各个电力公司是如何发电和传输电力的。

PaaS:提供一组核心服务(例如,托管 Java Web 应用、Ruby Gem 包、Scala 应用等)。一般与 Ops 部门提供的一些服务相似,Ops 部门通常接管基础设施层的管理并向开发团队提供一组环境选项来托管他们的系统。相比 IaaS,PaaS 的额外抽象着你能够集中精力在系统最重要的部分——应用。你不必处理网络配置、负载均衡器、操作系统、底层的安全补丁等。但这了意味着你要放弃对底层的可见性和控制。如果你是可以接受的,那么使用 PaaS 就很值得。然而,当你之后最终需要额外的控制时,迁移可能非常困难。

从内存顺序访问1M大概需要 12us,从旋转型磁盘访问项目大概需要 4ms 将磁盘头移动到正确的位置,然后,读取1M数据大约花费 2ms。消息在相同数据中心的一个来回大概需要500us,而在加州和荷兰之间的一个来回大约花费150ms。——DevOps 软件架构师行动指南

Atlassian 开发两类工具:一类是团队生产力工具,如 JIRA(问题追踪和软件开发)、Confluence Wiki、HipChat 消息和 JIRA 服务台;另一类是开发工具,例如 Bamboo 持续集成服务器和 Bitbucket 托管的存储库。

5   软件框架

软件框架一般是指单个服务内部的组织形式,软件本质上就是为了运行逻辑,这种逻辑最终由函数或者方法承担。框架可以认为是一个调度器,设计各种模块以期最适当地运行需求逻辑。

5.1   web 框架

web 框架目的暴露方法给用户,用户调用后调用逻辑方法,所以 web 框架提供了 http 各种模块,以最合适的方式让用户编写逻辑方法并与显露的接口对应起来。所以使用 web 框架应用步骤一般就是:

其他像日志等就是扩展功能了。

5.2   爬虫框架

爬虫框架目的是从一个网址开始,调用自己的下载、分析、条目处理的方法处理各种数据,包括请求数据、响应数据、条目数据。 下面是爬虫框架的一种设计,可以看出,框架最核心的就是一个调度器,框架的所有东西都被调度器封装成一个整体。

抓包框架

参考文献 [1] what-is-scrum. https://www.scrum.org/resources/what-is-scrum