Saleban Olow
Reza Valipour
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.
- 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.
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.
Our objective is to develop microservices that effectively communicate with each other. gRPC offers several advantages for our project, including:
-
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.
- Allow admins to log into the platform to access content - Authentication
- Allow admin to add, edit, and delete content - Crud operation
- We have used Jest for testing our react components, e.g. "if component is render, if text is showing up, etc"
- Dockerize
- Add "View your site" feature, allowing admin to view their contents.
- Add user as a admin
- Deployment with kubernetes
Required:
- Java 11 or later
- Maven
cd grpc-cms-server-java
mvn clean install
mvn exec:java
Required:
- Go 1.18 or later
cd login-service-go
go build ./login-service-go
Required:
- Node.js 16+ (preferably the latest LTS version)
cd analytic-service-js
npm install
node client-api-analytic.js
Required:
- Node.js 16+ (preferably the latest LTS version)
cd grpc-client-service
npm install
node grpc-client-public-api.js
cd cms-client-app
npm install
npm run dev