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
Its 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. Thanks

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 alot 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
  • 3
    Design reviews are generally off-topic here, unless you can formulate some specific, answerable, and not opinion-based questions. – scriptin Apr 5 '17 at 8:58

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

  • 3
    You are suggesting to add a random technology to a project which you don't know anything about. The common sense suggests to add technologies only if they solve real problems, and not just because they look cool. – scriptin Apr 5 '17 at 12:25
  • @karan thanks for the suggestion, when you said you want to integrate java with angular do you mean in Report (MS) i will have Java and Angular or I will combine Angular with Engine (MS) and discard Report(MS)? Also for Redis I don't think I'd be using it for now since there are a few users at any given time. Maybe in the future... – dimas Apr 5 '17 at 12:56

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.