本博客概述了我们将运行在SAP云平台Neo environment(Neo)上的单一应用程序(如企业销售和采购模型(ESPM)和SAP HANA交互式教育(SHINE))迁移到运行在SAP云平台上的基于微服务的应用程序的经验,Cloud Foundry环境(Cloud Foundry)并重点介绍了我们在这一过程中学到的一些经验教训。
有关将单片应用程序重构为微服务的一般概述和建议,看看SAP云平台应用程序适应Cloud Foundry环境指南的最佳实践。
将单片应用程序转换为微服务是应用程序重构的一种形式,其中应用程序功能预计将保持不变,但会带来微服务的优势。
我们的团队进行了重构两个应用程序,每个应用程序使用不同的方法。我将向您展示我们对这些应用程序所做的工作,并分享我们从经验中学到的知识。
ESPM应用程序是一个参考应用程序,大数据存储技术有哪些,演示如何在SAP云平台的Neo环境中构建应用程序并将其部署到Java运行时。
ESPM Monolith架构
迁移策略:公共代码库
到快速地将这个应用程序转换成基于微服务的应用程序,我们选择应用一个通用的代码库方法。我们决定拆分前端和后端代码。这种方法并不新鲜,因为Neo环境已经支持在HTML5容器中独立部署前端,在Java运行时容器中独立部署后端。
这个打包为javawebarchive(war)的应用程序在同一个javaweb项目中有Java后端实现和静态web页。我们的第一步是将其分成两部分:
除了拆分应用程序之外,整个体系结构的两个新的重要部分包括应用程序路由器(AppRouter)组件和用户帐户和身份验证服务(UAA)。
应用程序没有使用任何本机SAP HANA功能,因此我们转向PostgreSQL是一个开源关系数据库,默认情况下在CloudFoundry上可用。因为Java持久性API(JPA)用于持久性,所以从Neo中的SAP HANA转移到Cloud Foundry中的PostgreSQL数据库更容易,因为只有数据库配置和驱动程序发生了变化。
ESPM微服务架构
重构ESPM的步骤
批准者构成了一个单一的切入点基于微服务的体系结构。XS高级编程模型的常见建议是将静态web内容打包到approver本身。这导致AppRouter和web模块作为单个微服务运行,新零售企业应用中心,构成前端。除了路由,您还必须配置approver将身份验证和授权委托给UAA,这样单个微服务就不必处理这方面的问题-应用程序.json文件包含从web模块到java后端的请求的路由信息。审批者使用此文件向后端发送请求、验证用户等。
Neo环境使用Java命名和目录接口(JNDI)绑定,而Cloud Foundry使用服务绑定;因此必须相应地调整代码。各种开源库,如Spring Cloud Connectors可以提供帮助。
使用SAP Java buildpack或Spring security库提供的集成容器身份验证。
应用程序清单告诉Cloud Foundry要创建多少实例,以及要为应用程序提供的服务分配多少内存应使用。
迁移的ESPM应用程序可在Github中找到
学习
将简单应用程序从Neo迁移到Cloud Foundry需要最少的步骤。我们无法迁移完整的应用程序,因为在CloudFoundry环境中缺少诸如文档服务之类的服务。我们使用运行在Neo上的代理应用程序在Cloud Foundry中使用Neo提供的文档服务。
SAP HANA Interactive Education(即SHINE)是一个演示应用程序,可以轻松了解如何在SAP HANA extended application Services的高级模型上构建应用程序。SHINE的第一个版本于2012年首次随SAP HANA 1.0 SPS05提供,是一个使用XS JavaScript开发的单片应用程序。当高级模型可用时,原始应用程序被重构以在其上运行,Cloud Foundry
迁移策略:重构到微服务
我们选择这种方法是因为我们希望重用XS JavaScript代码的一部分,并且可以自由地为每个微服务选择最合适的编程语言。我们以迭代的方式迁移应用程序:经过四次迭代,才与原来的单片SHINE应用程序达到功能对等。
重构SHINE的步骤
我们将模块拆分,以便将类似的业务功能组合在一起,大数据分析应用,并为每个微服务选择最合适的编程语言。例如,我们实现了数据生成器模块,用于生成事务数据(采购订单和销售订单),网云服务器,在节点.js利用编程语言的异步特性。
现有的数据库设计时工件大部分被重用,只做了一些小改动,需要从所有工件中删除模式引用。
SHINE Monolith体系结构
SHINE Microservices体系结构
迁移的SHINE应用程序可以在Github
学习
从monolith迁移到microservices的迭代方法提供了获得经验和改进的机会。代码重用是有机会的。