一.CI(Continuous Integration)简介

   CI规则1:尽量频繁地把代码签入到分支中以进行集成

  CI规则2:不光要对语法进行验,也要提供一系列的自动化来验证

  CI规则3:CI失败后,要把修复CI当做第一优先级的事情

  说明:作为CI流程的一部分,我们提供的制品应该每次只生成一次,然后在所有的部署一切使用,这不仅避免多次重复做一件事情,还可以保证部署上线的制品与测试通过的那是同一个。

二.把CI映射到微服务

这里有几种做法:

    做法1:所有的东西都放在一起,向代码库的任何一次提交都会触发构建,同时会构建出多个制品。

一般来说,我们绝对应该避免这个模式,但在项目初期是个例外。我即使只修改一个服务的一行代码也需要进行整体的验证和构建,事实上这有可能是不需要的,这会影响CI的周期。

    做法2:将每个CI映射到代码库中不同的目录,这种做法比第一种好。

  做法3:每个服务都有自己的代码库,都有自己的CI,这样就更加独立了。

三.CD(Continuous Delivery)简介

正如我们项目组正在使用的PipeLine,这就是一个CD产品,它告诉我们每个步骤是否完成,距离最终的产品交付还有哪几项,软件质量的可视化得到了极大改善。

四.制品的选择

Java可以生成Jar包和War包,Ruby有gem,它们在运行的时候需要特定的环境,Chef、Puppet、Ansible是集中配置管理系统,支持一些通用技术栈的构建物部署。

我们也可以选择生成与操作系统相关的制品,如RedHat或CentOS的RPM、Ubuntu的deb包、Windows的MSIqn。使用操作系统的制品好处是,不需要考虑底层使用的是什么技术,只需要简单使用内置的工具就可以完成软件的安装。

如果使用自动化配置管理工具来管理环境问题,一个问题是,需要花费大量的时间运行这些脚本,它们会一遍遍地安装 这些重复的工具,而且还可能有新的软件加进来,其安装时间会继续被拉长。我们可以使用虚拟机镜像,在部署软件时,只需要根据镜像创建一个实例,之后在其安装最新的微服务即可,不需要再花费时间来安装依赖,因为它们已经在镜像中安装好了,这样可以节省很多时间。但安装镜像也会花费很多时间,同时不同平台的镜像是不一样的,我们可以通过Packer来解决这个问题,它可以从Chef、Ansible、Puppet中的同一套配置中生成不同平台的镜像。

那么,我们可能将微服务也包含在镜像中,那么当你启动镜像时,微服务就已经就绪了。

但这同时也会带来一个问题,有人会进生产服务器修改其中某一台的配置,导致配置漂移问题,怎么办?应该禁止对任何运行的服务器做手动修改。

五.服务的配置管理

对于不同的生产环境有不同的配置,我们应该如何处理?应该最小化环境间配置的差异,比如用来连接数据库的用户名和密码。

另外,配置文件应该单独管理,如IT部正在使用的JFrog制品库。

六.服务与主机之间的映射

这样的形式有多种。

      第1种:单主机多服务

这种方式简单,但是也会存在挑战,如监控困难,我们不知道哪个服务使用CPU的频率更高一点,同时服务之间会造成影响,一个服务可能会造成系统资源用尽,这样其他服务也会有相应的影响。

      第2种:应用程序容器

这种方式,从根本上说,是想试图优化资源的使用,但现在云服务的出现使得已经没有必要了。

这种方式将5个Java服务打包在一个容器(如Jetty)中,这样不可避免地限制了技术的选择,同时在聚合监控时也会难以支持。

      第3种:每个主机一个服务

这种方式很容易对服务进行扩展,安全性也可以在更小的范围内进行,但主机数据的增加也会是个问题。

      第4种:使用Pass(平台即服务)

Pass平台会提供一些特定制品(如Java Jar包或Ruby 的gem等)的支持,还会帮你自动配置机器然后运行,能够透明地对系统进行弹性管理,允许你控制运行服务的节点数量,Pass平台帮你处理其他的工作。

七.如何管理微服务带来的大量主机:自动化

为了让你从众多的服务器中解脱出来,你需要自动化,你需要写一行代码来启动或开户一个虚拟机,你需要能够自动部署软件,你需要自动完成数据库的变更。

      方法1:传统的虚拟化技术

              

      如上图所示,这就是传统的虚拟化技术,在操作系统之上,存在着Hypervisor,它的任务主要有两个,对CPU和内存资源做从虚拟主机到物理主机的映射和给上层提供一个控制的层,但Hypervisor也需要一定的资源来完成自己的工作,它也会占用CPU、IO和内存等,Hypervisor主机越多,占用的资源就越多。

      方法2:Vegrant

这是一个部署平台,通常在开发和测试环境中使用,可以在一台机器上创建一个虚拟的云,它的底层使用的是标准的虚拟化系统,比如你可以同时创建多个VM,通过关掉其中的几台来测试故障模式,并且可以把本地目录映射到虚拟机上,这样就可以在修改代码后立即查看效果。

      方法3:Linux容器

Linux容器可以创建一个隔离的进程空间,进而在这个空间运行其他的进程。在Linux中,进程必须由用户来运行,并且根据权限的不同拥有不同的能力,进程可以创建其他进程,举个例子,如果我在终端启动了一个乾,你可以认为它是终端程序的子进行,Linux内核的任务就是维护这个进程树。

      Linux容器扩展了这一想法,每个容器就是整个系统进程树的一棵子树,内核已经帮我们完成了给这些容器分配物理资源的任务, LXC就是这样一种容器(类似的还有Solaris Zones、Open VZ),它的基本结构如下:

它不再需要Hyervisor,其实尽管每个容器可以运行不同的操作系统发行版,但必须共享相同的内核,因为进程树存在于内核中,这意味着,我们的主机操作系统可以是Ubuntu,而在容器中可以运行CenOS,只要它们的内核相同即可。

容器更轻量,所以在相同的硬件上能够运行的容器数量比虚拟机要多得多,而且启动速度更快,但容器在隔离性上也还存在一定问题。

      方法4:Docker

Docker是构建在轻量级容器之上的平台,它帮你处理了大多数与容器管理相关的事情,你可以在Docker中创建和部署应用,这些基于容器的应用与VM镜像很类似,Docker也能管理容器的配置,并帮你处理一些网络问题。

Docker本身并不能解决所有的问题,它只是一个在单机上运行的简单的Paas,你还需要一些工具来帮你管理多台机器上的Docker实例上的服务。比如,当你向这些工具请求一个容器时,它会帮你找到容器并运行它。Google的Kubernetes和Deis就是这样的软件。

Docker+调度工具构成的解决方案介于IaaS和PaaS之间,我们可以称之为CaaS(容器即服务)。

八.使用自动化脚本

参数化的命令行调用是任何部署的最合理方式,可以使用CI工具来触发脚本的调用,从Windows的Bash到Python Fabric脚本等,好处是一次编写后面基本不用改了,也可以使用Terraform、Salt Stack这样的工具。

参考

《微服务设计》(Sam Newman 著 / 崔力强 张骏 译)

相关文章:

  • 微服务的概念——《微服务设计》读书笔记

  • 微服务架构师的职责——《微服务设计读书笔记》

  • 建模:确定服务的边界——《微服务设计》读书笔记

  • 微服务集成——《微服务设计》读书笔记

  • 服务的协作:服务间的消息传递——《微服务设计》读书笔记

  • 拆分:分解单块系统——《微服务设计》读书笔记

原文地址:http://www.cnblogs.com/gudi/p/6667102.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

部署:持续集成(CI)与持续交付(CD)——《微服务设计》读书笔记相关推荐

  1. 软件持续集成(CI)、持续交付(CD)和持续部署(CD)

    CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时 ...

  2. Gitlab+Docker实现持续集成(CI)与持续部署(CD)

    作者:愤怒的小猿猿 blog.csdn.net/qq_27520051/article/details/80552220 GitLab CI/CD介绍 首先使用一张图说明GitLab CI的工作流程: ...

  3. 微服务集成——《微服务设计》读书笔记

    一.理想的集成应该是什么样的? 1.避免破坏性修改 如果在一个微服务的响应中添加一个字段,服务的消费方不应该受到影响. 2.保证API的技术无关性 微服务之间的通信应该是与技术无关的. 3.使服务的消 ...

  4. ci持续集成工程师前景_不要忽视持续集成(CI)/持续交付(CD)的13个优势

    原标题:不要忽视持续集成(CI)/持续交付(CD)的13个优势 持续集成(CI)/持续交付(CD)是现代软件开发周期的基础,人们需要了解持续集成(CI)/持续交付(CD)和其管道实施的所有好处. 在传 ...

  5. 持续集成 ci/cd_CI / CD即服务:在云中进行持续集成和交付的10种工具

    持续集成 ci/cd 云和持续集成 (CI)是天生的匹配. 尽管云使我们摆脱了安装和维护物理服务器的痛苦,但持续集成可以自动消除构建,测试和部署代码的痛苦. 如果两家公司都希望把工作从开发团队的肩膀上 ...

  6. centos7下Gitlab+Jenkins部署持续集成CI环境

    1.基本环境 主机:win10,IP:192.168.0.111:部署机器centos7,IP:192.168.0.65: 内存推荐到8G,实测需要6G以上,以免出现内存不够用而报错. 2.安装git ...

  7. 使用GitLab来实现IOS项目的持续集成CI

    作为程序员,代码是一定要写的,而且要天天写.在好多地方见过这样一种说法: 只会写程序的程序员不是好程序员 当然,我不赞同这种观点,因为有的人他天生就是为程序而生的.但是掌握一些代码之外的理论知识也是一 ...

  8. 持续集成(CI)工具-----jenkins

    1.jenkins 1.1. 什么是jenkins Jenkins是一个开源的.提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续.自动的构建/测试软件项 ...

  9. 在持续集成 (CI) 环境中使用 Android 模拟器 | AndroidDevSummit 中文字幕视频

    在本次演讲中,Hoi Lam 和 Lingfeng Yang 将为大家讲解如何在持续集成 (CI) 环境中使用 Android 模拟器.包括近期发布的功能: 模拟器的 Docker 镜像,以及如何部署 ...

最新文章

  1. python写文件读文件-python(文件读写)
  2. TCP/IP协议(3):数据链路层
  3. python3数据库表关联_Django中数据库操作|python3教程|python入门|python教程
  4. linux远程跳板机超时
  5. 网站静态化的实现以及纯伪静态优缺点
  6. hostPath Volume - 每天5分钟玩转 Docker 容器技术(148)
  7. win10右键一直转圈_Win10电脑开机一直转圈无法进入系统的解决方法
  8. CDNOW用户消费行为分析报告(python+ppt)
  9. Mybatis高级应用 整合Ehcache
  10. ubuntu14.04升级以及gitlab升级
  11. CocurrentHashMap和Hashtable的区别
  12. edge浏览器怎么设置activex_Edge浏览器ActiveX插件
  13. 纸张的规格A3.A4.A5.A6纸的尺寸大小
  14. PC机(笔记本)安装Linux系统
  15. 5类6类7类网线对比_五类/超五类/六类/超六类/七类等多类网线的比较
  16. 关于cocos2dx 3.0 跳转场景
  17. RabbitMq(二)一文彻底弄懂RabbitMq的四种交换机原理及springboot实战应用
  18. cv2 给图片加框框
  19. graphpad如何检测方差齐_SPSS和GraphPad如何比较组内和组间差异「杏花开生物医药统计」...
  20. 示波器播放Bad apple坏苹果教程XY模式

热门文章

  1. js 中声明变量 “提前”
  2. 浅谈SQL注入风险 - 一个Login拿下Server(转)
  3. 《Python CookBook2》 第一章 文本 - 检查字符串中是否包含某字符集合中的字符 简化字符串的translate方法的使用...
  4. C#得到CPU的序列号、硬盘序列号、网卡序列号
  5. ISAPI_Rewrite伪静态配置
  6. 使用设计模式构建通用数据库访问类
  7. Azure DevOps 中 Dapr项目自动部署流程实践
  8. .NET 6 Talk Party 2|.NET Core 与行业
  9. 【开源框架】:解决方案级别的代码生成器 WebFirst
  10. Dapr牵手.NET学习笔记:发布-订阅