Skip to content

Olow304/aoshima-SEIS-739

Repository files navigation

Aoshima-SEIS-739

Saleban Olow
Reza Valipour

Vision Statement

We are planning to develop an easy-to-use content management system (CMS) that would allow website owners to update their content easily. We strive to create a unique and reliable system, making it simple for users to manage their content. We want to empower website owners to update content securely and efficiently.

Project Directories & Structure

  • grpc-cms-server-java: This is our main server. It is written in Java and uses gRPC server for communication.
  • grpc-client-service: This service is using gRPC client for communication with the main server. Mainly responsibly handing client crud operation and communicating to the main server.
  • login-service-go: The login service of the project. It is written in Go and uses gRPC client for communication with the server. It's generated using the gRPC-Go plugin.
  • analytic-service-js: The analytic service of the project. It is written in JavaScript and uses gRPC client for communication with the server. It's generated using the gRPC-Node plugin.
  • cms-client-app: This is the frontend of the project, it's using Nextjs and will be using all the services to provide a complete CMS experience.

Image description

Class diagram

Image description

Why gRPC?

We chose gRPC because it is a high-performance, open-source, and flexible RPC framework. It can be used in various environments, making it a great tool for microservices architecture.

Why are we using gRPC?

Our objective is to develop microservices that effectively communicate with each other. gRPC offers several advantages for our project, including:

Advantages of gRPC

  • Efficient communication: gRPC provides efficient communication between services, thanks to its use of HTTP/2 and Protocol Buffers. This can lead to better performance and lower resource usage, which is crucial for a CMS that may handle large amounts of data and numerous user interactions.

  • Language-agnostic: Since the project consists of services written in different languages (Java, Go, and JavaScript), gRPC's support for multiple languages allows seamless integration and interoperability among these services, regardless of the language they're implemented in.

  • Strongly-typed interfaces: gRPC enforces strict schemas for services and messages using Protocol Buffers. This ensures that both the client and server agree on the API contract and data structures, reducing the likelihood of bugs and making communication between services more reliable.

  • Scalability: gRPC is designed to work well in distributed systems and microservices architectures. Its features, such as streaming, load balancing, and pluggable components, make it easier to scale the CMS application as the need arises.

  • Easier client integration: gRPC provides client libraries for various languages, simplifying the interaction between the frontend application (Next.js in this case) and the services. This streamlines the development process and improves the overall user experience in the CMS.

Use case

  • Allow admins to log into the platform to access content - Authentication
  • Allow admin to add, edit, and delete content - Crud operation

Testing

  • We have used Jest for testing our react components, e.g. "if component is render, if text is showing up, etc"

Future work

  • Dockerize
  • Add "View your site" feature, allowing admin to view their contents.
  • Add user as a admin
  • Deployment with kubernetes

How to run the project

grpc-cms-server-java (using Maven):

Required:

  • Java 11 or later
  • Maven
cd grpc-cms-server-java
mvn clean install
mvn exec:java

login-service-go (Golang):

Required:

  • Go 1.18 or later
cd login-service-go
go build ./login-service-go

analytic-service-js (Nodejs):

Required:

  • Node.js 16+ (preferably the latest LTS version)
cd analytic-service-js
npm install
node client-api-analytic.js

grpc-client-service (Nodejs):

Required:

  • Node.js 16+ (preferably the latest LTS version)
cd grpc-client-service
npm install
node grpc-client-public-api.js

cms-client-app (Next.js):

cd cms-client-app
npm install
npm run dev

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published