Skip to content

Latest commit

 

History

History
546 lines (307 loc) · 37.2 KB

File metadata and controls

546 lines (307 loc) · 37.2 KB

一、SAP HANA XSA 架构

欢迎学习如何使用 Node JS 在 SAP HANA XSA 构建微服务。在这一章中,我将解释 SAP HANA 架构、从 HANA 1 到 HANA XSA 的演进、云铸造(CF)架构,以及开源如何在 HANA XSA 的微服务开发中发挥非常重要的作用。

SAP HANA 公司

企业拥有 ERP(企业资源规划)系统,在该系统中,它们自主地或通过利用在这些公司工作的员工来运行业务流程。诸如 SAP 之类的 ERP 系统已经提供了成熟的技术,这些技术在数据处理中利用系统应用和产品(SAP)来分析、计划和生产商品和服务。这些商品和服务扩展到各个行业,有时甚至遍布全球。

SAP HANA(图)是一个内存平台,包含一个数据库、一个 web 服务器和其他引擎,构成了一个高可用性、高性能的分析引擎。SAP HANA 作为数据库本质上主要面向列,其内存中功能将 OLAP 和 OLTP 结合在同一个系统中。本书将展示的这些和其他特性使这个系统在全世界的企业中非常受欢迎。众所周知,OLAP 用于传统数据库管理系统中的大量数据。OLTP 用于利用大量短期事务的数据仓库。SAP HANA 具备这两种能力。

img/498901_1_En_1_Fig1_HTML.jpg

图 1-1

显示 HANA 数据库和 XS 引擎的 SAP HANA 环境

了解 ERP 系统并拥有 SAP HANA 等内存平台已变得至关重要,因为业务流程需要根据需求和新趋势做出近乎实时的决策。业务场景,如涉及制造、规划、调度、零售、能源和工业生产等,需要这些能力来创新和重新想象其在日常运营中的可能性。您能想象一家企业的所有数据和流程可以完全集成,而不必在一个系统中进行一些业务操作,在另一个系统中进行其他操作吗?这种流程效率低下,许多冗余的数据副本会给整个环境带来混乱。

截至目前,SAP HANA 已经具备了这些能力。SAP HANA 可以充当数据库。在同一个系统中,有各种方法将数据集合在一起,以创建业务数据模型。集成来自企业其他部分的数据的许多方法之一被称为 SLT (SAP 环境和转型)。

SLT 是一种从 SAP ECC 到 SAP HANA 架构的 ETL(提取、转换、加载)、基于触发器的复制技术。如图 1-2 所示,SLT 还可以集成到其他数据库系统中,如微软 SQL Server、Oracle 和 SAP HANA。可以从 SAP GUI 配置 SLT,或者在 SAP HANA Studio 中建立系统连接后,开发人员可以使用 SAP HANA Studio 中快速查看菜单中的数据配置链接设置表的复制(完全、部分、停止、恢复或暂停)。

为什么这项技术很重要?因为我们将不再需要单独查询外部数据源来分析它们,然后聚合它们。一旦外部数据源表发生变化,它们的触发器会自动将最新的变化复制到 SAP HANA 中,然后可以在 SAP HANA 中创建其他业务数据模型,以便提供对逻辑上分离的系统的全面了解。查看 SAP 的 SLT 官方文档,更深入地了解这项技术( www.sap.com/products/landscape-replication-server.html )。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig2_HTML.png

图 1-2

从外部数据源到 SAP HANA 的数据集成

将数据模型集成到 SAP HANA、ECC 和外部数据库系统的另一种方法是通过智能数据集成,也称为 SDI。SDI 是一种连接到外部系统并使用自定义适配器批量或实时制作这些系统(微软 SQL Server 和 Oracle 等)上的数据结构的虚拟副本的技术,如图 1-3 所示。SDI 可以从 SAP HANA Studio 中设置,开发人员可以在其中提供虚拟表,并最终使用这些虚拟表创建集成的业务数据模型。在 SAP HANA XSA 中,SDI 可以通过数据库浏览器进行配置。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig3_HTML.png

图 1-3

虚拟化数据源

SDI 中的另一个可用特性是开发人员可以在 SAP Web IDE 中创建流程图(图 1-4 )作为工作流。这些任务有助于创建复制数据或执行其他任务,而无需编写实际代码,只需使用拖放功能来绘制从源到目标的数据流。在某些情况下,可以通过在这些工作流中使用聚合、连接、联合或透视 Node 操作符来实现额外的 ETL。一旦工作流被创建,那么它就成为一个可以被调度的任务,如图 1-5 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig5_HTML.jpg

图 1-5

SDI 流程图 Node

img/498901_1_En_1_Chapter/498901_1_En_1_Fig4_HTML.jpg

图 1-4

SDI 流程图操作

要运行此任务,请使用以下语法从 SQL 控制台查询它:

开始任务<task_name>,如图 1-6 所示。</task_name>

img/498901_1_En_1_Chapter/498901_1_En_1_Fig6_HTML.jpg

图 1-6

从 SQL 控制台启动任务

要计划此工作流,请通过创建 XS 作业(。xsjob)并配置其作业细节,如频率、间隔、执行时间、要运行的对象以及要传递给流图的任何参数。

当我们从 SAP HANA 的数据库端过渡到 web 应用前端时,SAP HANA 提供了一个名为扩展应用服务的 web 服务器,称为 XS 引擎,它允许 SAP HANA 平台通过 HTTP(s)公开和接收数据、发送电子邮件、执行类似历史记录的作业,以及进行出站外部 web 请求调用,例如调用第三方 API(应用编程接口)。XS 引擎是一个相对较小的应用服务器、web 服务器和开发环境。在 SAP HANA 1.x 和 HANA 2.x 中,XS 引擎也有自己的服务器端 JavaScript 语言,称为 XS JavaScript (XSJS)。XSJS 由 SAP 创建,用于提供对数据的 HTTP 访问并与 SAP HANA 数据库进行交互。XSJS 语言是在 SpiderMonkey Firefox 引擎之上创建的。这种语言有几个内部 API,如表 1-1 中所列。

表 1-1

sap hana xsjs apis

|

描述

|

$ API

|

用于

| | --- | --- | --- | | 数据库ˌ资料库 | $.组屋 | 从 XSJS 集成到 HANA 数据库 | | 遗留数据库 | $. | 集成到 HANA 数据库(已弃用) | | HTTP 出站 | $.网 | 拨打外部电话(XS 引擎外部) | | 请求(传入) | $.请求 | 分析对 XS 引擎的请求 | | 作业调度 | $.工作 | 创造和维持 XS 的就业机会 | | 安全 | $.安全 | 使用防病毒软件检查数据,并存储安全数据 | | 微量 | $.微量 | 执行 XS 代码时设置日志跟踪 | | 文本 | $.文本 | 文本分析和文本挖掘*需要额外的许可 | | 跑龙套 | $.跑龙套 | Zip 和 xml 解析 |

虽然这些 XS API 仍在 XS 兼容模式下的 HANA 2 上工作,但还有另一种方式可以在 SAP HANA XS 高级版中与 SAP HANA 数据库进行交互。在第 4 章中,将会有使用 Node JS 实现和@sap Node 模块的等效方法。

XS 引擎受到企业的欢迎,因为它允许 SAP HANA 中的近实时内存流程,并允许公司以一种更简单的行业标准方式(称为 REST APIs)与其 ERP 数据进行交互。REST 代表具象状态转移,通俗地说就是系统的状态来源于数据,而不是会话状态。对于无状态的互联网也是如此。API 允许系统的外部消费者通过互联网协议与它交互,而不必提供对后端系统的直接访问。API 的消费者需要知道后端 API URL、发送给 API 的数据结构以及他们将收到的响应(如果有的话)。一些希望最小化技术栈足迹的公司开始远离像微软这样的外部技术。NET 或 Java,并创建了 XS 应用,而其他人仍然使用这些外部技术来消费来自 XS 引擎的 SAP HANA 后端服务。

在 SAP HANA 中创建 XS 应用的另一个好处是,应用可以像后端的数据库一样简单,也可以包含一个 web 服务(REST API),甚至是前端的 HTML5 modern 应用,如图 1-7 所示;否则,在全栈场景中,它可以包含所有这些组件,作为解耦的微服务应用。REST APIs 充当服务消费者的黑匣子——消费者不应该关心后端运行的是什么流程。出于他们自己的考虑,他们只需要知道 URL、合同,以及服务是否会返回响应,这样他们就可以处理它。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig7_HTML.jpg

图 1-7

通过 XS 引擎的 SAP HANA API 请求

云代工厂(CF)

Cloud Foundry(图 1-8 )是一个开源的云应用平台。Cloud Foundry 由一组公司组成,如 IBM、SAP、微软、谷歌和其他公司,他们共同建立行业标准,允许应用在云提供商之间运行,以便开发人员可以专注于应用开发,而不是创建云。创建 Cloud Foundry 就绪的应用的好处之一是,这些应用基本上与基础架构分离,因此当它们准备好迁移到内部、公共或其他私有云时,这些应用可以轻松地从一个环境/云迁移到另一个环境/云。在进入应用之前,看一下 Cloud Foundry 的分层组织和一些我们将与之交互的重要概念是合适的:组织、空间、应用、服务和角色,如图 1-8 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig8_HTML.png

图 1-8

云铸造组织层级

  1. 一个组织 (org)被定义为一个开发帐户,其中一个或多个开发人员(称为贡献者)具有称为用户帐户的访问权限。这些贡献者被分配了特殊的角色,以便管理、审计和构建云就绪应用或向其他人授予访问权限。出于演示目的,本书中提供的示例将已经创建了一个组织,并且该组织处于活动状态。只有管理员可以更改此组织的状态;但是,我们将假设它在我们的其余练习中处于活动状态。

  2. 跟随一个组织,有一个或多个空间。一个空间被定义为组织内的一个分区,专门用于构建、部署和维护应用。每个应用的作用域都是一个空间。拥有一个应用最终需要授予访问该应用的角色。应用角色属于且仅属于一个空间。稍后,在微服务 REST API 部分,需要将我们的应用设置为分配到一个空间。

  3. 应用和服务是 CF 层次结构中的下一层。这些应用和服务允许用户查看一些数据或消费数据。

  4. 用户可能被分配了一个或多个角色(角色集合是模板)。这些角色允许用户开发、访问、管理或审计应用、空间甚至组织。应用安全性是软件系统中非常复杂的一部分。云中(以及 SAP XSA)的安全性本身就是一个广泛的话题。目前还有其他几本书详细介绍了 SAP HANA XSA 安全性。对于本书来说,在 SAP HANA XSA 环境中访问一个表和一个视图并执行一些存储过程将有足够的安全性。

与基础架构无关的应用本质上更加动态,可以在几分钟内轻松部署,而无需对应用进行更改。这种类型的架构被称为基于容器的架构。CF 是基于容器的,它允许应用在任何编程语言(BYOL——自带语言)和选择的框架中开发和运行。

如前所述,Cloud Foundry 将应用从基础设施中分离出来。此外,Cloud Foundry 资源(应用/服务)可通过一个名为 UAA(用户帐户和认证服务)的路由和授权服务进行访问,如图 1-9 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig9_HTML.jpg

图 1-9

遵循 CF 路由和 UAA 服务的 REST API

UAA 服务的主要作用是以 OAuth 令牌的形式向经过身份验证的请求颁发用于授权的客户端令牌。这些 OAuth 令牌以 JSON 的形式出现,生成时有一个有限的生命周期。一旦令牌过期,必须发送另一个获取令牌的请求并进行身份验证,UAA 服务需要为后续请求生成新的令牌。本书稍后将演示类似的步骤,展示在 SAP HANA XSA 微服务 REST API 上发出请求的流程。请记住,CF 概念对于理解 SAP HANA XS 高级架构的实施非常重要——有关“SAP HANA 到 HANA XSA”部分的更多详细信息。

通过 UAA(图 1-10 )的客户端到后端资源端点的步骤如下:

img/498901_1_En_1_Chapter/498901_1_En_1_Fig10_HTML.jpg

图 1-10

CF 客户端请求到端点的步骤

  1. 请求者在我们的(云)环境中请求一些 URI。

  2. 路由发现并识别该请求,然后重定向到 UAA 服务进行身份验证。

  3. UAA 接收该请求

    1. 验证并返回 OAuth 令牌

    2. 拒绝并返回未授权

  4. 请求者必须将所需的请求与 UAA 令牌一起发送,以便后端资源能够识别请求的真实性。有时这被称为不记名令牌。

  5. 如果令牌有效,后端资源向请求者返回响应;否则,它将返回一个未经授权的错误。

有不同的方式与 Cloud Foundry 实例进行交互。其中之一是通过命令行界面(cf CLI)。CLI 可以与 Linux 命令结合使用,如 pipe、grep 等。我们必须使用各种命令与云/XSA 架构进行交互,例如登录、设置服务、创建、编辑、构建、部署甚至扩展应用或服务。Cloud Foundry CLI 是一个多功能工具,允许开发人员与其云实例进行交互。自动化和编写其他需要人工输入命令的过程是很容易的。它最大限度地降低了在与云交互时引入错误的风险,并让需要了解云容器细节的开发人员和管理员可以使用它。

此类命令的示例有

  • cf 登录 <用户名> #登录云实例

  • cfapps| grep#从应用列表中检索应用

  • cf 推送 < APP_NAME > #将应用推送到 cf 实例

  • cfscale-m-I<实例>

这里显示了可用命令的完整列表: http://cli.cloudfoundry.org/en-US/cf/

否则,一旦在系统上安装了 Cloud Foundry CLI,就可以运行命令 cf - help 来查看如何使用命令以及它有哪些标志,如图 1-11 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig11_HTML.jpg

图 1-11

cf 命令行界面(cf CLI)

随着这种动态环境的出现,需要利用额外的开源软件。许多公司正在慢慢采用开发和重用开源软件的概念,以从其他贡献者的开发中受益,并避免必须重新创建可重复的软件解决方案。目前存在几个开源软件包管理器,它们在开发人员社区中非常流行;其中之一是 Node 包管理器(npm)。

在进入 npm 之前,理解 Node JS 是很重要的。Node JS 是一种异步、动态、非阻塞、事件驱动、服务器端的 JavaScript 语言,建立在 Google Chrome 的 V8 JavaScript 引擎之上。与传统的 JavaScript 不同,它不需要浏览器来运行。如果 Node JS 运行时存在于这样的计算机中,它可以作为自治程序在这样的计算机上运行。除了运行时之外,开发人员可能需要利用额外的包/模块来开发健壮的程序,如 REST APIs。这些其他的包/模块是如何进入我们的开发的?这就是软件包管理器派上用场的地方——假设开发者在机器上有特权,能够下载软件包管理器,并且能够运行和安装额外的软件包。创建 Node 程序时,有一些文件需要重点强调:

  1. 主 Node JS 文件——姑且称之为 index.js。

  2. package . JSON——这个文件包含关于 Node 应用的元数据,如运行时、来自其他模块的依赖项,以及一些有助于运行、测试和部署我们的 Node 应用的脚本命令。这个文件在调用包管理器时使用,以便尝试下载特定的依赖项和那些依赖项的版本并将其集成到我们的应用中。

一个从文本编辑器运行的简单的“Hello World”程序如图 1-12 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig12_HTML.jpg

图 1-12

Node JS 简单的“Hello World”

而在浏览器上运行时(由于使用 HTTP Node 模块创建了一个服务器来服务响应),如图 1-13 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig13_HTML.jpg

图 1-13

浏览器中 Hello World 的输出

想象文本可以被服务,按照逻辑下一个用例将是能够作为 web 应用服务 HTML,甚至创建一个 REST API 后端服务来服务和接收请求;这将在后面的章节中说明。

Node 包管理器(npm)是一个开源软件包/模块的在线存储库。npm 对开发公共软件的开发者是免费的(查看 NPM 定价部分了解私人开发许可费用)。开发者可以利用这些 Node 模块来构建和扩展他们的应用。当导航 Node 包管理器、 www.npmjs.com/ 时,可以找到细节,例如版本、(其他模块的)依赖性、下载历史、下载次数、许可证、储存库 URL、合作者、作者信息,以及开源模块的其他重要细节。其中一些模块足够广泛,可以成为框架本身。一个流行的模块/框架叫做 Express。Express 是构建 REST APIs 的一个非常强大的极简框架。Express 框架具有强大的功能,包括健壮的路由、快速的性能、超高的测试覆盖率和内容协商,它还具有快速生成应用的功能。对于任何类型的工作、流程或任务都有免费的模块,例如,用于验证请求的 Passport 模块、Socket。用于基于事件的实时双向通信的 IO 和 PDF 生成器,仅举几个例子。其中一些模块将在本书的后面部分用于构建 Node JS 微服务,包括路由、认证和请求/响应处理。

什么是微服务?微服务是一种分散式架构,在这种架构中,前端、后端和数据库应用等程序可以独立于环境中的其他程序工作、扩展(增长/收缩)、构建、部署、启动和停止。微服务架构是构建可扩展的、云就绪的、健壮的解决方案的现代方法,这些解决方案是松散耦合的、可独立部署的,主要围绕业务功能进行组织,由一个小团队拥有,如图 1-14 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig14_HTML.png

图 1-14

微服务

开放源码

对于开发团队来说,开源软件已经变得非常重要,它可以将未知的完成特定任务的方法与一些通过包管理器(如 Node 包管理器)开发和共享的软件快速集成。

就像其他事情一样,使用开源软件有好处也有坏处。表 1-2 显示了使用开源软件的一些好处和缺点。

表 1-2

使用开源软件的好处和缺点

|

利益

|

缺点

| | --- | --- | | 有许多免费使用的开源库 | 大多数来自不知名的开源贡献者出版商 | | 这些库通常有易于理解和遵循的代码示例和计划文档 | 理解许可证细节可能需要时间 | | 几乎不需要时间(通常几分钟)就能融入 | 开发人员必须跟上库的版本和更新 | | 软件包管理器显示最新版本和下载次数,这表明了模块的受欢迎程度 | 软件按原样使用,没有担保 | | 加快开发成本,因为开发人员不需要重新发明通用流程 | 有经验的开发人员通常理解集成的过程;然而,缺乏经验的开发人员需要一些关于如何使用这类软件的解释 | | 需要开发一些常见场景的公司的成本节约 | 易受恶意用户攻击 | | 比商业解决方案便宜 | 缺乏广泛的支持(使用风险自担) |

除了优点和缺点之外,还有一些公司规则可能禁止在某些许可下使用某些开源软件。通常较大的企业有适当的程序,要求他们的法律部门评估使用开源软件的需要,当这种软件不是从他们的资源内部开发的时候。如果您的企业受到这些限制或保护,请咨询您的软件架构师或法律部门,了解您希望利用什么要求和开源库,以便了解您的公司能够利用这些开源软件的可能性。

一些最常见的开源许可证是(请阅读您想要使用的任何开源软件的相应许可证)

  1. 阿帕奇许可证

  2. 带许可证

  3. 通用公共许可证

  4. Mozilla 公共许可证

  5. Eclipse 公共许可证

SAP HANA 至 HANA XSA

许多公司都是 SAP 的现有客户,并利用 SAP HANA。这些公司是学习如何从 SAP HANA classic 迁移到 SAP HANA XSA(蓝绿色现场部署)的主要受众。蓝绿部署是一种通过运行两个相同的生产系统来减少停机时间的技术,其中一个是活动系统(蓝色),另一个是空闲系统(绿色),在空闲系统上部署并执行完整测试,然后将流量从活动系统(蓝色)切换到空闲系统(绿色),并在新的空闲系统(蓝色)上执行相同的部署和完整测试。那些没有进行升级的公司将能够轻松地从 SAP HANA XSA 开始他们的旅程,因为他们不需要担心现有的开发要兼容新的环境(全新的绿色领域)。根据升级路径的状态,建议制定良好的计划,以最大限度地减少停机时间,甚至消除停机时间。在后面的章节中,我们将探讨实施绿色领域部署方法的模拟,因为 HANA 1 不支持 Node JS 运行时*(作为 XS 经典环境)。

完成这一新的实施练习的第一步也是最重要的一步是能够理解云铸造原则。让我们花点时间来提一下 Cloud Foundry 的几个重要概念,以及它们如何应用于 SAP HANA XSA。这些概念是理解 web 应用、微服务和 REST APIs 的架构、安全性和集成的基础。

从层级的角度来看,正如《Cloud Foundry》中所描述的,XSA 从一个组织开始。在 SAP XSA,组织也是由管理员管理的一组空间。空间是零个或多个应用和/或服务(管理的或用户提供的)的持有者。托管服务是由环境提供的服务。SAP 中这类服务的一个例子是 XS UAA(用户账户和认证服务)。用户提供的服务是由开发者创建的定制服务(CUPS ),这种类型的服务通常不是由市场提供的。应用是用于特定目的的一组一个或多个模块,例如 HTML5 应用或 Node JS REST API。应用由包含具有特定访问权限(也称为范围)的角色的用户访问。

既然已经解释了 Cloud Foundry 的分层结构,并且相同的结构适用于 SAP HANA XSA,那么开始规划将在本书中演示的练习就很重要了。

在演示之前,必须强调 SAP HANA 和 SAP HANA XSA 两种架构之间的差异。对象将受到以下一种或多种方式的影响:

  1. 不受影响(无变化)

  2. 被更改(升级或更新)

  3. 不推荐使用(以后将不再适用)

  4. 以前不存在的新对象

出于演示目的,请参见下面一个非常相似的项目,因为它存在于 SAP HANA 1 中,现在需要重新创建(或针对 SAP HANA XSA 进行更新)。

假设这个项目有一个多模块项目,包含一组数据库工件,比如一组表、HANA 视图和存储过程等等。这些数据库构件将彼此协同工作,并与 XS JavaScript REST API 服务层协同工作,以读取、创建、更新和删除 SAP HANA 系统中的数据,如表 1-3 所示。这些后端服务将从前端 HTML5 应用中消费,如表 1-4 所示。

表 1-4

XS SAP 1 和 XSA SAP 2 之间的 XS 工件差异

|

组件

|

HANA 1 神器

|

HANA 2 XSA 人工因素

| | --- | --- | --- | | 旧项目文件 | xsapp | 在 XSA 并不存在 | | 结节(向后兼容) | 不适用的 | xs-app . JSON–包含安全认证类型、路由、欢迎文件的新工件。如果需要创建 REST API,则必须创建 HTML5 模块,并且它应该包含路由。API 将使用部署 HTML5 模块的 URL Node 模块的相对路径** | | xsjs(维基百科) | 在 XSJS 向后兼容模式下没有变化 | | xsjslib | | xshttpdest | | xsjob | 无变化 | | 不适用的 | (Node)。js 文件和 npm 模块(公共或@sap) | | HTML5 | 视图(xml/js) | 无变化 | | 控制器(js) | 无变化 | | index.html | 无变化 | | MTA 项目 | 不适用的 | xs-security . JSON–描述应用范围的新工件。在必须强制应用范围的情况下,它是一个可选文件 | |   | 不适用的 | MTA . YAML–包含项目 UAA 服务的模块关系和元数据的新工件 |

表 1-3

SAP HANA 1 和 HANA 2 XSA 版之间的数据库工件差异

|

组件

|

HANA 1 神器

|

HANA 2 XSA 人工因素

| | --- | --- | --- | | 数据库ˌ资料库 | 计划 | 无更改-从 SQL 控制台创建 | | 模式表 | 需要同义词 | | 虚拟表 | 需要同义词(类似于跨模式对象访问) | | 计算视图 | 无变化 | | 存储过程 | 无变化 | | 表列函数 | 无变化 | | 作用 | 无变化 | | 脚本计算视图 | 必须转换为表函数或存储过程* | | 分析/属性视图 | 必须转换为计算视图 | | 不适用的 | hdb grants–从 SQL 控制台创建的新工件 | | 不适用的 | 角色集合–新工件(角色组) | | 不适用的 | HDI-config–HDI 容器的元数据 | | 不适用的 | HDI-名称空间–数据库模块的元数据 |

表函数和存储过程的区别在于,表函数不能执行 CUD (create,update,delete)语句,它们必须返回一个表结构作为输出。然而,存储过程在执行后不需要返回任何类型的输出参数。存储过程是这些类型的操作(创建、更新、删除)的唯一方法。

从代码进入下一层,人们必须考虑应用生命周期管理器。这段代码将被存储、检索和部署到哪里?在 SAP HANA 1 环境中,有 SAP HANA 存储库。这种方法的缺点之一是多个开发人员不能同时处理同一组文件/变更。在 SAP HANA XS 高级架构中,SAP HANA 存储库不再存在;相反,SAP 消除了拥有自己的存储库解决方案的想法,并建议公司将他们的代码存储在外部代码存储库中,如 GIT (Bitbucket 或微软 TFS)。这种方法有许多巨大的好处,例如 DevOps 简介,允许多个开发人员致力于代码功能和 bug 修复,最重要的是,SAP HANA 中 CI(持续集成)的开始。

为简单起见,本书假设每个练习者都可以使用自己的许可证连接、提交和克隆 GIT 存储库——本书将展示使用免费许可证的帐户。

为了使用 GIT,开发人员必须能够访问这个库,熟悉表 1-5 中显示的 GIT 命令,并且要么从命令行执行(如果您使用这种方法,您将需要下载 GIT CLI)要么从 SAP Web IDE 与它们交互,该 IDE 已经有一个到 GIT 库的接口,如图 1-15 所示。GIT 命令是现代软件开发和维护的基础。需要了解这些命令的工作方式以及何时使用它们。还有更多的命令可用,但这里没有全部显示出来。表 1-5 显示了最常用的列表(未按顺序排列)。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig15_HTML.jpg

图 1-15

SAP Web IDE 中的 Git 窗格

表 1-5

Git 命令

|

命令

|

描述

|

例子

| | --- | --- | --- | | 克隆 | 将外部存储库克隆到本地工作区 | git clone | | 犯罪 | 将本地工作区的变更提交到远程存储库 | 去委员会-m | | 隐藏物 | 保存不想立即提交的更改 | git stash | | 推 | 将您的更改推送到远程(主)分支 | 去推t1 | | 拉 | 从远程分支提取更改 | git 拉〔t0〕〔t1〕 | | 重定…的基准 | 将一系列提交移动或组合到新的基本提交的过程。重定基础的主要目的是维护项目历史 | 吉特狐狸 |

关于外部存储库(如 Git)的最后一点需要理解的是,能够理解 GIT、GitHub 和 GitLab 之间的区别,这可能会给开发人员带来一些困惑,并且经常被错误地解释。Git、GitHub、GitLab 有什么区别?GitLab 和 GitHub 都是基于 web 的 Git 仓库。Git 是在软件开发生命周期中管理开发项目和文件的机制,并将这些更改存储在称为存储库的存储中。类似 git 的存储库不仅仅是一个存储库,它还是 CI/CD(持续集成和持续交付)的开端,因为它通过创建一个流程,经由这些命令自动构建软件。

对于这种类型的存储库和软件生命周期管理的新开发人员,一个巨大的建议是在开始项目之前阅读关于如何使用它们和理解过程的最佳实践。这将真正改变整个过程。一些建议是

  1. 在提交之前测试你的软件——避免引入错误。

  2. 经常提交–小的和相关的提交允许更容易的代码共享。

  3. 编写详细的提交消息——帮助他人理解您提交的代码。

  4. 使用分支–将 bug 修复和新特性与主分支(黄金副本)区分开来。

  5. 不要惊慌——当你开始时事情可能会出错,但请阅读如何解决你的问题。

还有许多其他的最佳实践将在后面展示,但是在开始开发之前记住这些将有助于开发人员长期维护更好的软件。

如果以前没有使用过 GitHub 等外部代码库,请从一个示例项目开始。创建它,向项目中添加一些文件,提交,添加有用的消息,并尝试创建一个分支并将其合并回主线。开发人员在真正的项目之前准备得越充分,他们和他们的团队在真正的项目中就会做得越好。

下面是创建首次示例项目的一些步骤。请注意,这不是 REST API 练习中的同一个项目,它只是出于说明的目的——假设已经创建了一个 GitHub 帐户并可供使用,如图 1-16 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig16_HTML.jpg

图 1-16

GitHub 帐户

  1. 导航到 存储库 选项卡,点击新建

img/498901_1_En_1_Chapter/498901_1_En_1_Fig17_HTML.jpg

图 1-17

创建 GIT 存储库

  1. 如图 1-17 所示,提供名称和描述等回购详细信息,选择私有或公共,并选择要包含在该项目存储库中的任何许可证。点击创建存储库

img/498901_1_En_1_Chapter/498901_1_En_1_Fig18_HTML.jpg

图 1-18

GIT 存储库示例

  1. 一旦创建完成,将会出现如图 1-18 所示的屏幕。请务必注意屏幕上显示的内容。花点时间浏览不同的选项卡,查看您的代码、问题、拉取请求和所有选项卡。这个屏幕上有很多相关信息,这些信息可以决定发展的成败。在继续之前,在这里投入足够的时间是非常重要的。更多文件可在 https://help.github.com/en/github/getting-started-with-github/create-a-repo 上找到。注意,这个屏幕还允许开发人员克隆或下载一个存储库。克隆或下载按钮将提供一个 URI,可用于从不同的工具设置外部回购,例如 SAP Web ide 或开发人员选择的任何其他支持 git 集成的 IDE,例如 Visual Studio 代码,如图 1-18 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig19_HTML.jpg

图 1-19

克隆 GIT repo

  1. 使用来自可视代码的早期 Node JS 文件,将该项目设置为 SMP_PROJ 存储库,如图 1-19 所示。复制网址。

从可视代码中,使用 git 命令 git remote add 设置远程存储库(图 1-20 )。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig20_HTML.jpg

图 1-20

从 VS 代码添加远程 repo

运行 git remote add 命令后,验证远程存储库(图 1-21 )。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig21_HTML.jpg

图 1-21

正在验证 git repo 版本

继续将初始文件集 index.js 和 package.json 提交到映射的 GitHub 存储库中。此时使用 Visual Code IDE(或另一个首选 IDE)提供描述更改的消息,而不是使用 git 命令行。请注意下一个图像的右上角,以查看提交消息,其中列出了待提交的更改——确保在提交更改之前, 始终会准备好;否则,可视代码会提示预先暂存它们,然后提交(点击终端菜单下的复选图标),如图 1-22 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig22_HTML.jpg

图 1-22

来自 VS 代码的代码提交注释

如果提交成功,应该会有一条消息,并且在该操作之后不应该有任何挂起的更改(图 1-23 )。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig23_HTML.jpg

图 1-23

VS 提交后的代码

此时,变更已经被暂存并提交(它们被放在一个占位符中)。下一步是将这些更改推送到远程存储库。选择源代码控制:GIT 部分上的三个点,并选择按钮按钮,以选择所需的远程库,如图 1-24 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig24_HTML.jpg

图 1-24

VS 代码推送至 GIT repo

收到一个错误,因为必须先进行拉操作,然后进行合并和推操作。下一步是提取更改(最初没有),然后重做阶段、提交和推送。尝试几次后,提交的文件出现在 GitHub 存储库中,如图 1-25 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig25_HTML.jpg

图 1-25

在 GitHub 中验证提交的代码

当回到可视代码时,通过添加注释,在索引文件中进行了有意的更改。保存文件后,它显示为挂起的更改。重复了登台和提交的步骤。最后,变更被推送到外部存储库。几秒钟后,这些更改反映在提交计数中(从 13 增加到 14),如图 1-26 所示。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig26_HTML.jpg

图 1-26

验证最新提交

要验证文件内容,请参见图 1-27 中显示的第 5 行添加的注释。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig27_HTML.jpg

图 1-27

验证代码文件更改

一旦 SAP Web IDE 被映射到 GitHub 存储库,合并和执行所有附加步骤的需求应该是不必要的。这些步骤是为了演示不同的 IDE 如何连接到 GitHub 这样的外部代码库,以及如何对它们进行更改,然后使用 git 命令或 IDE 插件接口提交这些更改。SAP Web IDE 示例将包含类似的截屏和对该工具上的步骤的解释。

mta.yaml 公司

在云应用中,有一个扩展名为 yaml(或 yml)的文件。YAML 代表“YAML 不是标记语言”这是所有编程语言的可读数据序列化文件标准。该文件指定了(容器化的)应用如何构建、集成和部署到云环境中。这个文件有一个特定的结构,它遵循关于间距、命名约定、语法和规则的严格规则,这些规则可以在他们的网站上找到( https://yaml.org/ )。

此外,在 SAP HANA XSA 的范围内,该 mta(多目标应用)文件从微服务解释了模块关系、使用的任何服务(托管或用户提供的)以及云系统内部署应用的依赖关系。YAML 文件包含极其敏感的语法和间距规则;因此,在对该文件进行任何修改之前,理解它是很重要的。

该文件中还可以包含其他元数据属性,例如表 1-6 和图 1-28 中显示的属性。

img/498901_1_En_1_Chapter/498901_1_En_1_Fig28_HTML.jpg

图 1-28

mta yaml 档

表 1-6

mta yaml 公司

|

元数据属性

|

意义

| | --- | --- | | 身份 | 指多目标应用的名称 | | 版本 | 指要部署的完整应用(内部版本)版本。您可以使用同一个版本进行多次构建;但是,当版本改变时,会创建一个新的 mtar 文件 | | 模块 | 指组成数据库模块、Node JS 模块、HTML5 模块或 Java 模块的代码 | | 资源 | MTA 需要但 MTA 没有提供的东西。本节指定了自定义用户提供服务(CUPS)或托管服务(SAP HANA 提供的服务)的使用 | | 性能 | 运行时使用的模块中的键值对 | | 因素 | 保留变量 | | 需要 | 指的是模块依赖关系 |

结论

在本章结束时,您应该能够了解基本的 SAP HANA 1 环境,并能够了解即将进入 SAP HANA XSA 的一些变化,例如对 GitHub 等外部代码库的需求,XSA 命令行界面的介绍,以及 XSA 环境中存在的新构件,作为能够在 HANA XSA 创建微服务的介绍。