Custom solution for making SendSMSInBulk PM agent multinode in v 7.22
In our existing project customer is facing too much SMS delivery delay while launching campaigns i.e 1.2 million smses broken into 1.2 *5 = 6 million sms fragments takes in excess of 12 hours to deliver.
Pega suggested to upgrade from PM 7.22 to latest 7.4 or 8.1,so that we can use the multinode feature which is not present in 7.22 . However as last year only we did a upgrade so client is not very keen to do another upgrade and ask us to give some custom solution.
So for that we plan customise the existing SendSMSInBulk agent activity to use a DF with source as PR_DATA_CORR_SMS table where we will do partitioning by introducing a new column PART_KEY containing 30 partitions for each SMS account. So the DF will spawn 30 requestor one for each partition evenly spread across the 4 nodes we have.
Question is what logic we should write in DF to give the best SMS through put. ANy suggestion in this regard will be really helpful, or any other alternate approach.
***Edited by Moderator Marissa to update platform capability tags****
Not sure what logic you might be thinking would be required, but generally speaking you need not worry about it more than what you have specified here. The only other thing to consider is that you will also have vertical calling in data flow nodes. Meaning that a node will launch a number of threads to process within a node and then you also have 4 nodes, so in effect you have number of threads times number of threads processing this. Each thread will process batches of 250 records at a time. As such, you might find that 30 partitions might be too little.
We have kept the number of partitions configurable, so that't not an issue.
One of the thing that is bugging us was the SMS connection object, as you know in current OOTB implementation 1000 sms are sent for each connection object fetched, however if we use a DF how to ensure that how same connection object will used for all the records for a particular partition, because if we use the current java code for sending sms through a function or an activity then the SMS connection object will fetched for each record and then released, which won't be good for peformance as fetching a connection object is a costly affair.