当前位置: 首页 > Web前端 > JavaScript

基于Kyma的企业级云原生应用扩展案例分享

时间:2023-03-26 21:14:49 JavaScript

什么是Kyma?其官网的定义是,Kyma是一个开源的云原生应用开发平台和运行时。运行云原生应用程序,并支持基于事件驱动模式的松散耦合扩展,适用于传统的On-Premises(本地部署)应用程序和云原生应用程序。本文分为两部分,分别介绍使用Kyma扩展本地部署的传统应用和企业级云原生应用的案例。使用Kyma扩展本地部署的WordPress应用WordPress是一个基于PHP的开源内容管理系统。很多朋友喜欢使用WordPress来搭建自己的个人博客站点。想象这样一个场景:一个程序员是社交媒体专家,喜欢将自己的经历同步到推特、脸书、Youtube、微信等社交媒体上。手动登录各个媒体平台,然后一个一个更新状态,无疑是一项耗时耗力的工作。好在我们是程序员,可以充分发挥自己的动手能力。假设我们自己的WordPress网站可以连接到Kyma,每当WordPress有新的更新(比如博文)时,它就会向Kyma发送一个post.published事件。Kyma收到事件后,触发注册在事件上的监听函数,一一调用社交媒体平台的API,创建相应的新闻。我们本地部署的WordPress扮演着下图中左边的BusinessSolution所代表的角色。安装KymaforWordPress插件后,我们可以在WordPress设置选项卡中看到一个新的KymaConnectorSettings页面,维护着Kyma实例的url、登录用户名和密码等信息。上面KymaConnection字段中维护的url会被KymaApplicationConnector解析,WordPress和Kyma之间会建立互信连接。在Kyma控制台中创建一个新的应用程序,单击连接应用程序按钮,并将弹出的url保存到WordPressKyma连接字段。如果直接将url粘贴到浏览器中,可以看到如下内容:csrUrl(CertificateSigningRequest)和certificate:用于生成在WordPress和Kyma之间建立SSL连接所必需的数字证书api:注册到KymaServiceCatalog端点我们使用一步WordPress方法深入了解在WordPress和Kyma之间建立安全连接的技术细节。WordPress向传入的url发起HTTPGET请求(下图中第22行的wp_remote_get),获取CSRCertificate和API端点,并存储在第32行的变量$body_json中。第73行获取Kyma的CSR(CertificateSigningrequest)url从变量$body_json的csrUrl字段,第75行向url发送POST请求,得到响应:将HTTP响应数据保存为WordPress目录下的三个本地文件文件:crt.pemclientCrt.pemcaCrt.pem接下来,WordPress和Kyma之间的安全连接就是基于这些本地数字证书文件。建立安全连接后,下一步是将特定于WordPress的事件发布到Kyma。点击上图中的SaveChanges后,WordPressKyma插件会将用户维护的需要注册的事件组装成对应的JSON字符串,通过HTTPPOST请求发送给Kyma:事件注册成功后,可以查看在Kyma应用控制台中对应的发起连接请求的WordPress实例的记录:同时,在Kyma服务目录中,还可以看到WordPress通过注册事件暴露的可访问API入口:WordPress事件成功后发布后,这些事件将出现在Kyma实例控制台的ServiceCatalog(服务目录)界面中,如下图所示。这种事件注册机制确保了WordPress和Kyma之间的松耦合关系:在Kyma平台上编写事件监听功能的开发人员不需要了解WordPress的任何技术细节。Kyma上这些事件监听函数的载体是一个LambdaFunction,开发者可以使用自己喜欢的编程语言来实现该函数。创建一个Lambda函数来实现WordPress向Kyma公开的post.published事件的监听函数逻辑。功能实现的技术栈,选择Node.js:SelectFunctionTrigger是触发方式选择,我们选择WordPress暴露给Kyma的post.published事件。这样,当在WordPress中创建新帖子时,WordPress会将post.published事件连同帖子的具体内容一起发送给Kyma,Kyma会自动调用创建的基于Serverless的LambdaFunction。剩下的LambdaFunction实现工作是纯Node.js编程:从event参数event对象中解析WordPress传入的帖子内容,并调用axios工具库转发这篇帖子。在LambdaFunction实现中,我选择调用微信OpenAPI将帖子推送给硬编码的微信用户进行测试:以上是使用Kyma自动将WordPress发布的内容“同步”到其他社交媒体平台,如作为微信步骤。下面简单回顾一下思路:(1)通过KymaApplicationConnector与WordPress建立相互信任的安全连接。(2)将WordPress暴露的post.published事件发布到KymaServiceCatalog。(3)实现KymaLambdaFunction,监控WordPress发布的post.published事件,实现转发相应内容到社交媒体平台的功能。如果你想转发到微信以外的其他社交媒体平台,只需要新建一个LambdaFunction,然后调用其他社交媒体平台的发布API即可。以上步骤同样适用于通过Kyma扩展其他云原生应用。按照以上三个步骤,扩展WordPress后,发布新帖子。看完电影《切尔诺贝利》:单步调试WordPress发帖功能,发现发帖内容被推送到对应的KymaAPIGatewayurl:回到KymaLambdaFunction功能的控制台,确认WordPress发送的事件内容已被Kyma成功接收:终于成功接收到微信公众号KymaLambda函数中调用微信开放API发送的消息:使用Kyma扩展企业级云原生应用其中Kyma官网的客户成功案例,有SAP、Netconomy、Accenture、DigitalLights等企业用户。SAP在客户体验产品线(CustomerExperience)领域推出的C/4HANA套件包括市场云、电商云、销售云、服务云和客户数据云。Kyma是SAP推荐的扩展这些创业者云原生应用的平台和工具之一。下面我们来看一些具体的扩展案例。SAPCommerceCloud有一套订单状态编排模型,从用户下单到订单最终处于Complete状态,状态迁移由一系列Action驱动。假设我们期望在SAP电商云中实现这样一个增强场景:在用户下单后,发货前,添加自定义检查步骤FraudCheck(订单欺诈检查),如图中浅色矩形所示流程图如下所示。更直接的方式是在SAP电商云源码中的订单编排流程中寻找基于Spring框架的Hooks,通过自定义JavaBeans实现自定义校验逻辑。这样,开发完成后,需要重新构建SAP电商云的Java源码。这就是所谓的应用内扩展方法。如果选择Kyma以事件驱动的方式对SAP电商云进行增强,增强后的逻辑将作为LambdaFunction载体存储在Kyma平台上,而不是对SAP电商云本身的源代码进行增强。这种方法也称为Side-by-Side扩展方法。主要开发步骤如下:(1)在SAP电商云中配置,将自定义事件FraudCheck发布到Kyma。(2)SAP电商云增强开发者登录Kyma控制台,创建LambdaFunction,上传FunctionTriggers被选为步骤1中SAP电商云发布的自定义事件。实现LambdaFunction的内容是从事件对象中解析出订单的客户信息,然后调用MarketingCloud和SAP云平台提供的RestfulAPI来校验客户身份的合法性。在运行时,当用户下订单时,SAPeCommerceCloud会向Kyma抛出一个事件。Kyma分别调用SAPMarketingCloud和SAPCloudPlatform的BusinessPartnerAPI,将检测结果返回给SAPE-CommerceCloud。登录SAP电商云Backoffice配置页面,定义一个ID为EXTERNAL_KYMA_FRAUD_CHECK的新Action。登录Kyma控制台,新建LambdaFunction,选择FunctionTriggers作为SAP电商云中维护的自定义事件Backoffice:LambdaFunction具体实现:代码第18到19行:从输入中解析订单代码事件对象参数Line26:消费SAP电商云的OCC(OmniCommerceChannel)RestulAPI获取订单详情,获取下单的客户ID30Line:根据客户ID获取客户详情Line37:检查客户邮箱是否有效第40行:检查客户是否为首次下单第43行:调用SAPMarketingCloudAPI检查客户身份有效性第46行:调用SAPCloud平台业务合作伙伴API检查客户身份的有效性以下是对基于事件驱动方法的增强实现的测试。在SAP电商云中新建一个订单,记下订单ID2139。登录SAP电商云Backoffice控制台查看自定义的FraudCheck逻辑是否按照我们预期的流程执行。根据IDEXTERNAL_KYMA_FRAUD_CHECK查找,找到之前创建的对应的流程日志记录操作:打开订单的FraudReports面板查看检查记录:Email字段检查结果:客户维护的Email字段为有效邮箱.第一次订单检查(FirstTimeOrderCheck)返回的分数是100,根据SAP电商云目前的配置,这个结果被判断为第一次订单。SAPMarketingCloudAPI调用返回的结果:SAPCloudPlatform业务合作伙伴API调用返回的结果:让我们看一下使用Kyma扩展SAPSalesCloud的另一个示例,即SAPCloudforCustomerSales模块。这就是所谓的帐户地址丰富方案。用户在SAPSalesCloud中创建客户主数据时,只需要维护基本的地址信息。单击保存后,SalesCloud向Kyma发送事件,Kyma响应事件并调用SAPAPIHub上的地址微服务通过SalesCloudAccountODataAPI写回Enrich后的地址详细信息。此增强功能可以减少SalesCloud用户输入帐户数据的工作量。这个增强中最关键的一步是打开SAPSalesCloud和Kyma之间的连接,这样Kyma就可以接收SAPSalesCloud在运行业务流程时抛出的事件。进入SAPSalesCloudAdministration工作中心的事件通知配置页面:新建一个销售云OData事件的消费者,即Kyma实例。消费者创建页面需要维护远程KymaApplicationConnectorurl:这个url可以通过登录Kyma控制台,点击ConnectApplication按钮生成:回到销售云配置页面,指定创建和更新事件两个业务对象帐户和机会,发送给Kyma。这些BusinessObjects的事件发布行为由SalesCloud的Subscription描述:保存配置后,进入Kyma控制台,即可观察到SAPSalesCloud(销售云)注册的事件。点击SAPSalesCloud可以查看注册事件的技术细节,例如事件负载(Payload)的格式、包含的字段名和数据类型等,其余和之前扩展WordPress和SAP一样电商云。在Kyma中,根据SAP销售云注册的事件,创建LambdaFunction,解析事件参数并进行相应处理。由于文章篇幅的限制,从销售云传入的事件对象的内容只是简单的在LambdaFunction中打印出来。在SAPSalesCloud中创建新机会并保存。进入KymaLambdaFunction日志控制台,观察函数体中console.log打印出的来自SAPSalesCloud的Opportunitycreationevent包含的字段:总结本文首先简单介绍一下Kyma,一个基于开源云原生应用开发在底层的Kubernetes上,平台和运行时分为两部分,分别分享使用Kyma扩展传统On-Premises应用(WordPress)和企业级云原生应用(SAPE-CommerceCloud和SAPSales)的案例云)。这些扩展案例均来自笔者实际工作中的项目经验。希望能起到招玉作用。感谢您阅读。更多Jerry原创文章在这里:《王子熙》: