go-link-shortener-backend, v1.8
Posted on

Back-end of the service for shorting links.
Adding transformations of values received from a distributed counter, refactoring and adding bulky testing.
Change Log
- adding transformations of values received from a distributed counter:
- using linear transformations:
- multiplication;
- shift;
- using linear transformations:
- removing:
- generating link codes:
- removing using a version 4 UUID;
- using sequential counters:
- removing formatting a counter as an integer number in the 10 base;
- generating link codes:
- refactoring:
- extracting the
counterspackage:- moving the
generators.chunkedCounterstructure to thecounters.ChunkedCounterstructure; - extracting the
counters.CounterGroupstructure from thegenerators.DistributedGeneratorstructure;
- moving the
- using external packages:
- extracting the
- testing:
- bulky testing:
- adding a bulky test of the
generators.DistributedGeneratorstructure; - adding an integration bulky test of link creating;
- adding a bulky test of the
- Travis CI configuration:
- using data race detection;
- using the dep tool;
- bulky testing:
- improving repository decor:
- adding the change log.
Features
- RESTful API:
- link model:
- creating by an URL;
- getting by a code;
- representing in a JSON:
- payloads:
- of requests;
- of responses;
- errors;
- payloads:
- link model:
- generating link codes:
- using sequential counters:
- formatting:
- formatting a counter as an integer number in the 62 base;
- storing:
- storing in a database only counters chunks;
- storing counters themselves in memory;
- sharding:
- sharding counters chunks;
- selecting a shard of a counter chunk at random;
- formatting:
- using sequential counters:
- server:
- additional routing:
- redirecting to the link URL by its code;
- serving static files;
- storing settings in environment variables;
- supporting graceful shutdown;
- logging:
- logging requests;
- logging errors;
- panics:
- recovering on panics;
- logging of panics;
- additional routing:
- databases:
- distributing:
- Docker image;
- Docker Compose configuration.
Usage
$ go-link-shortener
Environment variables:
SERVER_ADDRESS— server URI (default::8080);SERVER_STATIC_PATH— path to the project's front-end (default:./static);CACHE_ADDRESS— Redis connection URI (default:localhost:6379);CACHE_TTL_CODE— time to live of links in Redis, stored by their code (e.g.72h3m0.5s; default:1h);CACHE_TTL_URL— time to live of links in Redis, stored by their URL (e.g.72h3m0.5s; default:1h);STORAGE_ADDRESS— MongoDB connection URI (default:mongodb://localhost:27017);COUNTER_ADDRESS— etcd connection URI (default:localhost:2379);COUNTER_COUNT— count of distributed counters (default:2);COUNTER_CHUNK— step of a distributed counter (default:1000);COUNTER_RANGE— range of a distributed counter (default:1000000000).
Repository
Link: https://github.com/thewizardplusplus/go-link-shortener-backend/tree/v1.8.
Content: code.
License: MIT.