Saransh

Thanks, I'll be there.

Regards

Victor

El lun, 25 oct 2021 a las 23:37, Saransh Sharma (<[email protected]>)
escribió:

> Apache Fineract Dev Discussion
> Thursday, 28 Oct · 9:50 – 10:50 AM
> Google Meet joining info
> Video call link: https://meet.google.com/pdq-ybcs-adf
> Or dial: +1 617-675-4444 PIN: 1480810204623
> More phone numbers: https://tel.meet/pdq-ybcs-adf?pin=1480810204623
>
> On Tuesday, October 26, 2021, Saransh Sharma <[email protected]>
> wrote:
>
>> Let’s do that let me know your availability we can stream it also !
>>
>> Let me know your preferred platform !
>>
>>
>>
>> On Tuesday, October 26, 2021, VICTOR MANUEL ROMERO RODRIGUEZ <
>> [email protected]> wrote:
>>
>>> Saransh
>>>
>>> I would like to have a discussion, if we can record it, publish it in
>>> youtube for example and share the link here again, in order to allow the
>>> community to be in the loop.
>>>
>>> Does it work?
>>>
>>> Regards
>>>
>>> El lun, 25 oct 2021 a las 22:37, Saransh Sharma (<[email protected]>)
>>> escribió:
>>>
>>>> Timestamping could also be added as part of the key.
>>>>
>>>> I agree with Victor here, we need to keep it simple, Hey @Victor Romero
>>>> <[email protected]> would you like to discuss this and
>>>> flesh it out together ?
>>>>
>>>> On Tue, Oct 26, 2021 at 9:01 AM VICTOR MANUEL ROMERO RODRIGUEZ <
>>>> [email protected]> wrote:
>>>>
>>>>> I will extend the previous email,
>>>>>
>>>>> At  asynchronous transactions:
>>>>>
>>>>> The trigger (or POST) for doing asynchronous transactions while
>>>>> sending notifications (email, sms, push) over MQ/JMS queues, the
>>>>> user/customer experience will be affected by receiving twice or more
>>>>> payment reminders, payment notification (they can think that the payment
>>>>> was applied twice), account creations, loan applications, etc and the cost
>>>>> associated for each message sent over the notification channel.
>>>>>
>>>>> At  journey entry:
>>>>>
>>>>> The trigger (or POST) for doing any transactions (monetary or non
>>>>> monetary) only 1 entry must be recorded in all the systems so then the
>>>>> logging and monitoring systems (fraud, alerting, etc) can correlate the
>>>>> transaction (using surrogate keys) and later the data scientist or data
>>>>> engineers won't be blaming the CBS engineering team.
>>>>>
>>>>> At  transaction caching:
>>>>>
>>>>> We got a use case where the loan origination process was taking some
>>>>> time to execute the process and because of the demand of the financial
>>>>> product people was trying to execute several times to have a loan, so then
>>>>> the business requirement was to keep on cache the same "loan request" if
>>>>> the people ID was the same (in our case the National Population ID) and 
>>>>> not
>>>>> executing the query to the external systems (Credit Bureau, Black List had
>>>>> a high cost per each query). So then we saved execution time and money.
>>>>>
>>>>> ****TL;TR****
>>>>> What I am trying to express is that the level, use cases, and user
>>>>> history (or whatever it can be the concept about is it use) have a wide
>>>>> range of "idempotent" implementations for the potential solutions should 
>>>>> be
>>>>> evaluated carefully depending on them.
>>>>>
>>>>> I think that the ID of the "idempotent" key should have enough
>>>>> entropy to avoid any collision in the middleware, cache, db or messaging
>>>>> level and the recording of it must be at UTC time either if it handles
>>>>> synchronous or asynchronous API calls.
>>>>>
>>>>> ********
>>>>>
>>>>> Best regards
>>>>>
>>>>> Victor
>>>>>
>>>>>
>>>>> El lun, 25 oct 2021 a las 19:39, VICTOR MANUEL ROMERO RODRIGUEZ (<
>>>>> [email protected]>) escribió:
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> I agree that a key must be used on the server side (Consumer) to
>>>>>> avoid any duplicate record, most of the time I used to look at the 
>>>>>> Software
>>>>>> Patterns like the Martin Fowler's articles:
>>>>>>
>>>>>>
>>>>>> https://martinfowler.com/articles/patterns-of-distributed-systems/idempotent-receiver.html
>>>>>>
>>>>>>
>>>>>> The pattern described there is more complex than the
>>>>>> Saransh's proposal (which is a good starting point), there are many
>>>>>> approaches to add this feature (Idempotency) on Apache Fineract, which I
>>>>>> think should be flexible enough to handle business rules.
>>>>>>
>>>>>> Idempotency can be at different levels (even using the POST/PUT),
>>>>>> example:
>>>>>>
>>>>>> At DB level:
>>>>>>
>>>>>> The POST can be executed to create a new customer and the DB table
>>>>>> has as a key or unique the email used in the account creating, then a
>>>>>> duplicated entry at DB level should be thrown and the API Rest should 
>>>>>> send
>>>>>> this error. Then this API Rest is Idempotent because at DB level there 
>>>>>> is a
>>>>>> restriction.
>>>>>>
>>>>>> At API REST per business rule level:
>>>>>>
>>>>>> The POST for a login should be idempotent because only one session is
>>>>>> created at a time per user/customer and in case of X number of failed
>>>>>> retries the account must  be locked for a period of time or unlocked by a
>>>>>> manual/automatic process. Once the session is created, if a POST for 
>>>>>> login
>>>>>> sends a 200 status, then for a period of time the possibility to have
>>>>>> another login must be blocked until the current active session expires
>>>>>> (expiry time is set by the digital delivery channel owner like Internet 
>>>>>> or
>>>>>> Mobile banking).
>>>>>>
>>>>>> At API REST per consistency rule level:
>>>>>>
>>>>>> The POST for doing a payment (third party same bank or interbank
>>>>>> transfer) the idempotency key must be used for keeping the track of the
>>>>>> transaction status, holding the amount, settlement or reversal of the
>>>>>> amount, digital receipt, digital invoice generation, accounting record,
>>>>>> etc) in order to avoid duplication of charges in the origin account. Even
>>>>>> with confirmation/warning pop ups/windows  errors occur. So then the 
>>>>>> handle
>>>>>> of the idempotency key must be handled and implemented in the Front end
>>>>>> application, the Server (and the internal consumer).
>>>>>>
>>>>>> And by the way the transactions must be done at UTC time, not at TZ
>>>>>> (another change in the Apache Fineract's tables should be done for the
>>>>>> offset time zone recording) .
>>>>>>
>>>>>> Best regards
>>>>>>
>>>>>> Victor
>>>>>>
>>>>>> El sáb, 23 oct 2021 a las 0:05, Saransh Sharma (<
>>>>>> [email protected]>) escribió:
>>>>>>
>>>>>>> This is a curious problem in computer science and especially in
>>>>>>> distributed networks.
>>>>>>>
>>>>>>> API Idempotency is a major issue for software like Fineract,  unless
>>>>>>> the API handles drop off and recognize the second call or any n call as
>>>>>>> either duplicate or important in any given case,  like how stripe does 
>>>>>>> this
>>>>>>> by specifying a key from the client end ensures that even in case of
>>>>>>> failure the charge does not happen twice!
>>>>>>>
>>>>>>> This can lead to financial loss in case of real payment taking place!
>>>>>>>
>>>>>>> I think, as of right now there is no such mechanism in Fineract 1.x
>>>>>>> that eliminates such risk. Except, on the validation side, but that’s 
>>>>>>> not
>>>>>>> enough.
>>>>>>>
>>>>>>> To have this implemented we have done some work on this last year ,
>>>>>>> maybe we can present some code also !
>>>>>>>
>>>>>>> I have used some cryptography libs to have the client-side send a
>>>>>>> unique key that’s generated by the private key infrastructure and the
>>>>>>> client-side has to send these as headers and on the server-side, the
>>>>>>> signatures are validated thus making the idempotency in POST and PUT
>>>>>>> request.
>>>>>>>
>>>>>>> The code on the client side
>>>>>>>
>>>>>>> var keys = {
>>>>>>>   alice: 
>>>>>>> '38f93bdda21a5c4a7bae4eb75bb7811cbc3eb627176805c1009ff2099263c6ad',
>>>>>>>   bob: 
>>>>>>> '09880c962437080d72f72c8c63a69efd65d086c9e7851a87b76373eb6ce9aab5'};
>>>>>>> // GET
>>>>>>> for(k in keys) {
>>>>>>>   var url = 'APIURL';
>>>>>>>   var dataToSign = url;
>>>>>>>   var options = {
>>>>>>>     url: url,
>>>>>>>     headers: {
>>>>>>>       'x-identity': auth.getPublicKeyFromPrivateKey(keys[k]),
>>>>>>>       'x-signature': auth.sign(dataToSign, keys[k])
>>>>>>>     }
>>>>>>>   };
>>>>>>>
>>>>>>>
>>>>>>> The above code generates these Keys are now passed on each request
>>>>>>> to the server,  and the server using the middleware in case of Fineract
>>>>>>> have to do two things
>>>>>>>
>>>>>>> 1. VerifySignature
>>>>>>> 2. GetSinFromThePublicKey
>>>>>>>
>>>>>>> I started writing some code for this and quickly realized that it's
>>>>>>> actually doable, it requires around 20 hours of work, There are some
>>>>>>> dependency that needs to be added on the server side and some quick 
>>>>>>> changes
>>>>>>> on the middleware and its done.
>>>>>>>
>>>>>>> We presented a paper on this last year on Apache Con ! Remember
>>>>>>> something about using zero knowledge of proof and password less auth .
>>>>>>>
>>>>>>> Let me know , I would like to make sure that this gets added in this
>>>>>>> upcoming release.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Friday, October 22, 2021, James Dailey <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Devs -
>>>>>>>>
>>>>>>>> Through a conversation with a computer science person, I've learned
>>>>>>>> that Fineract should have a clearly articulated approach with regard to
>>>>>>>> idempotency.  This is particularly true when thinking about how 
>>>>>>>> fineract
>>>>>>>> interacts with payment systems.
>>>>>>>>
>>>>>>>> "When building a system to move money, it is paramount that
>>>>>>>> operations that move money are idempotent. Failure to do this might 
>>>>>>>> result
>>>>>>>> in accidentally double charging your customer, or paying a vendor 
>>>>>>>> multiple
>>>>>>>> times. The risk of this happening is elevated based on the way 
>>>>>>>> software is
>>>>>>>> typically built today, since developers take advantage of scalable 
>>>>>>>> systems
>>>>>>>> that process multiple items in parallel. "
>>>>>>>> (
>>>>>>>> https://www.moderntreasury.com/journal/why-idempotency-matters-in-payments
>>>>>>>> )
>>>>>>>>
>>>>>>>> Or this article on Stripe engineering calling for liberal use of
>>>>>>>> Idempotency:
>>>>>>>>
>>>>>>>> "The easiest way to address inconsistencies in distributed state
>>>>>>>> caused by failures is to implement server endpoints so that they’re
>>>>>>>> idempotent, which means that they can be called any number of times 
>>>>>>>> while
>>>>>>>> guaranteeing that side effects only occur once."  (
>>>>>>>> https://stripe.com/blog/idempotency)
>>>>>>>>
>>>>>>>> and this article in Apache Camel
>>>>>>>>
>>>>>>>> https://camel.apache.org/camel-kafka-connector/latest/user-guide/idempotency.html
>>>>>>>>
>>>>>>>> So, my understanding may be wrong and we've got this covered, or
>>>>>>>> maybe we just consider this overkill.  Perhaps there is something in 
>>>>>>>> the
>>>>>>>> "magic" that's developed in the CQRS plus in-memory database queuing 
>>>>>>>> and
>>>>>>>> our clever transaction state management, but... I don't know.
>>>>>>>>
>>>>>>>> Or perhaps we haven't really had to think about this because we
>>>>>>>> haven't had that many large scale deployments and the scalability 
>>>>>>>> issues
>>>>>>>> associated with multiple parallel calls haven't come to the fore, or
>>>>>>>> haven't come back to the list. So, that's the intent of this email.
>>>>>>>>
>>>>>>>> Do we have a need now for layering on Idempotency checks? What is
>>>>>>>> the right approach?  Has anyone already implemented this, or decided 
>>>>>>>> not to
>>>>>>>> for very good reasons?   What would be the right approach to this?
>>>>>>>> Implement where?  Time limited to 3 hrs?  Etc...
>>>>>>>>
>>>>>>>> So, this is a call to discuss.  I'm far from an expert on this.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>
>>>> --
>>>>
>>>> Saransh Sharma
>>>> *Research Partner*
>>>> *Muellner Internet Pvt Ltd *
>>>>
>>>>
>>>> ----------------------------------------------------------------------------------------------
>>>>
>>>> The idea of separation of me and you is amazing.
>>>>
>>>> ----------------------------------------------------------------------------------------------
>>>> *Company Website <https://www.muellners.com/>       **Company Linkedin
>>>> <https://www.linkedin.com/company/muellners>            *
>>>> Company Facebook <https://www.facebook.com/muellners>
>>>>
>>>> This mail is governed by Muellner®  Internet Private Limited's IT
>>>> policy.
>>>> The information contained in this e-mail and any accompanying documents
>>>> may contain information that is confidential or otherwise protected from
>>>> disclosure. If you are not the intended recipient of this message, or if
>>>> this message has been addressed to you in error, please immediately alert
>>>> the sender by reply e-mail and then delete this message, including any
>>>> attachments. Any dissemination, distribution or other use of the contents
>>>> of this message by anyone other than the intended recipient is strictly
>>>> prohibited. All messages sent to and from this e-mail address may be
>>>> monitored as permitted by applicable law and regulations to ensure
>>>> compliance with our internal policies and to protect our business. E-mails
>>>> are not secure and cannot be guaranteed to be error free as they can be
>>>> intercepted, amended, lost or destroyed, or contain viruses. You are deemed
>>>> to have accepted these risks if you communicate with us by e-mail.
>>>>
>>>
>>
>> --
>> Sent from Gmail Mobile
>>
>
>
> --
> Sent from Gmail Mobile
>

Reply via email to