Java – Microservices Architecture separating backend and front end

Architecturejavajavascriptmicroservicesnode.js

We are trying to move (slowly) into Microservices architecture from our current monolithic based architecture. I've done my research on microservices architecture and would like to get some feedback on the architecture I've described below from the community.

Information about the application

It's a web application used internally with around 10-20 users. The application shows reports in charts and tabular format and export functionality to pdf/xsl/csv. In time the application might grow and and more functionalities will be added.

What I had in mind is to have two Microservices (MS) serving different purpose
a Report (MS) and Engine (MS).

Engine consists of the following:

Major Libraries: Spring Boot, Spring Rest, Maven, JDBC Template
Architecture: DAO, Service and Rest Controller
Application Server: Tomcat (embedded)

Short Summary:

DAO layer uses JDBC template because of complex SQL queries which will be passed on to Service for any business rules or other logic. Rest Controller which takes data from service layer and serves as the interface between Engine and Report

Report (MS) consist of the following:

Major libraries: Spring Boot, Spring Rest, Maven, JSP, JavaScript/Jquery/
Architecture: Service, Controller, Front End technologies
Application Server: Tomcat (embedded)

Alternative Technologies for Report (MS):
AngularJS 2, NodeJS, JavaScript/Jquery/HTML/CSS

Short Summary:

Service layer requests information from Engine(MS) via REST API, data will be passed on to Controller and served to appropriate view (combination of JSP, JavaScript/jquery/css/html etc).

Also considered using AngularJS 2 or NodeJS and JavaScript to replace Java Technology and Tomcat Application Server as soon as I get some feedback.

Database Facts

  • external / separate server
  • currently evaluating MySQL, MSSQL
  • contains lots of data average 10K per day per table
  • properly designed (normalization/indexing etc as claimed by DB Admin)
  • queries are extremely long 8 A4 with proper indentation, better off as stored procedure or use jpa data?

So far I have identified high level pros and cons with this design, appreciate if anyone can add more.

Pros

  1. Report MS using Java/JavaScript/JSP can be easily replaced easily by any Front End technology without affecting Engine MS.
  2. Report MS is loosely coupled with Engine MS and can use other REST API source.
  3. Spring Boot reduces a lot of configuration and wiring of beans plus it comes with embedded tomcat and DBs.
  4. Using Maven for build and library management.

Cons

  1. Network latency between Report and Engine MS since it has to traverse the network to transfer data.
  2. Extra code complexity writing in Java for Backend Services(Engine MS) and JSP/JavaScript or Angular JS for frontend.
  3. DAO Layer hard coding queries as strings of SQL query difficult to debug.

Best Answer

1) I would not favor to replace the Java technology with the Angular2 version. Instead you should incorporate Angular-2 within the java app. Because Angular is making lot of dramatic changes in its framework. In future, it might be complex or tedious for application developers to upgrade the angular version to the latest one.

2) I have one more suggestion for your Database area. You should also add REDIS as a no-sql data repository as a separate independent tier in your architecture. REDIS will help you to accomplish various features with the app performance boost such as

  • Caching of app features
  • Data Auditing
  • App User Logging
  • Exception Logging
  • Storage of static lookup data in the key-value pairs
  • Utilize expiration feature of various data structure types

REDIS has the capability to perform very faster reads and writes, even for the bulky datasets.

Java application can talk to the REDIS server with the help of available API's located at
https://redis.io/clients#java