ImageVerifierCode 换一换
格式:DOC , 页数:11 ,大小:504.50KB ,
资源ID:3132699      下载积分:8 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3132699.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(微服务架构的部署.doc)为本站上传会员【快乐****生活】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

微服务架构的部署.doc

1、微服务架构的部署 本文从以下几个方面简要说明微服务架构项目的实践经验:架构选型、开发测试环境下的相关工具支持、人员分工及开发部署流程、相关设计及注意事项。最后,将根据实践经验讨论提高微服架构下的开发和运维效率的切实需求,进一步理清本项目所实现的容器服务管理平台的完善性需求。 本项目是一个企业级的容器服务管理平台,该平台的功能是基于容器实现的应用运行环境管理,以及应用开发阶段的持续集成和持续发布。简单的理解该平台的核心功能之一就是管理复杂应用的开发和运维环境,提高微服务架构下的开发和运维效率。项目的开发背景如下: 首先,该系统具有典型分布式应用系统特征: 该平台所运行的服务器配置不高,例

2、如华为RH1288这类低配置服务器,允许硬件失败; 系统平台要求可根据实际用户数的规模进行伸缩部署,保证硬件资源的合理利用; 由于系统平台之上需要运行若干企业应用的开发和运行环境,可靠性是非常重要的,不允许单点失效。 其次,本系统功能复杂,从架构的角度需要将系统分成多个层次和若干个子系统。不同的层次、子系统根据具体情况需要采用不同的开发语言,由不同的开发小组完成。 第三,项目组成员由几个城市的异地团队协同开发,统一的开发环境和协同工具是必不可少的。 针对上述项目背景的考虑,本项目选择基于微服务架构进行项目开发。 开发、测试、部署使用到的工具集 “工欲善其事、必先利其器”,借助适合

3、的流程和相关工具集,才能提高微服务架构下的应用开发效率。本项目利用DevOPs流程并选用一套相关工具集实现应用开发管理,提高开发、测试、部署的效率。 代码库:本项目使用分布式代码库Gitlab,它的功能不限于代码仓库,还包括reviews(代码审查), issue tracking(问题跟踪)、wiki等功能,是代码管理和异地团队沟通、协作工具的首选。 Docker镜像仓库、Docker:本项目用容器贯穿整个软件开发流程,以容器作为应用发布的载体,应用的开发环境和测试发版环境都运行在Docker容器中。对于复杂的开发和运维环境管理Docker具有先天的优势,目前国内外的互联网公司有大多数都

4、已经将Docker应用到了他们的开发或者生产环境中了。 K8s:本项目采用Kubernates作为容器调度管理的基础环境,开发环境、测试环境的Docker容器都由K8s负责调度管理。 Jenkins:快速的部署发布离不开老牌持续集成明星Jenkins,本项目通过Jenkins任务构建代码、将应用打包成Docker镜像,最终发布到K8s环境中将容器运行起来。 Shell脚本:编写Shell脚本将项目打分支、发布应用等开发阶段的配置管理工作自动化,降低运维门槛、提高配置管理和运维的效率。 WIKI:Gitlib上的WIKI功能相对简陋,因此项目组选择dokuwiki作为异地团队协作和沟通的

5、工具,团队成员可以将设计文档、知识分享文档、公告信息等信息可以更新到wiki上,便与协同开发。 禅道:为了便于开发计划、开发任务和bug关联起来,本项目使用禅道进行开发任务和bug管理。 人员分工及开发流程 微服务架构应用的开发、部署的复杂度都是远大于单体式应用的,靠运维人员手工的配置管理显然是难于应付了。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) 编写各类型应用发布部署成镜像的Dockerfile; d) 制作或者在网上找到现成的开发所需环境的Docker镜像,并且Push到项目开发使用的私有镜像库中; e) 编写Shell脚本实现将子项目

9、打包成Docker镜像,并且Push到镜像仓库中。 f) 在Jenkins上配置自动编译或者部署任务,实现持续集成和部署。 本文将对项目的开发、部署联调以及测试发版流程和规范做简要说明,并提供项目各个阶段使用到的部分自动化脚本工具示例。 图 1 项目持续集成和部署流程 代码分支管理: 如图所示,在git上创建的每一个项目都需要至少建立develop和master两个分支。开发人员只有权限把代码提交到develop分支上,平时的持续集成和联调都从develop分支上获取代码。 每个Sprint阶段测试发版时,配置管理员从develop分支上创建一个用于测试的release分

10、支。当测试修改bug时,开发人员只把修改后的代码提交到对应的测试Release分支上。当测试版本稳定后,由配置管理员将代码合并到Master分支中。 自动部署和发布: 项目借助于Shell脚本、Dockerfile、K8s配置文件和Jenkins任务实现了自动化的持续集成和部署。配置管理员在项目目录下编写的脚本文件结构如图2所示。 a) 创建分支的shell脚本,示例见附件1; #!/bin/bash if [ -z "$1" ]; then cat < EOF exit 1 fi DEPLO

11、Y_VERSION=$1 RP_FILES=(subproject1/kube-rc.yaml subproject1/pom.xml subproject1/Makefile) if [ -z $(git branch -a | grep -e /${DEPLOY_VERSION}$) ]; then  git branch ${DEPLOY_VERSION} git checkout ${DEPLOY_VERSION} else git checkout ${DEPLOY_VERSION} git pull fi #替换k8s配置文件中环境指向,从开发切换到测试 #替换

12、掉pom.xml文件中的SNAPSHOT为release版本号 #替换掉makefile中发布的镜像Tag的latest为release版本号 for f in ${RP_FILES[@]}; do sed -i -e "s###g" \ -e "s#0.0.1-SNAPSHOT#${DEPLOY_VERSION}-SNAPSHOT#g" \ -e "s#latest#${DEPLOY_VERSION}#g" $f done git commit -a -m "Create Branch ${DEPLOY

13、VERSION}" git push origin ${DEPLOY_VERSION} b) Dockerfile示例文件,将Java dubbo服务发布为镜像为例,示例见附件2: FROM MAINTAINER zhangsan ENV spring.profiles.active="production" ENV JAVA_OPTS="-Xmx1024m" RUN mkdir -p /app  COPY target/subproject1.war /app/ COPY ./startup.sh /app/ RUN chmod +x /app/startup.sh

14、 WORKDIR /app CMD ["./startup.sh"] EXPOSE 8080 c) Makefile文件: 包括编译项目、将项目打包成Docker镜像、将镜像Push到镜像仓库、在K8s上创建ReplicationController、在K8s上创建service的命令脚本: IMAGE_PREFIX = COMPONENT = subproject1 ifndef BUILD_TAG BUILD_TAG = latest endif IMAGE = $(IMAGE_PREFIX)$(COMPONENT):$(BUILD_TAG) ifndef KUB

15、E_OPS KUBE_OPS = --server= --namespace=project1 endif clean: mvn clean compile: clean mvn -U -DskipTests=true -Dmaven.javadoc.skip=true package #将当前程序打包成Docker镜像 build:  docker build -t $(IMAGE) . #将当前镜像Push到镜像仓库 push:  docker push $(IMAGE) run:  docker run --rm -it -e spring.profile

16、s.active=application -p 8080:8080 $(IMAGE) #部署RelicationController deploy: kubectl create -f kube-rc.yaml $(KUBE_OPS) redeploy: kubectl replace -f kube-rc.yaml $(KUBE_OPS) undeploy: kubectl delete -f kube-rc.yaml $(KUBE_OPS) #创建service deploy-svc: kubectl create -f kube-svc.yaml $(KUBE_OPS

17、) undeploy-svc: kubectl delete -f kube-svc.yaml $(KUBE_OPS) d) K8s部署配置文件,创建ReplicationController、创建service示例见附件4: #创建ReplicationController apiVersion: v1 kind: ReplicationController metadata: name: subproject1 spec: replicas: 1 selector: name: subproject1 template: meta

18、data: labels: name: subproject1 spec: containers: - name: subproject1 image: imagePullPolicy: Always env: - name: DUBBO_REGISTRY_ADDRESS value: "kube://zookeeper:2181" - name: DUBBO_REGIST

19、RY_REGISTER value: "true" ports: - containerPort: 8888 #创建Service apiVersion: v1 kind: Service metadata: name: subproject1 labels: component: subproject1 spec: ports: - port: 8888 nodePort: 16888 selector: name: svc-sub

20、project1 type: NodePor e) 配置管理员在Jenkins上配置自动或手动触发的任务,在jenkins任务中配置shell脚本,可实现应用的一键部署,示例见附件5。 #!/bin/bash -e IMAGE= make compile if [ $build = "true" ]; then echo "docker build -t $IMAGE" docker build -t $IMAGE . echo "docker push $IMAGE" docker push $IMAGE fi if [ $undeploy

21、 = "true" ]; then make undeploy fi if [ $deploy = "true" ]; then make deploy fi if [ $deploysvc = "true" ]; then make deploy-svc fi 具体的过程说如下: i. 从Git上拉取代码,编译、发布项目; ii. 将编译好的程序包,打包成Docker镜像; iii. 将打包好的Docker镜像Push到镜像仓库; iv. Jenkins执行Shell脚本命令,从镜像仓库拉取镜像在K8s环境中创建pod和RC,将应用程序及其运行环境所在的容器在

22、K8s平台上运行起来。 测试与发版: 从图中可以看到,项目的开发环境和测试环境是相互隔离的两套环境。 a) 部署在开发环境的应用代码,来自develop分支,对应的Docker镜像Tag用latest,供开发人员调试、以及测试人员随时协助做集成测试; b) 部署在测是环境的应用代码,来自每到一个Sprint阶段发版测试时配置管理员从develop分支中打出的测试发版分支,分支名对应的版本号不同,相应的Docker镜像的tag也会随是版本号改变。测试环境中部署的应用主要用于测试验证。 部署联调: 项目分为四层:前端UI、WEB层有若干个web应用、Service层包括若干个分布式服务

23、基础底层。这里简要说明一下各层之间的调试方式: a) 前端和Web层联调:前端开发人员本地启动一个Nginx,配置nginx.conf文件将localhost代理指向web server的地址,即可在本地调试与动态Web端的交互。 b) WEB层与服务层联调、服务层之间联调、服务层与基础层联调,分为两种方式: 本地调试:部署一个专用的zookeeper注册中心,开发者可以把本机地址注册到注册中心,供相关人员临时调用服务调试。 集成环境调试:提交代码触发Jenkins任务,将服务打包成容器镜像,部署到K8s上在完整的系统运行环境中联合调试。具体的集成环境编排依赖于k8s完成。 微服务

24、的分层和服务交互设计 关于微服架构的利弊以及设计原则有很多著名的文章有介绍,例如MarinFowler的博文《Microservices:a definition of this new architectural term》和来自DZone community社区的《Microservices in Practice: From Architecture to Deployment》在InfoQ等技术网站都有中文翻译,本文就不对概念和设计原则做过多赘述。本小节主要是说明关于项目的逻辑分层结构和服务交互方面的设计。 本项目遵守以下微服务架构的主要基本原则,但是也会根据具体项目情况有所保留。

25、 i. 单一责任原则(Single Responsibility Principle,SRP) ii. 保证微服务设计能支持服务的敏捷/独立地开发和部署。 图 2分层结构及通信机制 架构分层设计 如图2所示,项目的架构是分为四层:静态UI层、动态WEB层、业务服务层、基础业务层。 i. 静态UI层,直接面向用户的操作展示界面,包括静态UI设计和JS交互代码,主要采用Angulars框架; ii.动态WEB层是各业务服务的“门面”,根据前端设计的需要调用、组装业务服务层的API,相对来说,这一层变动的频率较高,例如系统需要进行流程优化或者前端UE改造,相应的都要变更这一层。动态WEB层采用Java Spring或者python Django框架实现; iii.业务服务层,根据业务需求按照功能对基础服务层进行扩展和包装,采用Dubbo分布式服务框架实现,具体版本是当当扩展过的Dubbox,支持REST API,并且对Spring的支持升级到了3.x; iv. 基础服务层比较稳定,提供一些基础功能,采用Go语言/Ruby/Java/Python等多种语言实现的。 . . . .

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服