微服务开发的软件过程

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文讲的是微服务开发的软件过程【编者的话】不少同学询问到如何实施微服务,特别是对项目数量增加的担忧。 在支付渠道设计一文中提到,可以按照渠道来划分项目,一个渠道一个项目,有同学认为这会导致项目太多无法管理。 本文要回答这个问题,在微服务中,我们是如何管理项目的,即微服务的软件过程。
本文讲的是微服务开发的软件过程【编者的话】不少同学询问到如何实施微服务,特别是对项目数量增加的担忧。 在支付渠道设计一文中提到,可以按照渠道来划分项目,一个渠道一个项目,有同学认为这会导致项目太多无法管理。 本文要回答这个问题,在微服务中,我们是如何管理项目的,即微服务的软件过程。 

支付系统基础设施建设 一文简单描述了持续集成的所需要的基础软件。这里我们从软件过程的角度,详细介绍这些步骤。 支持持续集成所需要的基础软件,在该文中有介绍,请大家务必先阅读。 这里我们以基于jira的过程管理为例来讲述。 关于Jira软件本身介绍、相对Redmine的优势等问题,请大家自行查阅资料,不在本文介绍范围。 

在介绍这个过程之前,先强调一个观点:
  • 人管代码,代码管机器
  • 人管代码,代码管机器
  • 人管代码,代码管机器

一、软件过程

Jira原是设计来进行Bug跟踪的系统,后来系统功能逐步完善后,被广泛适用于软件过程管理。Jira优势在于简单,好用。 这里就不介绍Jira的具体使用。 使用Jira进行软件项目管理,首先需要定义任务的处理流程。 以下是一个参考流程:

01.png

在这个流程中,需要区分两个概念:任务和子任务。 每个任务对应一个完整的业务需求,比如对账、对接工行借记卡、获取个人优惠券列表接口。这些业务需求每个都是可以独立测试的。子任务设置相对比较简单,每个子任务对应这在本次任务执行中需要修改的开发项目。 比如对接工行借记卡,会涉及到:

  1. 支付网关项目调整;
  2. 支付路由项目中增加路由选项;
  3. 工行借记卡通道对接。

三个项目的修改,那会对应在这个任务下建立三个子任务。

  • 任务是用来追踪项目过程的,这是项目经理和产品经理关注的层次。
  • 子任务是用来支持开发自动化的,这是开发人员关注的层次。

这样,针对任务和子任务,会设置不同的属性:
02.png

1.1 需求管理

Jira也是一个不错的需求管理工具。产品经理可以通过Jira来执行需求管理,相对开发来说,需求管理流程会比较简单,一般是开发需求、审核需求、关闭需求三个环节即可。 需要注意的地方是:

  1. 需求管理流程需要和开发流程分离,毕竟这是不同的团队做的事情。
  2. 开发任务可以和需求任务相关联。Jira通过复制任务来提供这个支持。

一个需求任务可以对应多个开发任务,这在实际操作中是很常见的:

  1. 为了满足上线要求,一个需求任务会被拆分成多个开发任务,先完成核心功能开发并上线,再完成外围功能开发。这两次独立上线的工作,会被拆分为2个或者更多的开发任务;
  2. 如果对不同平台,比如Android、IOS、PCweb有不同的上线时间要求和技术需求,也需要将当前需求按照目标平台来拆分成开发任务。

1.2 创建任务

如上所述,开发任务的来源有两个:
  • 需求任务,即对应产品经理提的需求;
  • 优化任务,这一般是开发团队内部进行重构或者性能优化来提的开发任务。

那任务的粒度如何把握? 每个开发任务是一个完整的需求,是可以独立执行测试和验证的。 每个任务开发周期控制在1个月以内。 

1.3 创建子任务

在接收到开发任务后,开发人员需要对系统实现进行设计和分解,确定需要新开发的内容以及需要改进的工作。 在微服务架构中,一次任务开发会涉及到多个系统的变更。这样就需要为每个系统建立一个独立的子任务,以后,我们将按照这个子任务的设置来驱动开发流程。 每个子任务开发周期尽量限制2天以内,不能超过一周。 

1.4 启动主任务开发

主任务启动开发流程比较简单,主要是邮件通知到各相关人员,可以启动该任务。 

1.5 启动子任务开发

子任务的启动和执行,是整个流程的核心工作。 
03.png

这里如果是使用git/gitlab来做版本控制,整个流程的要点在于:
  1. 如果需要新建项目来开发,则由开发人员填写新项目的名称、类型(Web、RPC、工具类等),在Git上创建一个项目框架,包含必要的基础文件;
  2. 邮件通知开发人员需要下载的项目代码库地址;
  3. 开发人员签出代码到本地,执行开发工作;
  4. 开发人员随时可以签入代码到服务器上,发出Merge Request;
  5. GitLab在接受签入前,执行静态代码检查。静态代码检查的工具有FindBugs、PMD、Sonar等。 开发人员在开发时也必须自我进行静态检查,这里执行检查是避免开发人员漏查;
  6. 执行单元测试;
  7. 通知相关人员进行代码审核;
  8. 执行代码审核;
  9. 符合审核条件(如至少有2个人同意),审核通过, 代码被自动合并到主干版本。
  10. 通知子任务可以提测。 当然,是否提测,是由开发人员来决定。

1.6 子任务和任务提测

子任务开发完成后,即可提测。子任务提测时,将触发Jenkins进行测试环境部署。 

测试有两种方式:自动测试和人工测试。尽量采用自动测试,使得开发人员能够及时发现问题。 

所有子任务完成后,主任务可以提测。主任务提测后,如果是人工测试,则测试人员介入开始执行测试任务;如果是自动测试,则开始运行集成测试脚本。 
04.png

测试通过后, 既可以准备上线。 

1.7 预部署和全部署

一般上线会分为两步,预部署和全部署。预部署的目的是先验证系统在线上环境运行是否正常,减少回滚成本。特别是在部署服务器特别多的情况下,先部署1-2台机器,可以在线上验证本次上线是否可以。 验证通过后,既可以执行全部署。 

注意,预部署和全部署都是针对子任务而言。
05.png

少数公司会要求上线前进行审批,但这样做是不利于流程自动化的。 一天几十次上线,谁能知道这是不是可以上。 但有一点很重要,系统上线前,必须通知到相关的使用方。如果出现问题,使用方可以尽快知悉。

二、项目文件结构

开发参考目录结构:
06.jpg

从这个目录里面我们可以看到,和项目相关的部署用脚本,需要由项目开发人员自己来维护,用以保证部署工作能够自动执行。包括验证项目部署成功的脚本。 

验证项目是否部署成功,一种方式是在日志中打桩,grep到这个日志,即意味着系统成功启动;一种方式是调用接口来验证是否成功。 

部署目录参考:

07.png

总之,微服务项目的管理核心理念在于“自动化”,消除人为因素。人管代码,代码管机器,最终目标是要实现自动上线。 消除人工测试,取代以自动化测试;消除人工验证,取代以自动验证;消除人工部署,取代以自动化部署。 这样,再多的项目,也能够很好的进行管理。

原文发布时间为:2017-02-16

本文作者:slixf

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:微服务开发的软件过程

相关文章
|
3天前
|
API 持续交付 开发者
构建高效微服务架构:后端开发的新视角
【5月更文挑战第8天】 随着现代软件开发的演变,微服务架构已经成为了企业追求敏捷、可扩展和灵活部署的重要解决方案。本文将深入探讨如何构建一个高效的微服务架构,包括关键的设计原则、技术栈选择以及持续集成与部署的最佳实践。我们还将讨论微服务带来的挑战,如数据一致性、服务发现和网络延迟,并提出相应的解决策略。通过本文,后端开发者将获得构建和维护微服务系统所需的深度知识,并了解如何在不断变化的技术环境中保持系统的健壮性和可维护性。
35 8
|
1天前
|
存储 监控 API
构建高效微服务架构:后端开发的现代实践
【5月更文挑战第9天】 在本文中,我们将深入探讨如何在后端开发中构建一个高效的微服务架构。通过分析不同的设计模式和最佳实践,我们将展示如何提升系统的可扩展性、弹性和维护性。我们还将讨论微服务架构在处理复杂业务逻辑和高并发场景下的优势。最后,我们将分享一些实用的工具和技术,以帮助开发者实现这一目标。
|
3天前
|
Kubernetes 持续交付 开发者
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第8天】 随着现代软件开发的不断演进,微服务架构已成为众多企业解决复杂系统问题的首选方案。本文深入探讨了微服务架构的核心概念、设计原则以及实施策略,旨在为后端开发者提供一种清晰、高效的技术路径。通过分析微服务的优势与挑战,结合具体的应用实例,文章将展示如何通过容器化、服务网格和持续集成/持续部署(CI/CD)等先进技术手段,实现后端服务的高可用性、可扩展性和敏捷性。
|
3天前
|
消息中间件 监控 Java
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第8天】随着现代软件开发的复杂性日益增加,传统的单体应用架构逐渐难以满足快速迭代和灵活部署的需求。微服务架构作为一种新的解决方案,以其模块化、独立性强和易于扩展的特点,正在成为后端开发领域的重要趋势。本文将深入探讨如何构建一个高效的微服务架构,并分析其对后端开发实践的影响。
|
3天前
|
敏捷开发 持续交付 API
构建高效微服务架构:后端开发的现代实践
【5月更文挑战第8天】 在数字化转型的浪潮中,微服务架构已成为企业追求敏捷开发、持续交付和系统弹性的关键解决方案。本文将深入探讨微服务的核心概念,包括其设计原则、优缺点以及如何在后端开发中实现高效的微服务架构。我们将通过实际案例分析,展示微服务如何帮助企业快速适应市场变化,同时保持系统的可维护性和扩展性。
|
4天前
|
设计模式 Kubernetes 数据库
构建高效可靠的微服务架构:后端开发的新范式
【5月更文挑战第7天】在现代软件开发的浪潮中,微服务架构已经成为一种流行的设计模式。它通过将应用程序分解为一组小的、独立的服务来提高系统的可维护性和扩展性。本文深入探讨了微服务架构的核心概念、优势以及如何利用最新的后端技术构建一个高效且可靠的微服务体系。我们将讨论关键的设计原则,包括服务的独立性、通信机制、数据一致性和容错性,并展示如何在云环境中部署和管理这些服务。
17 3
|
5天前
|
缓存 监控 数据库
构建高性能微服务架构:后端开发的终极指南
【5月更文挑战第6天】 在现代软件开发的浪潮中,微服务架构以其灵活性、可扩展性和容错性引领着技术潮流。本文深入探索了构建高性能微服务架构的关键要素,从服务划分原则到通信机制,再到持续集成和部署策略。我们将透过实战案例,揭示如何优化数据库设计、缓存策略及服务监控,以确保系统的稳定性和高效运行。文中不仅分享了最佳实践,还讨论了常见的陷阱与解决之道,为后端开发者提供了一条清晰、可行的技术路径。
|
6天前
|
监控 负载均衡 持续交付
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第5天】在数字化转型的浪潮中,微服务架构以其灵活性、可扩展性和容错性成为企业追求的技术典范。本文深入探讨了微服务的核心组件、设计原则和实施策略,旨在为后端开发者提供构建和维护高效微服务系统的实用指南。通过分析微服务的最佳实践和常见陷阱,我们揭示了如何优化系统性能、保证服务的高可用性以及如何处理分布式系统中的复杂性。
|
6天前
|
负载均衡 Java 数据库
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第5天】在现代软件开发中,微服务架构已经成为一种流行的设计模式。它通过将大型应用程序分解为一组小型、松散耦合的服务来提高可维护性、可扩展性和敏捷性。本文将探讨如何构建高效的微服务架构,包括选择合适的技术栈、设计良好的服务接口、确保数据一致性以及实现高可用性和负载均衡。
|
8天前
|
JavaScript Java 持续交付
构建高效微服务架构:后端开发的新范式
【5月更文挑战第3天】 在现代软件开发的浪潮中,微服务架构以其灵活性、可扩展性和技术多样性而受到重视。本文深入探讨了如何构建一个高效的微服务系统,包括关键的设计原则、技术选型、以及实现细节。我们将通过分析微服务的核心概念,提供一套实用的步骤和最佳实践,以指导开发者构建出既健壮又易于维护的分布式系统。文章将重点讨论如何在保证系统性能和稳定性的前提下,实现服务的解耦与独立部署,从而推动后端开发工作流的优化和创新。