我们来深化学习微服务架构解析:微服务的采用前提,流程管理

流程管理

微服务从技术架构出发,使应用系统具备快速响应、灵活部署、敏捷交付、持续演进的特性成为可能,而规模化的微服务交付如果没有完整的软件工程和流程管理体系、自动化的流程交互运维工具,很难持续发展。

敏捷方法论

最早的软件开发是没有标准的,软件质量好坏完全取决于软件工程师的能力和素养。伴随着软件行业的发展,软件的整个开发流程需要 一 套 方 法 论 来 规 范 , CMMI ( Capability Maturity ModelIntegration,即能力成熟度模型集成)这种基于瀑布模式的标准软件开发流程解决了软件开发的标准化问题。在CMMI体系下,软件开发逐步向工程化迈进,但是也缺少了动态性和灵活性,人们开始反思传统方法的弊端,进而提出了敏捷方法。

2001年2月,由Martin Fowler等17位软件开发专家起草的敏捷***发表,敏捷联盟成立。我们可以看到一个熟悉的名字:MartinFowler,微服务架构的概念最早也是他提出来的。

下面我们了解一下敏捷***中敏捷软件开发的四个核心价值观。

● 个体和互动高于流程和工具:这里强调了人与人直接沟通的重要性和高效性,所以有了站立会议。但不要理解为完全不需要流程和工具,只是侧重人与人的沟通。

● 工作的软件高于详尽的文档:这里强调把更多的时间放在开发软件上。但并不是说文档就一点也不要写了,关键性的文档(项目整体流程描述及架构图等)还是要有的。

● 客户合作高于合同谈判:这里要区分公司属性,外包公司团队和企业自有项目团队肯定会采取不同的策略。这句话应该是讲给企业自有项目团队的,为了企业合作双方的利益,这个观点是正确的。但并不是说毫无底线地向客户妥协,而是提倡密切合作,以便提前发现问题,双方都可以减少损失,实现共赢。

● 响应变化高于遵循计划:这里道出了软件开发不可回避的问题,就是需求变更。站在企业整体利益的角度,需求变更是很正常的。随着市场变化、时间推移,之前的需求如果不做修改可能真的就影响了产品的落地效果。但这也不是说需求可以任意地变来变去,需要有既懂业务又懂技术的人来负责评估。

Scrum(迭代式增量软件开发过程)是实现敏捷开发的具体方式之一,是一种具体实施方案和流程,也称为过程管理框架。Scrum的主要原则是缩短软件的交付周期,通过将过程分解为短期的工作循环,每一个循环为一个Sprint(冲刺),在每个Sprint中,由项目团队确定目标,Scrum团队由不同类型的人员组成,包括开发、测试、业务人员、美工等,每个团队的目标由项目管理者在计划会议上确定,团队可以自行确定实现Sprint目标的方法和途径,可以自行管理日常工作和计划的执行。

微服务架构与敏捷研发流程一脉相承。微服务是将一个完整的系统分割成若干微小的、具备独立性的功能单元,每个功能单元是可以具备一个实际意义的小功能集。各个功能单元之间尽量是解耦或松耦合的,可以实现独立开发而不依赖其他功能单元。而敏捷保证微服务架构能够更好地适应需求的变化,保持团队的高效沟通,敏捷利用小型工作增量、频繁迭代与原型设计等手段,可以使我们摆脱大规模单体软件开发的风险。

微服务架构更多地从技术的角度提升开发和运维的效率,而敏捷方法论贯穿了软件工程的整个流程,它重视流程、沟通、协作。可以说,敏捷在管理流程上是对微服务架构落地的有益补充和保障。

DevOps转型

随着软件开发敏捷化的推进,DevOps正在成为软件交付的最佳模式。DevOps是一种研发模式和一种方法论,从2009年开始逐渐流行起来。它不是框架或技术的东西,是更好的优化开发(DEV)、测试(QA)、运维(OPS)的流程,使开发运维一体化,通过高度自动化的工具与流程来使得软件构建、测试、发布更加快捷、频繁和可靠。

DevOps的主要目的在于提高产品的交付能力与效率,要践行DevOps首先要改变的就是管理理念。

DevOps其实包含了三个部分:开发、测试和运维。从单体架构转型到微服务架构后,我们可能面临开发、测试和运维诸多挑战,微服务架构需要借助DevOps方法论进行持续开发和持续集成的原因如下:

● 服务拆分成为细粒度的服务后,服务之间需要持续集成,才能完成整体的功能迭代,需要自动化测试、自动化交付。相比单体架构,微服务架构有更高频率的软件部署集成、发布、交付诉求。

● 大多数微服务架构使用容器和云平台,需要在流程上支持快速的发布流程,支持规模化的微服务交付场景。

● 要理解微服务之间的复杂交互,需要优秀的诊断与监控工具,

而软件系统诊断与监控不仅仅是运维人员的职责,开发人员也需要深入参与到软件的交付和后期的系统运维和运营中,提升微服务之间交互的可观测性。

软件团队DevOps转型需要从下面几个方面展开,这其中不仅包含技术的转型,也包含组织、流程等关键要素的转型。

● 技能方面:团队需要不断引入优秀的技术和好的设计来增强敏捷能力;保持良好的软件架构风格;集成工具链,搭建自动化软件集成、交付、发布平台。

● 组织与流程方面:DevOps需要组建一个自治的团队,使团队向全栈开发方向成长。另外需要融合不同的职能人员,比如开发人员和运维人员工作在同一个部门,向同一个领导汇报。

要求开发人员和业务人员在整个项目开发期间必须天天在一起工作。需要建立激励体制和反省体制,团队每隔一定的时间在如何才能更有效地工作方面进行反省,然后对自己的行为进行调整。开发人员需要遵守相应的原则来保证进度。软件进度的唯一标准就是“能使用的软件”,优先要做的事是通过持续地交付有价值的软件来使客户满意。为了达到这个目的,在开发过程中要最小化可执行产品,持续集成/持续交付、持续部署(CI/CD),测试驱动开发(TDD)。交付的时间间隔越短越好,使用户经常看到软件效果。其中测试驱动开发可以优化代码设计,提高代码的可测试性,建立和代码同步增长的自动化测试用例,根据迭代积累的经验和需求变化情况对计划进行不断的调整和细化。

● 文化建设方面:实行激励机制,通过建立激励制度,强化和奖励那些引导组织朝着目标前进的行为。举行每日站立会议,进行高效的会议、记录问题并跟踪问题的解决过程;进行可视化管理,可视化管理可以让所有团队成员直观地获得当前项目的进度信息,及时暴露问题;保证团队理解一致并且适应变化,团队需要一定的敏捷理念,认清客户是逐步发现真正的需求的。总之,DevOps贯穿软件工程的整个生命周期,DevOps不只包含CI/CD方法论,除了技术和流程,它还包含企业管理文化。

自动化管理工具

在DevOps实践中,自动化管理工具的使用是非常重要的,下面让我们看看一些常用的代表性工具。

● IT基础设施自动化

云服务:使用公有云(如阿里云、AWS等)服务,不需要买硬件服务器、租用机柜。私有云服务可以基于Kubernetes进行扩展构建。

● 代码管理

Git:存储代码,管理代码的版本。

● 配置管理

Chef:它是一个非常有用的DevOps工具,用于管理配置文件。使用此工具,DevOps团队可以避免跨10000台服务器进行配置文件的更改,相反,只需要在一个地方进行更改,然后自动反映在其他服务器上。

● 自动部署

Jenkins:这个工具可以实行自动部署,有助于持续集成和测试。

● 交付镜像

Docker:不仅可以交付软件代码,还能将代码依赖的工程运行环境一同打包进行交付。

● 日志管理

ELK:这个工具可以收集、存储和分析所有日志。

● 性能管理

App Dynamic:提供实时性能监控功能。此工具收集的数据有助于开发人员在出现问题时进行调试。

● 监控Nagios:当基础设施和相关服务宕机时,确保人们得到通知很重要,Nagios就是这样一个工具,它可以帮助DevOps团队发现和纠正问题。

小结

软件世界没有“银弹”,不存在理想的软件模型提供全面的解决方案。每一个公司或者企业都需要结合自身的情况和场景来选择是否采用微服务架构。如果你正在基于微服务架构构建或者改造你的系统,那么请注意你使用的技术理念和软件方法论与微服务架构是否存在冲突。总之,在软件工程中,除了技术因素,组织结构、研发流程等都会对微服务架构能否成功落地产生重要影响。

全部评论

相关推荐

评论
1
收藏
分享
牛客网
牛客企业服务