基于Spring Cloud架构的“分布式微服务”课程开发研究

2020-09-15 16:30杨骁卢涤非
计算机时代 2020年8期
关键词:软件开发项目化教学

杨骁 卢涤非

摘要:根据互联网行业发展和企业岗位需求,分析微服务人才必备的知识结构,以及技能和素质要求,提出“分布式微服务”课程的主要内容为Spring Cloud架构及其技术。基于Spring Cloud开发框架,以企业级的电商后台项目为载体,引入真实的企业软件开发流程,实施企业项目化教学,培养学生未来工作所需的能力及素质。

关键词:分布式微服务;Spring Cloud;企业级电商后台;软件开发;项目化教学

中图分类号:G642.0 文献标识码:A 文章编号:1006-8228(2020)08-91-04

0 引言

随着互联网业务规模的迅速发展,软件服务和系统的复杂度也快速增长。由于传统的单体架构无法满足快速迭代、持续交付、系统扩展性等需求,因此需要将原来的系统拆分为独立的服务单元,形成多个微服务。而微服务之间难免会存在依赖关系,这就需要使用分布式技术来解决系统拆分后遇到的问题,因此,企业对分布式微服务人才的需求愈来愈迫切。分布式微服务课程旨在培养计算机网络技术专业学生从事Java Web开发与应用所需的技能。本文结合计算机网络技术专业人才培养目标和Java Web开发工程师资格标准,探讨分布式微服务课程开发路径、内容构建及Spring Cloud在企业级项目教学中的应用。

1 分布式微服务课程的开发思路

1.1 开发路径

课程的开发与设计是教学的重点[1],从工作需要出发是课程开发的起点嘲。根据对计算机网络技术专业毕业生的就业情况分析、市场调查和社会招聘需求分析,确定该课程对应的职业岗位为Java Web后台开发工程师,而这一岗位普遍提出了对分布式微服务技术的要求,其典型工作任务为需求分析、系统方案设计、软件开发、系统调试、系统部署及维护,从而可以归纳出行动领域要求的相应的专业能力、方法能力和社会能力,最后转化为对课程教学内容的选取和学习情境的设计。课程开发思路如图1所示。

1.2 Java Web开发技术栈

专业技术栈是从事专业某个岗位(群)所需要掌握的一系列技能的组合。结合本课程对应的以Java Web为核心的分布式微服务开发工程师的技术需求,可归纳出该职业岗位所需要的专业技术栈(如图2所示)。

技术栈中的Java语言基础、Java Web基础知识、Java Web框架对应的前导课程分别是“Java程序语言设计”、“Java Web开发”和“Java EE企业级应用开发”。而Java分布式微服务技术就是“分布式微服务”这门课程所要培养的技能。

2 分布式微服务课程内容的构建

2.1 课程内容构建的原则

课程内容的构建是课程建设与改革的重点与难点。课程内容的选取要以技术领域和职业岗位(群)的任職要求,参照相关职业资格标准,重视其“针对性”和“适用性”;也要兼顾技术领域的更新和学生的可持续发展,突出其“发展性”。此外,课程内容的组织应以真实工作任务及其工作过程为依据,或以典型项目为依托,以能力为主线,对学习情境(或项目、或主题单元)进行结构化、系统化的设计,课程各模块之间有合理的逻辑结构[3],体现其“逻辑性”。

2.2 Spring Cloud架构及其内容

根据上述课程内容构建的原则要求,通过对主流的分布式微服务框架进行分析,从而将分布式微服务开发框架Spring Cloud及其相关技术明确为微服务课程的主要教学内容。

当系统由单体应用拆分成分布式服务后,单体应用中的各个模块被划分到了各个子系统,各个模块之间的相互调用变成子系统之间的网络交互。Spring Cloud提供了一系列框架来进行分布式服务的构建,如图3所示:分布式注册中心Eureka、负载均衡组件Ribbon、分布式网关Zuul、声明式调用组件Feign和熔断器Hystrix。

3 Spring Cloud在企业级项目化教学中的应用

3.1 企业级电商后台项目

面向企业真实生产环境的项目化教学模式是“引企入教”课程改革思想的生动实践,有利于教学做一体化的实施,有利于提高学生的应用能力和学习积极性。本课程选择电商项目作为载体主要基于两点考虑:首先,学生在生活中经常使用过淘宝、京东等电商平台,是电商产品的用户,在业务理解上相对容易。其次,该电商项目由多个模块组成,且各模块之间有信息交互,具有一定的复杂度和综合性,适合使用分布式微服务技术来构建系统。

电商后台可以拆分为商品中心、订单中心、支付中心、会员中心等子系统。在一个完整的交易链路上,需要各个子系统之间相互交互,因此各个子系统都需要采用Spring Cloud来进行构建。

3.2 企业软件开发真实流程的引入

3.2.1 真实企业级项目引入教学的优势

传统项目式教学的不足在于,学生往往实现的只是具体的某项功能;而在实际工作中,需面对的却是现实生活中的各种需求;从现实需求到具体要实现的功能的转化需要对业务的理解和抽象。引入企业级项目式教学模式,不仅在项目学习内容上模拟企业级的软件产品,而且在软件开发流程上也与真实的企业环境保持一致,让学生可以体验到真实的工作场景,熟悉软件开发流程,掌握各种实际工作所需的实用技术。

3.2.2 软件开发的主要流程及其描述

基于软件开发工作流程,分析岗位对应的工作任务是分布式微服务课程开发的重要技术。这就要求在课程开发者有一定的企业工作经历,熟悉企业真实开发流程,同时能有效地根据工作任务重组课程内容体系,从而有针对性地培养学生完成实际项目所需的各项技能及相应的专业能力、方法能力和社会能力。下面分别从软件开发流程的开发前、开发中和开发后三个阶段进行描述(如图4所示)。

开发前:在这里的企业级项目中,分配给学生的是需求而不是具体要实现的功能。首先引导学生进行需求分析,在准确理解用户和项目需求后,来确定系统需要实现的功能,从而培养学生的业务理解能力和抽象能力。在系统分析时明确当前系统在整理系统中的位置和上下游依赖关系,划分功能边界,培养学生站在项目整体的高度去架构系统的能力;此外,实现一个功能的方案通常有多种,引导学生通过系统分析权衡各种实现方案之间的适用场景和利弊,来选择最优的方案,从而培养学生的思维扩展能力和系统分析能力。在正式开发之前,需要先定义好与上下游系统进行的交互协议,并与对应的负责人进行协议评审,确保协议的合理性和完整性。引导学生进行前后端协议文档的书写,可以培养学生的思维严密性和工程规范意识。开发前的最后一步是数据库设计。由于电商后台是重业务、重逻辑的后台,数据库设计的合理性和扩展性,在一定程度上就决定了系统本身的正确性和扩展性。引导学生进行数据库的设计,可以锻炼学生系统设计的能力。

开发中:在开发过程中,因为学生实现的子系统只是完整系统的一部分,必然需要依赖其他系统才能完成完整的功能,而在真实项目中,各个子系统之间的开发进度往往是并行的,因此需要自己去Mock依賴接口来完成开发中的自测。更进一步,可以引导学生设计完善的单元测试用例,之后进行测试驱动开发,培养其良好的软件开发习惯。在各个子系统开发完成之后,与别的同学进行系统联调,这个阶段往往可以发现一些前面各个阶段考虑不周引起的问题。通过相互协作解决这些问题的过程,可以培养学生的沟通能力、合作能力和处理问题的能力。在系统联调之后,各组之间相互进行测试,列出出现的缺陷( bugs)。让学生站在另一个角度去审视整个系统,培养思维的严密性。通过代码评审来发现代码中存在的编码规范问题、代码结构问题、实现问题等,引导学生进行代码重构,提高代码质量。

开发后:在系统开发后,首先需要进行系统容量评估,确定系统的吞吐量、最大并发量等数据,从而明确系统的性能瓶颈。然后引导学生将服务部署到云服务上。在服务部署后,还需要配置服务相关的监控和告警,以便及时发现线上系统的问题,并能在系统出现问题后,对问题排查和修复。在开发后进行的对系统的容量评估、部署、监控和维护工作可以提高学生实际的工程应用能力、问题解决能力,培养学生的责任意识。

4 结束语

课程是教育供给社会的重要产品,课程建设是高等教育内涵建设的核心[4],工作过程是课程开发与设计的起点,能力培养是课程开发的指向目标,企业要素是课程开发的关键元素[5],真实项目是课程开发的生动素材。基于Spring Cloud架构的“分布式微服务”课程,源于企业真实项目,再现企业真实工作流程与场景,融合相关知识和技能,有效培养了学生的程序思维和应用能力,为后续专业课程的学习和可持续发展打下了坚实基础。由于课程学习质量是课程开发的出发点和落脚点,本课程还需根据“岗证课融通”的原则,逐步完善其多元评价标准。

参考文献(References):

[1]卢涤非.“互联网+”时代的高职实训课程移动学习平台探讨[J].计算机时代,2019.12:79-80,84

[2]姜大源.世界职教课程改革的基本走势及启示[J].前沿,2008.11:4-10

[3]徐国庆.职业教育项目课程开发指南[M].华东师范大学出版社.2009.

[4]刘雪琪.实现内涵发展要发挥专业建设作用[J].中国高等教育,2017. 21: 59-60

[5]覃川.I+X证书制度:促进类型教育内涵发展的重要保障[J].中国高教研究,2020.1:104-108

基金项目:浙江省自然科学基金,浙江省基础公益研究计划项目(LGG19H180001)

作者简介:杨骁(1990-),男,湖北南漳人,硕士研究生,工程师,主要研究方向:分布式技术与大数据。

通讯作者:卢涤非(1972-),男,浙江东阳人,博士研究生,教授,主要研究方向:图形图像技术和教学。

猜你喜欢
软件开发项目化教学
信息安全环境下的计算机软件开发研究
高职《管理学》课程实行项目化教学改革与实践策略
刍议项目化教学法在本科动漫实训课程中的探索与应用
众筹模式引入工业产品设计项目化教学的思考与探索
《UG NX机械产品设计》课程项目化教学的改革研究
核电厂定期试验管理软件开发
FPGA软件开发过程中编码规范的作用