从0开始搭建一个微服务的持续交付系统,教你如何快速搭建
本文介绍了如何利用开源软件快速搭建一套微服务的持续交付系统。本文假设的环境是Linux操作系统,用到的软件包括Git、Jenkins、Salt、ZooKeeper、Apache等。开始之前,我先简单介绍下持续交付和微服务的概念,以便大家更好的理解本文的精华。 什么是持续交付?我们先举个物流的例子,现在各大电商都非常重视物流的自动化建设,在实现包括运输、装卸、包装、分拣、识别等作业过程的设备和设施自动化的同时,更在研究无人机和自动驾驶汽车送货,达到物流的全自动。 那么软件开发呢,从开发人员check in代码到代码仓库,到代码的构建、部署、测试、发布,我们可以形象地把这个过程称为“软件物流”,现实世界的物流实现了相当的自动化,“软件物流”也应如是,实现从开发人员check in代码(客户下单)到生产系统上线(送货上门)的自动化。 说到这里,我们可以给持续交付下一个“非专业”的定义,持续交付就是实现“软件物流”的自动化。 图1.持续交付流水线 图1摘自《持续交付:发布可靠软件的系统方法》,展示了持续交付具体包括的内容。本文重点讨论如何实现微服务的持续交付流程,所以会忽略掉整个流程的一些细节(如代码分析、单元测试等等)。 那什么是微服务呢?微服务的概念最初由Martin Fowler与James Lewis于2014年共同提出,微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言书写,以及不同数据存储技术,并保持最低限度的集中式管理。目前微服务的主流实现方式有两种:RESTful API和消息队列。 图2 RESTful微服务 图3 message queue微服务 图2、图3是两种典型微服务架构的简略图。当然现实中的系统会复杂的多,比如会有微服务聚合,多级缓存,注册中心等。 微服务相对单体式应用来说有明显的好处:
但在一个单体式应用拆分成数十个乃至上百个微服务,由于服务数量的增加,以及微服务支持多种编程语言的特性,对软件的构建,部署,测试,监控都带来了全新的挑战。本文将讨论如何通过持续交付来降低微服务构建,部署的复杂度。 微服务的持续交付:统一方法 由于微服务的特性,微服务的持续交付会比单体式应用的持续交付复杂的多。本节列出了为了降低微服务持续交付的复杂度,我们遵循的一些原则:
快速搭建微服务的持续交付:持续构建 下面我们结合一个虚构的项目来介绍持续交付的实现细节,假设我们有一个项目BetaCat,由ms1、ms2…msN,n个微服务构成。下面我们重点介绍ms1微服务如何实现持续交付,其它微服务可以类推。 本节讨论下如何实现持续构建,下一节会探讨持续部署。 图4 Jenkins处理仓库代码流程 (编辑:ASP站长网) |