前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅析SAP Subscription Billing可扩展性

浅析SAP Subscription Billing可扩展性

作者头像
Bruce Li
发布2020-10-23 10:54:21
8640
发布2020-10-23 10:54:21
举报
文章被收录于专栏:天马行空布鲁斯

SAP Subscription Billing是SAP推出的用于订阅关系(Subscription)管理的一款SaaS产品。通常来说,任意一个标准产品都不可能满足所有客户的实际需求;因此,随着客户越来越多,产品的可扩展性显着尤其重要。这篇文章简单介绍一下Subscription Billing的可扩展性功能。

1

总体来讲,Subscription Billing的可扩展性可分为两个方面:字段扩展和流程扩展。

字段扩展,通过Custom References实现。举个例子,销售代表可以把Customer的身份证号码(非标准字段)维护在Custom References里面,在后面查询的时候也就可以方便地基于身份证号查询;在SAP Subscription Billing和SAP CPQ集成的场景,CPQ作为一个leading system,销售代表先是在CPQ中创建一个Quote,Quote确认之后系统自动创建一个Subscription,这时,如果把Quote Number维护在Subscription的Custom References中,就可以方便的通过Quote Number查到对应的Subscription。

流程扩展,就是在一个标准流程执行过程中提供一些可扩展点,客户可以通过这些扩展点实现一些自定义逻辑。在Subscription Billing中,流程扩展的主要应用场景是:其它系统通过Previsioning Request和Subscription Billing集成,当创建了一个Previsioning Request之后,Orchestrator组件会根据提前配置好的Orchestration Configuration来创建Subscription;在创建的流程中,客户在Orchestration Configuration中定义的一些扩展点也会被触发。目前,支持的扩展点有两个:提供technical resource id和执行自定义的事件。在Orchestration Configuration中,除了可以定义多个扩展点之外,还可以定义每个扩展点的执行位置。

如下是一个简单的Orchestration Configuration配置例子:

上面的配置定义了两个扩展点,一个是提供technical resource id,在创建Subscription之前执行;另外一个是执行custom activity,在创建Subscription成功之后执行。

基于上面的配置,整个创建流程如下:创建一个Previsioning Request之后,Orchestrator组件发现客户的配置是客户需要自己提供technical resource id,于是暂停流程执行并且触发一个technical-resources-required的事件 -> (执行第一个扩展点)客户的一个service轮询这个事件(GET /events/technical-resources-required),生成对应的technical resource id,然后把id返回给orchestror组件(通过POST /events) -> 紧接着,Orchestrator继续执行,创建Subscription,如果创建成功,则执行最后一步,发现最后一步客户配置的是要执行Custom Activity,于是又暂停执行,触发一个activity-required事件 -> (执行第二个扩展点)客户另一个service轮询这个事件(GET /events/activity-required),收到这个事件之后,执行相应的逻辑操作(比如发送创建Subscription成功的通知邮件),执行完成之后,confirm完成(POST /events) -> Orchestrator继续执行,整个流程执行完毕。

关于SAP Subscription Billing可扩展性的具体细节,大家可以参考SAP官方help document。

2

关于上面介绍的流程扩展,下面是一些思考:

  • 对于Pub-Sub的场景,可能我们首先想到的是RabbitMQ、Kafka等消息中间件;但是如果不使用这些消息中间件,怎么实现呢?上面Subscription Billing的流程扩展就是通过借助于传统数据库,然后暴露相应HTTP Endpoint来实现的。只是在这种方式下,Consumer端必须要不断地轮询(Poll)接收消费消息。同时,这种暴露HTTP Endpoint的方式可能更加适合跨系统间的集成,比如Subscription Billing和微信集成;而RabbitMQ、Kafka等消息中间件比较适合系统内部的集成,比如各个微服务之间的集成。
  • 上面流程扩展的场景中,客户需要自己部署一个service不断地轮询,这种方式无形中增加了一些复杂度,那么是不是有其它的方式呢?也许,我们可以采用webhook的方式,当事件触发时,orchestror组件直接调用配置好的webhook。这种方式在很多场景也都有用到,比如github、微信公众号开发等。

3

关于字段扩展和流程扩展,在编程语言层面也同样需要考虑。

  • 在Java里面,对于一个结构固定的类,如何实现字段扩展呢?其实,可以定义一个Map字段专门用于存储扩展字段。
  • Java里面继承的关键字extend,其名词形式就是extensibility,中文翻译就是扩展性。所以,猜想Java语言的设计者们在设计Java语言的时候,认为继承就是一种扩展形式。之前的一篇文章(关于设计模式的那些事(一))介绍了模板方法的设计模式,个人认为这就是一种流程扩展的实现,模板方法定义了一个标准执行流程,而其中的每一步交由子类扩展实现。

References

  • https://help.sap.com/viewer/e4aa21cd43494cc1a8a90ea0f3dab8bb/2020-09-16/en-US/1a8601ce8db44b2b8e29012d385892ca.html
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 天马行空布鲁斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档