专栏首页天马行空布鲁斯浅析SAP Subscription Billing可扩展性

浅析SAP Subscription Billing可扩展性

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

本文分享自微信公众号 - 天马行空布鲁斯(gh_2feda5c053bd),作者:huazailmh

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 对比Java和.NET多线程编程

    并发(concurrent):即使对于单核CPU,我们也会采用多线程等技术提高service的并发处理能力,我们经常说的高并发,就是这个意思。

    Bruce Li
  • 关于文本排序的那些事

    大家都知道,排序算法是计算机学科最基础的知识之一,常见的排序算法有冒泡、快排等。这里讨论的文本排序不是一个排序算法,而是作为某个排序算法的底层依赖,常常在多语言...

    Bruce Li
  • 空谈分布式系统设计之幂等性

    在之前的文章,有多次提到转账系统这个案例,由于这个案例太典型了,很多大学教授数据库事务的时候就是用的这个案例。

    Bruce Li
  • 盘点2016网络产业十大事件

    2016年变成过去时,崭新的2017年已经到来。为了“温故而知新”,小编盘点了今年网络产业发生的十件大事,希望能帮助大家从全局认识网络产业的发展,从而为2017...

    灯塔大数据
  • SQL格式笔记

    夜雨飘零
  • 兼容性Up!Object Detection API 现已支持 TensorFlow 2

    作者 | Vivek Rathod 和 Jonathan Huang,Google Research

    磐创AI
  • Java设计模式——线程安全的单件模式

      单件模式的类图是所有模式的类图中最简单的——只有一个类。尽管从类设计的视角来看单件模式很简单,但是实现上还是会遇到一些问题,本文着重对这一点来进行分析解决。

    王金龙
  • Java8 Lambda表达式详解手册及实例

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    程序新视界
  • Java8 Lambda表达式详解手册及实例

    首先看一下发音 ([ˈlæmdə])表达式。注意该词的发音,b是不发音的,da发[də]音。

    用户4172423
  • 生信宝典之傻瓜式(六)查找转录因子的靶基因

    生信宝典

扫码关注云+社区

领取腾讯云代金券