Jube is an open-source software designed for monitoring transactions and events. It offers a range of powerful features including real-time data wrangling, artificial intelligence, decision making, and case management. Jube's exceptional performance is particularly evident in its application to fraud prevention and abuse detection scenarios.
For all Classes making calls to the Postgres Cache, extracted references, then implemented that interface on a like for like basis given Redis calls. Substantial refactoring of core Cache Classes to facilitate the implementation of Redis. Where Redis is available in the Dependency Injection, builders, at point of use, will new up Class repositories for Redis, else Postgres. It follows that Postgres and Redis work in a like for like fashion, notwithstanding the substantial differences in interaction with Redis to achieve the same output for the interface. Async callbacks for model invocation are still using Postgres Notify in all instances however.
The Redis connection is created at startup and added to Dependency Injection, which is different to the connection to Postgres which has its connection newed on each call to the database, because of the way the driver pools its connections.
Some new Cache entities were added, such as Latest, to capture the most recent event for a model invocation, for each Search Key. New accompanying repositories created for new entities, including their POCO’s for Linq2DB. The Redis Key Value, Hash Sets and Sorted Sets are a mish mash as compared to the Postgres Cache tables, with the trade off of there being no need to index and - especially in the implementation of Sorted Sets - much better performance under load. Redis will certainly be the focus moving forward.
The most current model Reference Date identification, which is used extensively in background threads, was very clumsily and inefficiently handled in previous versions, whereas it is now stored in Cache, Postgres or Redis, updated on each event invocation, for each model.
A general audit of the Cache repositories interfaces ensure that they now fully support multi-tenancy.
Implemented Time To Live for Cache data at the model, and the Search Key, although only in the case of Redis does the Search Key Time To Live have effect as there is no similar Sorted Set concept in Postgres indexes. Updated the User Interface to support Time To Live requiring update to Model and RequestXPath Pages, Controllers, DTO’s, Validations and associated repositories. Created a new regular Time To Live purge thread which is supported by both the Postgres and Redis implementations.
Migrations exist to create Postgres objects in support of the above, with TTL Counter Values being default to 1 Day, given legacy data otherwise null.
Updated Stress Test to include TPS Snapshot and Response Time write out. Some improvements in the request thread start while also making it more realistic in dithering load. Included a time drift of x seconds added to the Reference Date for each transaction to allow background purge and TTL Counter Decrement threads to be tested under load.
Updated documentation to include Redis functionality. Documentation presents Redis as being the default and recommended Cache. Some new Environment Variables to support new or updated functionality.
Given the manner in which the Cache is presented via Interfaces and Builders, except for new functionality, no changes have been made to the invocation flow, or indeed the wider system.
Some TODO's were removed which should not have been in code. Code tidy here and there if adjacent to the project.
For all Classes making calls to the Postgres Cache, extracted references, then implemented that interface on a like for like basis given Redis calls. Substantial refactoring of core Cache Classes to facilitate the implementation of Redis. Where Redis is available in the Dependency Injection, builders, at point of use, will new up Class repositories for Redis, else Postgres. It follows that Postgres and Redis work in a like for like fashion, notwithstanding the substantial differences in interaction with Redis to achieve the same output for the interface. Async callbacks for model invocation are still using Postgres Notify in all instances however.
The Redis connection is created at startup and added to Dependency Injection, which is different to the connection to Postgres which has its connection newed on each call to the database, because of the way the driver pools its connections.
Some new Cache entities were added, such as Latest, to capture the most recent event for a model invocation, for each Search Key. New accompanying repositories created for new entities, including their POCO’s for Linq2DB. The Redis Key Value, Hash Sets and Sorted Sets are a mish mash as compared to the Postgres Cache tables, with the trade off of there being no need to index and - especially in the implementation of Sorted Sets - much better performance under load. Redis will certainly be the focus moving forward.
The most current model Reference Date identification, which is used extensively in background threads, was very clumsily and inefficiently handled in previous versions, whereas it is now stored in Cache, Postgres or Redis, updated on each event invocation, for each model.
A general audit of the Cache repositories interfaces ensure that they now fully support multi-tenancy.
Implemented Time To Live for Cache data at the model, and the Search Key, although only in the case of Redis does the Search Key Time To Live have effect as there is no similar Sorted Set concept in Postgres indexes. Updated the User Interface to support Time To Live requiring update to Model and RequestXPath Pages, Controllers, DTO’s, Validations and associated repositories. Created a new regular Time To Live purge thread which is supported by both the Postgres and Redis implementations.
Migrations exist to create Postgres objects in support of the above, with TTL Counter Values being default to 1 Day, given legacy data otherwise null.
Updated Stress Test to include TPS Snapshot and Response Time write out. Some improvements in the request thread start while also making it more realistic in dithering load. Included a time drift of x seconds added to the Reference Date for each transaction to allow background purge and TTL Counter Decrement threads to be tested under load.
Updated documentation to include Redis functionality. Documentation presents Redis as being the default and recommended Cache. Some new Environment Variables to support new or updated functionality.
Given the manner in which the Cache is presented via Interfaces and Builders, except for new functionality, no changes have been made to the invocation flow, or indeed the wider system.
Some TODO's were removed which should not have been in code. Code tidy here and there if adjacent to the project.