Developing a note system from scratch

Developing a note system from scratch

Let’s come up with a technical task and design a system on paper. First of all, we will write down the functionality so that it is clear what will turn out in the end.

Key features:

registration and authorization in the system,
creating / changing / deleting notes,
file attachment,
categorization and tagging of notes,
full-text search.

We will make a version for the browser, applications for Android and iOS may appear in the future.

Main UI pages:

authorization,
check in,
list of notes,
note card.

Notes must support Markdown format and consist of a title and a body. In the TK there are intentionally no non-functional requirements, such as performance, reliability, disaster recovery, and so on, so as not to complicate the system.

System design

So, we know the functionality, let’s design. Let’s start by choosing the infrastructure.
CI / CD

We will build the system and deploy the code using CircleCI or GitHub Actions. All services will be packaged in Docker containers and run using Docker-compose.
Version control system

There is already a repository on GitHub. It will be used as a mono-repository. This will speed up development and reduce the amount of extra work with the git. All code will be freely available under the GPLv3 license.

Zipkin

We need to debug the networking between services, so we use the Opentracing standard and take Zipkin as our implementation. He has many ready-made libraries for both Python and Golang.

Search and filter

For full-text search and filtering, we’ll take the ELK stack, namely Elasticsearch and Logstash. At this stage, it’s like shooting a sparrow with a cannon, it was quite possible to organize this functionality on the storage, but:

as a training and demonstration of the capabilities of microservices, this would be a great example;
if people start using the service, then we have already thought about scaling and performance.

To fill Elasticsearch with data, we will configure ETL processes and use Apache Airflow.

Logs

Since we already have Elasticsearch, we will upload the logs of all services there. To track the intersection of business process logs for different services, we will add TraceId to the log, which will remain from Zipkin. The logs will be collected by the Telegraf or FileBeat agent.

Service Discovering and Configuration

For Service Discovering, we use Consul and its DNS server. The logic is as follows: the service refers to another service by its hostname, and Consul will resolve the hostname.

You may also like

The Role of AI in Personalizing User Experience Across Digital Platforms

The Role of AI in Personalizing User Experience Across Digital Platforms

In the ever-evolving landscape of the digital age, the intersection of technology and personal preference has given rise to a...

Cybersecurity in Modern Vehicles: Ensuring Safety in the Digital Age

Cybersecurity in Modern Vehicles: Ensuring Safety in the Digital Age

The integration of digital technology into automotive design has transformed the humble automobile into a nexus of connectivity and innovation....

The Thrills of High Stakes: Inside the World of High Roller Online Casinos

The Thrills of High Stakes: Inside the World of High Roller Online Casinos

When it comes to the world of online casinos, there’s a niche that takes the experience to a whole new...

All the Essentials of Business Plan for a StartupĀ 

All the Essentials of Business Plan for a StartupĀ 

Today, it is difficult to imagine a successful startup that does not have a business plan including all the details....

Back to Top