腾讯云DevOps技术揭秘:新时代运维重器Tencent Hub最佳实践

随着云计算和容器技术的发展以及微服务架构的兴起,服务能够实现细粒度的部署,维护和伸缩。在使开发人员能快速开发的同时,这些技术也给系统和应用的运维带来了更大的挑战。DevOps理念也应运而生,强调研发和运维的流程及工具的自动化,最大程度地减少人工运维的工作量。

\\

在上周腾讯“云+未来”峰会的开发者专场上,来自腾讯云的几位开发者和大家分享了DevOps,数据库,微服务框架,边缘计算,机器学习等话题的实践,为大家带来了一场技术盛宴。在这里和大家一起分享腾讯云PaaS产品总监邹辉带来的Tencent Hub最佳实践,一窥腾讯云DevOps产品的设计理念和思考。

\\

为什么要做DevOps\u0026amp;如何做DevOps

\\

从技术的角度来看,随着业务的发展,业务的场景越来越多也越来越复杂,系统架构越来越庞大,开发人员越来越多,对系统的稳定性要求也会越来越高。所以这些场景催生了技术架构的变革,由此会带来微服务架构设计理念的产生。微服务架构设计理念能够解决这些问题,但同时也带来了很多问题:微服务导致我们的系统模块越来越多,而这些模块运维管理复杂度也会增加,同时微服务会让我们的开发速度得到增加,开发人员对我们发布的效率会有明显的诉求。所以在运维人员对系统的质量把控,以及开发人员对系统效率的追求上就有了矛盾,这就是DevOps需要解决的一些问题,由此催生了我们DevOps。

\\

8aeb91f7a00bbaf1e89178a232cceb06.png

\\

所以DevOps的实质是:我们需要通过DevOps来保证质量,同时,平衡开发的效率。本质上来说DevOps就是一个流程化和工具化的过程,通过工具来固化流程,通过流程来保证运维发布和研发质量,同时降低人工进行操作时候的一些误操作引发的故障,也提高了整个研发的效率。所以基于这一点,如何去实现我们的DevOps,实际上非常清晰,因为DevOps就是一个流程规范制定和工具化的自动化过程。所以要做好DevOps,我觉得关键在于两步:

\\
  1. 把我们的流程梳理清楚,这些流程包括代码提交、发布测试,静态扫描等等。另外我们也需要把团队的关系梳理清楚,软件开发过程中有开发,有测试,有运维,还有一些管理者,需要哪些步骤,需要哪些人审核,在哪些步骤需要通知哪些人,都要梳理清楚。\\t
  2. 通过工具化把上面所梳理的流程实现自动化的过程。如何去选择合适的DevOps工具体系,把流程规范给自动化起来。\

d7d2943837ac67ee770690c6d39e1595.png

\\

接下来就给大家分享腾讯云在DevOps工具体系这方面的实践。

\\

Tencent Hub

\\

腾讯云DevOps推出了一款叫Tencent Hub的管理平台,该平台为存储研发流程中的文件和代码以及创建DevOps工作流而打造。Tencent Hub是腾讯云第一款涵盖了DevOps整个体系的工具体系,主要分成三部分,覆盖代码的开发阶段,构建阶段,一直到代码的发布阶段。

\\

Tgait代码仓库

\\

在代码开发阶段,我们可以提供TAPD的开发平台,同时我们也推出了一个Tgait的代码仓库。基于这个构建组件,我们可以很方便地把整个DevOps流程给串起来,同时也提供了一个全面的仓库。在这个仓库里面,我们可以存储任何的代码,DevOps任何的存储,最终我们也会跟运行环境里面的一些服务打通,来支持各种发布,提供各种各样的查检。腾讯云在Tencent Hub整体的体系图如下。

\\

137d6a380cd4ce9ad4d41886e2a060ef.png

\\

Work Flow

\\

28752de9db1fb7f16a5064e7ebf06946.png

\\

在CD的环节,我们有一个核心组件叫Work Flow,大家可以把它简单理解为一个工厂的流水线,通过这个流水线,我们可以把DevOps开发、测试、发布、代码自动测试等所有的环节很简单地串联起来。因为不同的公司研发流程不一样,并且随着业务的发展,流程可能也会不断地变更,所以我们在设计Work Flow这款组件的时候,一个核心考量就是能否快速地适应多样化的流程体系和流程的变更。

\\

我们在设计Work Flow的时候,把Work Flow分成了三块:一个是Engine的环境,一个是插件层,还有一个是Work Flow的插件库,主要是管理调度功能,真正实现任务执行是在下面Work Flow的插件去实现这个功能。

\\

在Work Flow Engine这一层也是分成多个阶段。我们将一个DevOps完整阶段拆分成多个不同的阶段,可以串行执行,也可以并行执行。我们可以定义任何DevOps的流程,同时在执行过程中,可以暂停这个stage,也可以启动这个stage;在完成以后,能根据反馈结果来定义这个流程是该继续走下去还是该终止。当我们把代码构建完成之后发布到自动化测试系统中做测试,发现某个自动化测试用例跑不过,这个时候我们可以设计一个终止的环节,然后把这个系统结果给到开发运维人员,或者测试人员。这时候Work Flow Engine同时也写好YAML文件,把完整的流程导入到Engine里面执行。这就是在Engine这一侧我们去做的一些设计和思考。

\\

cf8268dfc4f57a005e213f5f7741de89.png

\\

在Work Flow插件这一层,Engine可以通过API调动任务,Engine层可以执行指定的一个任务,实际上以容器镜像的方式定义和运行这个插件,这也是我们在Work Flow做的一个比较大的革新。为什么这样说?因为我们发现把容器引入到DevOps里面去做会带来很多的好处:首先DevOps流程里面会执行各种各样的任务,如果把这个任务通过容器化固化下来,通过容器镜像可以很方便地传播,这个时候大家看的可能不是跟Engine相关的插件,而是一个容器镜像。一旦把插件分装到容器里面之后,就可以根据大家的喜好和专业程度去开发容器。这就是我们在Work Flow插件这一块实现的机制。

\\

9d784f41942993c0bc4ac25fa4205eb8.png

\\

另外,如果用户想要自定义自己的插件,完成一些功能,也只需要定义好简单的输入和输出即可。输入值可以从前面任何流程获取,制定本质的输出参数,输出参数也可以反馈回来,供后面的流程使用。用户也可以很简单地去遵守这个输入和输出的规范,开发自己的镜像插件。

\\

另外,我们也针对一些常见的语言库和流程提供一些通用的插件库,比如里面的代码检查、构建,这些镜像可以统统在这一层获取到。这就是我们在Work Flow这里面的一些设计理念。

\\

e1091cb181a3ae339b251aea393e59f2.png

\\

Registry

\\

除了Work Flow之外,我们还构建了一个Registry。我们发现在Work Flow会产生很多中间产物,比如构建一个Zaar程序,或者发布一些配置文件,这些配置文件发布在哪些地方,包括发布机制,它存在的地方或者最终镜像存在的地方,这些环节中产生的中间产物往往会存储到不同的地方,使用不同的协议去获取。基于这一点,我们开发了一个叫Registry的通用仓库,可以实现通用存储,使用这个通用存储可以很方便的把DevOps里面中间产物给管理起来。

\\

另外Registry也提供了多层管理机制,从组织到用户团队到个人,通过权限的方式去统计,也提供各种各样的日记,静态扫描的功能,让用户能够更方便地使用这些Registry功能。以上就是Registry方面的设计和考量。

\\

a603d4f7512ed76290f72028abe4a3ab.png

\\

5f111206e9f6e2cbfb8fc86bd2692d97.png

\\

最后

\\

除此之外,其实腾讯云还会把内部的一些研发实践,通过服务的方式分装起来给开发者,让开发者不光可以使用Work Flow,使用既定插件,同时还可以使用腾讯内部一些比较好的经验,更好的去支撑他们的DevOps,比如自动化运维、代码托管、自动化测试等环节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net CoreRabbitMQ消息存储可靠机制(下)

前言上篇讨论过消息投递和消息消费过程中如何确保可靠传输,也提及到消息到达RabbitMQ中到被消费前也需要可靠的留存,可因许多的不确定因素会影响着消息的存在与否。消息中转点生产者发送消息到RabbitMQ中,如果交换机根据自身类型和RoutingKey…

nginx安装及负载均衡配置

Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发…

智能停车O2O 独角兽初现:“ETCP停车”获5000万美金A轮融资

日前,国内第一智能停车平台“ETCP停车”宣布完毕A轮融资,由源代码资本、SIG、易车网、经纬中国和商企界知名人士联合投资超过5000万美金。同一时候获悉,ETCP作为中国智能停车行业龙头老大,不仅是该行业的创建者和领军品牌&#xf…

ASP.NET MVC使用Bootstrap系统(2)——使用Bootstrap CSS和HTML元素

阅读目录 Bootstrap 栅格(Grid)系统Bootstrap HTML元素Bootstrap 验证样式ASP.NET MVC创建包含Bootstrap样式编辑模板小结Bootstrap提供了一套丰富CSS设置、HTML元素以及高级的栅格系统来帮助开发人员快速布局网页。所有的CSS样式和HTML元素与移动设备优…

VS2017调试闪退之Chrome

原文:VS2017调试闪退之Chrome巨硬build后发了15.7.1满载期待的升级了。。结果NM泪奔................... 为啥 泪奔? 使用Chrome 调试闪退,MMP ,一想肯定是VS的锅咯,各种抓头发。。 试试看看VS配置发现 ,多了点东西。。 都勾上后&…

ios UISearchBar搜索框的基本使用

摘要: 小巧简洁的原生搜索框,漂亮而易用,如果我们的应用没有特殊需求,都可以使用它。iOS中UISearchBar(搜索框)使用总结 初始化:UISearchBar继承于UIView,我们可以像创建View那样创建searchBar UISearchBar * bar [[U…

Win8下怎样安装Win7 or Win7下怎样安装win8?

预计非常多人可能会用U盘安装工具去去做双系统的安装(Win8下安装Win7, Win7下安装Win8)。可是在安装过程中你 会发现一个问题:win7下安装win8,提示你mbr硬盘格式不能安装win8;win8下安装win7,提…

Linux 练习题-3文件与磁盘 问答

1、描述Liux下软链接和硬链接的区别创建命令不同,ln 命令创建硬链接,ln -s 创建软链接inode节点号不同,硬链接inode与源文件相同,软链接inode与源文件不同使用对象不同,硬链接只能对文件使用,软链接可以对文…

.NET Offer 快到碗里来!.NET 招聘季

关注我们谈到 .NET 在中国的推广和发展,.NET 开发者求职就业及 .NET 企业招人用人的问题往往常被提及。初学者会担心学习 .NET 之后的就业问题,.NET 开发者在求职过程中没有足够多的渠道来获取 .NET 招聘信息,而与此同时,采用 .NE…

java的collections_Java中Collection和Collections的区别

1) 排序(Sort)使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此列表内的所有元素都必须是使用指定比较器可相互比较的1 List list new ArrayList();2 int array[] {112, 111, 23, 456, 231};3 for (int i 0; …

jQuery事件绑定(一)

2019独角兽企业重金招聘Python工程师标准>>> 一、on方法 在Jquery1.7中添加,用来代替其他事件绑定方法。向匹配元素添加一个或多个事件处理程序 使用语法: $(selector).on(event,childselector,data,function) 参数: event&#x…

JDBC学习笔记之JDBC简介

1. 引言 JDBC API是一种Java API,可以访问任何类型的表格数据,特别是存储在关系数据库中的数据。 JDBC可以帮助我们编写下列三种编程活动的java应用程序: 1.连接到数据源,如数据库;2.发送查询和更新语句到数据库;3.检索并处理从数…

PaddleOCR在 windows下的webAPI部署方案

很多小伙伴在使用OCR时都希望能过采用API的方式调用,这样就可以跨端跨平台了。本文将介绍一种基于python的PaddleOCR识方案。喜欢的可以关注公众号,获取更多内容。# 一、 windows环境下部署###1.环境操作系统:windows10;主要软件环…

Vim的NerdTree插件

一个项目文件多起来时,左边的文件树菜单是必要的。参考:常用文件树快捷键所有命令及推荐键盘映射:官方 在vundle插件管理的方式,直接在~/.vimrc中的Plugin段落中加入Plugin "scrooloose/nerdtree"然后重启Vim并输入Plug…

java简单投票系统_JSP实现的简单Web投票程序代码

本文实例讲述了JSP实现的简单Web投票程序。分享给大家供大家参考。具体如下:这里使用文本文件作为数据存储的投票系统。1. vote.java:package vote;import java.io.*;import java.util.*;public class vote {public String filePath "";publi…

HTTP2指纹识别(一种相对不为人知的网络指纹识别方法)

这是关于网络指纹识别的两部分系列的第二部分上一部分我介绍了有关TLS 指纹识别方法(以及在不同客户端的指纹有何区别):https://mp.weixin.qq.com/s/BvotXrFXwYvGWpqHKoj3uQHTTP/2 指纹识别和Tls指纹类似也是一种 Web 服务器可以依赖指纹来识…

中兴智能视觉大数据:人脸识别技术目前处于“用的不够,用的不好”

中兴智能视觉大数据报道:在2018年5月30日举行的“人脸识别等AI技术在校园周边安全中的应用”研讨会上,中国人民大学危机管理研究中心主任唐钧指出,人脸识别等AI技术具有“精细识别”、“提前干预”、“及时处置”等优势,有利于促进…

C#反射,性能优化,不止于优化

“ 架构师的价值,在于独立且理性的思考”想要写出灵活而且具有更好适应性的代码,反射是首选方案。反射赋予程序在运行时动态创建实例的能力,可以在程序运行时(而非编译时)获取实例类型,获取元数据信息&…

设计模式C++实现--Observer模式

2019独角兽企业重金招聘Python工程师标准>>> 观察者模式 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。…

Liunx 安装mysql 5.6.16

2019独角兽企业重金招聘Python工程师标准>>> 1.卸载原有的mysql 1)先查看原有的mysql rpm -qa|grep -i mysql 2)删除 mysql rpm -e --nodeps 包名 3)删除老版本 mysql的开发头文件和库 rm -fr /usr/lib/mysql rm -fr /usr/include/mysql 注意:卸载后/va…