Skip to content

Server-side project of Font2svg, written in Python.

License

Notifications You must be signed in to change notification settings

font2svg/font2svg-api

Repository files navigation

Release GitHub Release Docker Image Size License

Font2svg Api

Font2svg server-side project, written in Python. (ETA: 2024Q2)

Getting started

Docker run

The following command will start a simplest stateless instance of Font2svg api listening on the default port of 8000.

$ docker run -d --name font2svg-api font2svg/font2svg-api:latest

If all goes well, you'll be able to access your font2svg api on http://localhost:8000 and http://localhost:8000/docs to access api docs.

Notice that this is only for demo or testing because any fonts uploaded will be lost once the container stops running. If you want to persist your data, you should add a volume as shown below.

Full configuration

$ docker run -d --name font2svg-api \
        # Secret token for admin operations
        -e ADMIN_TOKEN=your_admin_token \
        # Enable or disable cache, default: true
        -e CACHE__ENABLED=true \
        # If true, svg file will be cached, default: true
        -e CACHE__PERSISTENT=true \
        # Maximum number of characters in memory cache
        -e CACHE__MEM_CHARS_LIMIT=10000 \
        -v /path/to/font2svg:/var/lib/font2svg/data \
        -v /path/to/font2svg/logs:/var/lib/font2svg/logs \
        -p 8000:8000 \
        font2svg/font2svg-api:latest

Docker compose

services:
  font2svg-api:
    container_name: font2svg-api
    image: font2svg/font2svg-api:latest
    restart: always
    ports:
      - 8000:8000
    environment:
      # Secret token for admin operations
      ADMIN_TOKEN: your_admin_token
      # Enable or disable cache, default: true
      CACHE__ENABLED: true
      # If true, svg file will be cached, default: true
      CACHE__PERSISTENT: true
      # Maximum number of characters in memory cache
      CACHE__MEM_CHARS_LIMIT: 10000
    volumes:
      - /path/to/font2svg:/var/lib/font2svg/data
      - /path/to/font2svg/logs:/var/lib/font2svg/logs

Benchmark

Using uvicorn[standard] for better performance. See: Run a Server Manually - Uvicorn

By adding the standard, Uvicorn will install and use some recommended extra dependencies.

That including uvloop, the high-performance drop-in replacement for asyncio, that provides the big concurrency performance boost.

Using ApacheBench for running benchmark.

Commands:

# Run benchmark app
$ uvicorn src.benchmark:app --log-level critical

# Cache off
ab -n 5000 -c 100 -l http://127.0.0.1:8000/benchmark/cache_off

# File cache hit
ab -n 5000 -c 100 -l http://127.0.0.1:8000/benchmark/cache_file

# Memory cache hit
ab -n 5000 -c 100 -l http://127.0.0.1:8000/benchmark/cache_mem

# Baseline
ab -n 5000 -c 100 -l http://127.0.0.1:8000/benchmark/baseline

Platform info:

Device: Apple MacBook Pro(13-inch, M1, 2020)

Chip: Apple M1

Memory: 16GB

System: macOS Sonoma 14.3.1 (23D60)

Results (single worker process):

RPS(QPS) concurrency=1 concurrency=10 concurrency=100
Cache off 198.95 145.44 139.51
File cache hit 4043.38 5477.92 5555.66
Memory cache hit 4425.27 7573.39 7892.01
Baseline 4646.00 8177.52 8528.67

Details:

See benchmarks

License

MIT License © 2022 Bean Deng