Candidate Architecture
Figure - Candidate Architecture
Layers
The architecture includes four distinct layers:
- Presentation Layer
- Enterprise Services Layer
- Data Services Layer
- Data Layer
Presentation Layer
The presentation layer deals with user interface aspects of the system. Presentation layer will leverage Kuali Rapid Application Development (KRAD), a framework providing reusable solutions and templates. KRAD is built upon industry standard jQuery libraries providing out-of-box UI components, validations and accessibility to RICE middleware.
Enterprise Services Layer
The enterprise services layer encapsulates specific business rules, which are made available to the presentation layer. The presentation layer requests enterprise services, which are then fulfilled by this layer. The architecture envisages providing a seamless enterprise service layer communicating with internal data stores and 3rd party services. The data access layer supports the enterprise service layer by serving the data required.
Enterprise Services is based on a Service Oriented Architecture and leverages Kuali Service Bus (KSB), for service integration. Services will be designed as java spring-based services and will be published on the service bus as remote asynchronous calls. Transaction services will be published as SOAP services and lookup services will be published as RESTFul Services.
Features such as Service Discovery, Quality of Service, Security, Monitoring and Messaging are available as out-of-box features in Kuali Service Bus and can be leveraged during implementation as required.
Data Services Layer
The data services layer provides fundamental services to fulfill the business needs (fulfilled through enterprise services) such as Search, Request Item, etc. The data services layer serves data required by enterprise services. Data services support both relational database and Solr.
Services implementing data access to relational database will leverage Java Persistence Architecture (JPA), providing separation of object persistence and data access logic from a particular persistence mechanism (relational database) in data layer. This approach provides the flexibility to change the applications persistence mechanism without the need to re-engineer application logic that interacts with the data layer. Persistence classes are developed following the object-oriented idiom including association, inheritance, polymorphism, composition, and collections. This framework provides the flexibility to express queries in its own portable SQL extension, as well as in native SQL, or with object-oriented criteria.
Services implementing data access to Solr / Lucene search will wrap the Solr RESTFul API’s to provide features such as search, filter, sort and navigation.
Data Layer
The data layer serves as the data store for all persistent information in the system including the relational database and search engine indexes.
RDBMS data layer will comprise of MySQL cluster. RDBMS data layer will be accessed only from the data access layer via Data Access Objects (DAOs). RDBMS cluster architecture allows a single physical database to be accessed by concurrent instances running across several different CPUs. The proposed data layer will be composed of a group of independent servers or nodes that operate as a single system. These nodes have a single view of the distributed cache memory for the entire database system providing applications access to more horsepower when needed while allowing computing resources to be used for other applications when database resources are not as heavily required. In the event of a sudden increase in traffic, proposed system can distribute the load over many nodes, a feature referred to as load balancing. In addition to this, proposed system can protect against failures caused by unexpected hardware, operating system or server crashes, as well as processing loss caused by planned maintenance. When a node failure occurs, connection attempts can fail over to other nodes in the cluster, which assumes the work of the failed node. When connection failover occurs and a service connection is redirected to another node, users can continue to access the service, unaware that it is now provided from a different node.
A single Solr instance can support more than one index using Solr cores (single index per core). A single large index can be a performance overhead. SolrCloud distributes a single index on different machines, commonly referred as shards. All shards of the same index making one large index are referred as collection. While collection supports index scaling, it does not provide redundancy. Replication of shards provides redundancy and fault tolerance.
Zookeeper maintains the SolrCloud, by distributing the index across shards and federating the search through the collection. SolrCloud uses leaders and an overseer. In the event of leader or the cluster overseer failure, automatic fail over will choose new leaders or a new overseer transparently to the user and they will seamlessly takeover their respective jobs. Any Solr instance can be promoted to one of these roles.