




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微 服 务 架 构 的 部 署本文从以下几个方面简要说明微服务架构项目的实践经验:架构选型、开发测试环境下的相关工具支持、 人员分工及开发部署流程、相关设计及注意事项。最后,将根据实践经验讨论提高微服架构下的开发和运 维效率的切实需求,进一步理清本项目所实现的容器服务管理平台的完善性需求。本项目是一个企业级的容器服务管理平台,该平台的功能是基于容器实现的应用运行环境管理,以及 应用开发阶段的持续集成和持续发布。简单的理解该平台的核心功能之一就是管理复杂应用的开发和运维 环境,提高微服务架构下的开发和运维效率。项目的开发背景如下:首先,该系统具有典型分布式应用系统特征:该平台所运行的服务器配置不
2、高,例如华为RH1288这类低配置服务器,允许硬件失败;系统平台要求可根据实际用户数的规模进行伸缩部署,保证硬件资源的合理利用;由于系统平台之上需要运行若干企业应用的开发和运行环境,可靠性是非常重要的,不允许单点失效。其次,本系统功能复杂,从架构的角度需要将系统分成多个层次和若干个子系统。不同的层次、子系 统根据具体情况需要采用不同的开发语言,由不同的开发小组完成。第三,项目组成员由几个城市的异地团队协同开发,统一的开发环境和协同工具是必不可少的。针对上述项目背景的考虑,本项目选择基于微服务架构进行项目开发。开发、测试、部署使用到的工具集“工欲善其事、必先利其器”,借助适合的流程和相关工具集,
3、才能提高微服务架构下的应用开发效 率。本项目利用 DevOPs流程并选用一套相关工具集实现应用开发管理,提高开发、测试、部署的效率。代码库:本项目使用分布式代码库Gitlab ,它的功能不限于代码仓库,还包括 reviews(代码审查),issue tracking( 问题跟踪)、wiki等功能,是代码管理和异地团队沟通、协作工具的首选。Docker镜像仓库、Docker :本项目用容器贯穿整个软件开发流程,以容器作为应用发布的载体,应用 的开发环境和测试发版环境都运行在Docker容器中。对于复杂的开发和运维环境管理Docker具有先天的优势,目前国内外的互联网公司有大多数都已经将Docke
4、r应用到了他们的开发或者生产环境中了。K8s:本项目采用 Kubernates作为容器调度管理的基础环境,开发环境、测试环境的 Docker容器都 由K8s负责调度管理。Jenkins :快速的部署发布离不开老牌持续集成明星Jenkins ,本项目通过Jenkins任务构建代码、将应用打包成 Docker镜像,最终发布到 K8s环境中将容器运行起来。Shell脚本:编写Shell脚本将项目打分支、发布应用等开发阶段的配置管理工作自动化,降低运维 门槛、提高配置管理和运维的效率。WIKI : Gitlib 上的 WIKI功能相对简陋,因此项目组选择dokuwiki作为异地团队协作和沟通的工具团队
5、成员可以将设计文档、知识分享文档、公告信息等信息可以更新到wiki上,便与协同开发。禅道:为了便于开发计划、开发任务和 bug关联起来,本项目使用禅道进行开发任务和bug管理。人员分工及开发流程微服务架构应用的开发、部署的复杂度都是远大于单体式应用的,靠运维人员手工的配置管理显然是 难于应彳t 了。 DevOps主张以自动化任务处理方式实现软件交付及基础设施更新,可以说是微服务架构应用开发和运维的必要条彳本项目采用DevOps的理念的开发流程进行开发。实现部署和运维的自动化需要工具,同时DevOps强调软件开发者与其他IT员工及管理层间的协作与沟通,因此明确的人员分工和开发流程是与工具同样重要
6、的因素。通俗的说,就是有了工具,大家要知道怎么使用工具,并且愿意使用工具 才能真正达到提高研发效率的目的。项目组的主要工作成员无非也是做开发、测试和系统管理三类工作,这里只说明与传统的企业应用开 发过程中三类人员所做的工作略有不同的工作内容。开发人员:a)开发者做开发设计,需要将涉及到接口部分设计更新到wiki上,供调用者评审和调用。b)开发者除了编写程序逻辑外,还需要注意编写单元测试用例,因为分布式应用联调相对复杂,先 做在编写单服务时做好了测试再联调能够提高开发效率。c)由于本项目是采用 Docker容器作为发布载体的,开发者可能需要修改DockerFile 模板里的部分参数,便于部署阶段
7、能将编译后的代码打包到镜像中。相对于传统的开发方式,这是对开发者额外的要求。让所有开发者懂 Dockerfile 似乎要求也有点高,其实每个子项目中的 DockerFile 及脚本一般是在搭建项 目框架时,主要系统配置管理员编写的好的模板,若开发人员不懂相关技术,也可以跟配置管理员沟通需 求,由配置管理员修改相关文件。测试人员:测试人员的工作没有什么特别,只是需要注意除了每个Sprint阶段的测试外,还需要配合开发人员持续集成的测试;系统配置管理人员:一般DevOps的开发方式是依赖于云基础平台以及自动化发布工具的,因此相对于传统开发方式,对系统配置管理者的技术要求会比较低。但是,我们的项目开
8、发目的就是构建一个能支 撑DevOps流程的平台,其开发本身还不具备相应的平台基础。因此,我们项目最初的系统配置管理工作 是由架构师来做的,主要需要做如下这些事:a)部署运行项目组开发需要用到公共的服务组件、例如 zookeeper注册中心、Docker Registry镜像 仓库、数据库等;b)为子项目编写在 git上打分支的脚本,便于测试发版的时候打分支;c)编写各类型应用发布部署成镜像的Dockerfiled)制作或者在网上找到现成的开发所需环境的Docker镜像,并且Push到项目开发使用的私有镜像库中;e)编写Shell脚本实现将子项目打包成Docker镜像,并且 Push到镜像仓库
9、中。f)在Jenkins上配置自动编译或者部署任务,实现持续集成和部署。本文将对项目的开发、部署联调以及测试发版流程和规范做简要说明,并提供项目各个阶段使用到的 部分自动化脚本工具示例。图1项目持续集成和部署流程代码分支管理:如图所示,在 git上创建的每一个项目都需要至少建立develop和master两个分支。开发人员只有权限把代码提交到develop分支上,平时的持续集成和联调都从develop分支上获取代码。每个Sprint阶段测试发版时,配置管理员从develop分支上创建一个用于测试的release分支。当测试修改bug时,开发人员只把修改后的代码提交到对应的测试Release分支
10、上。当测试版本稳定后,由配置管理员将代码合并到 Master分支中。自动部署和发布:项目借助于 Shell脚本、Dockerfile 、K8s配置文件和Jenkins任务实现了自动化的持续集成和部署。配置管理员在项目目录下编写的脚本文件结构如图2所示。a)创建分支的shell脚本,示例见附件 1;#!/bin/bashif -z $1 ; thencat EOFUsage:EOFexit 1fiDEPLOY_VERSION=$1RP_FILES=(subproject1/ subprojectl/ subprojectl/Makefile)if -z $(git branch -a | gre
11、p -e /$DEPLOY_VERSION$) ; thengit commit -a -m Create Branch $DEPLOY_VERSIONgit push origin $DEPLOY_VERSIONDockerfile示例文件,将 Java dubbo服务发布为镜像为例,示例见附件2:MAINTAINER zhangsanRUN mkdir -p /app ?COPY target/ /app/COPY ./ /app/RUN chmod +x /app/WORKDIR /appCMD ./EXPOSE 8080Makefile 文件:包括编译项目、将项目打包成Docker镜像
12、、将镜像 Push到镜像仓库、在K8s上创建 ReplicationController 、在 K8s上创建service 的命令脚本:clean:mvn clean#各当前程序打包成 Docker镜像build: ?docker build -t $(IMAGE).#1各当前镜像Push到镜像仓库push: ?docker push $(IMAGE)run:redeploy:kubectl replace -f $(KUBE_OPS)undeploy:kubectl delete -f $(KUBE_OPS)船J建 servicedeploy-svc:kubectl create -f $(
13、KUBE_OPS)undeploy-svc:kubectl delete -f $(KUBE_OPS)K8s部署配置文件,创建 ReplicationController 、创建service 示例见附件4:#创建 Service apiVersion: v1 kind: Service metadata:name: subproject1 labels:component: subproject1 spec:ports:-port: 8888 nodePort: 16888 selector:name: svc-subproject1 type: NodePore)配置管理员在 Jenkin
14、s上配置自动或手动触发的任务,在 jenkins任务中配置shell脚本,可实 现应用的一键部署,示例见附件5。具体的过程说如下:.从Git上拉取代码,编译、发布项目;将编译好的程序包,打包成 Docker镜像;将打包好的Docker镜彳象Push到镜像仓库;Jenkins 执行Shell脚本命令,从镜像仓库拉取镜像在K8s环境中创建pod和RG将应用程序及其运行环境所在的容器在K8s平台上运行起来。测试与发版:从图中可以看到,项目的开发环境和测试环境是相互隔离的两套环境。a)部署在开发环境的应用代码,来自 develop分支,对应的Docker镜彳象Tag用latest ,供开发人员 调试、
15、以及测试人员随时协助做集成测试;b)部署在测是环境的应用代码,来自每到一个 Sprint阶段发版测试时配置管理员从develop分支中打出的测试发版分支,分支名对应的版本号不同,相应的 Docker镜像的tag也会随是版本号改变。测试 环境中部署的应用主要用于测试验证。部署联调:项目分为四层:前端 UI、WEB!有若干个web应用、Service层包括若干个分布式服务、基础底层。这里简要说明一下各层之间的调试方式:a)前端和 Web层联调:前端开发人员本地启动一个Nginx,配置文件将localhost 代理指向web server的地址,即可在本地调试与动态Web端的交互。b) WEB层与服
16、务层联调、服务层之间联调、服务层与基础层联调,分为两种方式:本地调试:部署一个专用的 zookeeper注册中心,开发者可以把本机地址注册到注册中心,供相关人 员临时调用服务调试。集成环境调试:提交代码触发Jenkins任务,将服务打包成容器镜像,部署到K8s上在完整的系统运行环境中联合调试。具体的集成环境编排依赖于k8s完成。微服务的分层和服务交互设计和来自 DZone community 社区的关于微服架构的利弊以及设计原则有很多着名的文章有介绍,例如MarinFowler的博文Microservices:a definition of this new architectural ter
17、mMicroservices in Practice: From Architecture to Deployment在 InfoQ 等技术网站都有中文翻译,本文就不对概念和设计原则做过多赘述。本小节主要是说明关于项目的逻辑分层结构和服务交互方面的设 计。本项目遵守以下微服务架构的主要基本原则,但是也会根据具体项目情况有所保留。单一责任原则(Single Responsibility Principle, SRP保证微服务设计能支持服务的敏捷/独立地开发和部署。图2分层结构及通信机制架构分层设计如图2所示,项目的架构是分为四层:静态 UI层、动态 WEB!、业务服务层、基础业务层。i.静态UI层,直接面向用户的操作展示界面,包括静态 UI设计和JS交互代码,主要采用 Angulars 框架;ii.动态WEB!是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家庭农场养殖技术推广协议
- 时尚潮玩商品网络销售合作权责共担协议
- 昆虫记选读教学教案:初中生物与自然知识结合学习指导
- 应对项目管理中的风险应对策略
- 海底两万里的冒险之旅教案设计
- 养老服务机构投资建设合同
- 高端设备采购与维护合同
- 花木兰报国传奇故事解读
- 租赁户外场地合同协议书
- 2024-2025学年高二化学人教版选择性必修3教学课件 第一章 第一节 第1课时 有机化合物的分类
- 材料性能学课件:材料的热学性能-2-热传导-热稳定性-
- 幼儿园优质公开课:中班数学《寻宝小勇士》课件
- 监理单位工程项目总监及监理人员名册
- 北师大版小学英语3-6年级单词-(三起)带音标-精华版
- 《铁道工程(A)》课程大纲
- 鼻饲老年人进食照护-鼻饲的定义和适应人群
- 正红小学家长学校家校联系制度
- R1快开门式压力容器操作试题及答案
- 2022-2023学年道德与法治小学四年级下册全册单元复习课教案(共4个单元)
- 机动车检验检测机构培训试题及答案
- 配位化学-本科生版智慧树知到答案章节测试2023年兰州大学
评论
0/150
提交评论