While recently working on an almost year long enterprise project at ISTS, a bunch of us here at ISTS were required to spend a fair amount of time in thinking, designing and implementing the solution. At high-level business requirements was simple; we were supposed to build a system which should have capability to receive messages from merchant host systems and pass that message to a pre-paid card processor and yes must log the transaction activities to some persistent store. a.k.a Switch.
Complexity was not in the initial design; complexity arises further when message volumes, response times and multiple integration points are analyzed. During requirement analysis phase we analyzed that system has to:-
- Receive message from multiple host systems using multiple transmission and messaging protocols
- In-coming message based on card’s BIN number, message attributes and transaction types must route to a pre-defined processor
- Rules and Workflow has to be part of the system so that every message can be validated and certain business component can worked upon in-coming message
- Integration with multiple processors using their different transmission and messaging protocols
- Transaction log persistent
- Guaranteed response return to host system
- …and a lot more
Key designing factors to come up with a solution for fulfilling the requirements were not only using the industry proven well-known methodologies or design patterns but also the growing business needs. More merchant on boarding, multiple integration points, and adding extensive ‘unknown’ future-ability based on custom messaging protocols and addition of business components were some growing business needs.
After spending time on learning and designing, the known approaches and methodologies, we finally succeed in identifying, decoupling various parts of system based on their responsibility. Decoupling of various sub-systems and unified integration between these sub-systems helped a lot in building, managing and enhancing sub-system independently without affecting other pieces of the system.
Here is what the final design comprised of:
- Adapter (Receive and Transform): An adapter is an acquiring (receiving) side sub-system of Transaction Switch that is exposed to the acquiring merchant for accepting transactions. Adapter is responsible for accepting connections on a specific protocol on a specific exposed messaging specification. System is capable enough to accommodate as many as adapters are required.
- Core (Workflow, Rules and Persistent): Core functionality of the Transaction Switch is independent of any particular protocol, adapter or cartridge. All subsystems such as processor specific cartridges or adapters existing in the Switch is utilize directly or indirectly the functionality provided by the core system. All subsystems might have dependency on core system but the core system itself does not have any dependency with any subsystem. Core system will work based on the workflows and rules defined. All workflow and rules worked on IMF (Internal Message Format).
- Cartridges (Outbound Processor Implementation): Cartridges are implementation of issuer/ processor specification. Cartridges are responsible for establishing network connectivity with issuer/ processor, sending various requests to issuer/ processor and receiving response from issuer/ processor.
Some key frameworks/products used to develop this system are:
- Java: System is based on pure Java/J2EE platform and can run on Windows as well as on multiple flavors of Linux and UNIX.
- jPOS: jPOS is a open source Java® platform-based mission-critical financial transaction library/framework that can be customized and extended in order to implement financial interchanges, protocol converters, payment gateways, credit card verification clients and servers (merchant/issuer/acquirer). jPOS can help realize product or project in a significantly reduced time period which most often translates into greatly reduced costs.
- GigaSpaces: GigaSpaces is an implementation of JavaSpaces Technology. The JavaSpaces technology is a high-level tool for building distributed application. It is a tie, space & Data Grid based architecture. Communication between Cartridges, Adapter & Issuer participant happens through the GigaSpaces. Also all static configuration information can be stored in GigaSpaces for faster retrieval.
Summary:
Key design considerations, technologies helped us in achieving the peak TPS of 900 transactions per second and peak daily transaction volume about 4.5 million transactions. Because of the open nature of design, we have been able to whip up around 35 acquiring channels, and have interfaced with more than 100 processors/institutions.
Sanjay Mishra
No comments:
Post a Comment