6.微服务设计 --- 部署

1.持续集成简介
	CI 能够保证新提交的代码与已有的代码进行集成,从而让所有人同步。CI 服务器会检测到代码已经提交并签出,然后花些时间来验证代码是否通过
  编译以及测试能否通过。	
  	作为流程的一部分,我们经常会生成一些构建物以供后续验证使用,比如启动一个服务并对其运行测试。理想情况下,这些构建物应该只生成一次,
  然后在本次提交所对应的所有部署环节中使用。
    测试别人是否真正理解CI的3个问题:
    1.你是否每天签入代码到主线
    2.你是否有一组测试来验证修改
    3.当构建失败后,团队是否把修复CI作为第一优先级来做

2.把持续集成映射到微服务
	1.最简单的办法,可以先把所有的东西放在一起
	2.存在多个CI会分别映射代码库的不同部分
	3.每个服务都有自己的CI(跨服务修改比较困难)

3.构建流水线和持续交付
	CD : 能够检测每次的提交是否达到了部署到生产环境的要求,并持续把这些信息反馈给我们。
	发布流程:1.编译及快速测试 => 2.耗时测试 => 3.用户验收测试 => 4.性能测试 => 5.生产环境
	'每个微服务一个构建'的方法,基本上在大多数情况下是合理的。例外,当一个团队刚刚开启一个新项目时,尤其是什么都没有的情况下,你可能会花
  很多时间识别出服务的边界。

4.平台特定的构建物

5.操作系统构建物

6.定制化镜像
	配置漂移 : 机器上的配置和源代码管理中的配置不一致

7.环境 

8.服务配置

9.服务与主机之间的映射
	1.单主机多服务 
		缺点:
		会使得监控比较困难;
		如果一个服务的负载很高,很可能会过多的占用系统的其他部分的资源;
		部署也会比较困难,很难保证对一个服务的部署,不会影响其他服务;
		对团队的自治也比较困难,不同团队维护的服务都安装在同一台主机,那么谁来配置这些服务所在的主机呢;
		限制了部署构建物的选择;
		会增加对单个服务进行扩展的复杂性。

	2.应用程序容器
		把不同的服务放在一个容器中,再把容器放置到单台主机上。
		优点:
			这种设置可以节省语言运行时的开销。比如,在一个 Java servlet 容器中部署5个java 服务端话,只需要启动一个 JVM即可。
		缺点:
			限制了技术栈的选择;

	3.每个主机一个服务 
		优点:
			单机单服务会简化问题的排查。
		缺点:
			运行更多的主机会引入很多隐式代价

	4.平台即服务 

10.自动化

11.从物理机到虚拟机
	管理大量主机的关键之一是,找到一些方法把现有的物理机划分成小块。
	1.传统的虚拟化技术
		类型2虚拟化:其中包含了很多层,AWS,VMWare,VSphere,Xen和KVM都属于这个类型(类型1虚拟化指的是只能运行在裸机之上,而不能运行在操作系统之上的技术)。
	  在物理基础设施上存在一个主机的操作系统,在这个OS上运行一个叫做 hypervisor 的东西,它的任务有2个。第一,对cpu和内存等资源做从虚拟主机到物理主机的映射。
	  第二,给我们提供一个控制虚拟机的层。
	    VM 中的不同主机看起来完全不同。在不同的虚拟机中可以按照不同的操作系统,并且具有各自的内核。可以认为它们是完全密封的机器,与底层的物理机和同一个
	  hypervisor之上的其他虚拟机之间是完全隔离的。
	    这里的问题是,hypervisor 本身也需要一定的资源来完成自己的工作。它们会占用cpu,io和内存等。hypervisor 管理的主机越多,占用的资源就越多。在某个点,
	  这些额外的开销就会变成继续切割物理机的限制。

	2.Vagrant
		一个有用的部署平台,通常在开发和测试环境中使用,而非生产环境。Vagrant 可以在你的笔记本上创建一个虚拟的云,它的底层使用的是标准的虚拟化系统。你可以
	  使用文本文件来定义一系列虚拟机,并且可以在其中定义网络配置和镜像等信息。可以把这个文本文件体积到代码库,与团队的其他成员共享。

	3.Linux 容器
		Linux 容器可以创建一个隔离的进程空间,进而在这个空间中运行其他的进程。在Linux上,进程必须由用户来运行,并且根据权限的不同拥有不同的能力。进程可以创建
	  其他进程。Linux内核的任务就是维护这个进程树。
	    Linux 容器扩展了这个想法。每个容器就是整个系统进程树的一颗子树。内核已经帮我们完成了给这些容器分配物理资源的任务。这个通用的方法有很多具体的形式,比如
	  Solaris Zones 和 OpenVZ,但最流行的还是 LXC。基本上所有现代的Linux内核都提供了LXC。
	    Linux 容器不需要 hypervisor;其次,尽管每个容器可以运行不同的操作系统发行版,但必须共享相同的内核(因为进程树存在于内核中)。这意味着,我们的主机操作系统
	  可以运行 Ubuntu,而在容器中可以运行 CentOS,只要它们的内核相同即可。
	    避免了 hypervisor 的使用,Linux容器启动更快。对于一台虚拟机来说,要花几分钟时间来启动,容器只需要几秒钟即可。

	4.Docker	
		Docker 是构建在轻量级容器之上的平台。Docker 还可以缓解运行过多服务进行本地开发和测试的问题。我们可以在 Vagrant 中启动单个VM,然后在其中运行很多Docker
	  实例,每个实例中包含一个服务。接下来,就可以使用Vagrant来创建和销毁Docker平台本身,并使用Docker来快速配置每个服务了。
	    CoreOS 是一个专门为docker设计的操作系统,它是一个经过裁剪的Linux OS,仅提供有限的功能保证docker的运行。

12.一个部署接口

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值