https://github.com/denismakogon/voteapp
Voting app serverless demo
https://github.com/denismakogon/voteapp
distributed functions functions-as-a-service golang python3 serverless
Last synced: about 2 months ago
JSON representation
Voting app serverless demo
- Host: GitHub
- URL: https://github.com/denismakogon/voteapp
- Owner: denismakogon
- License: apache-2.0
- Created: 2016-12-15T08:58:38.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-08-24T22:35:57.000Z (almost 9 years ago)
- Last Synced: 2025-04-06T01:28:03.452Z (about 1 year ago)
- Topics: distributed, functions, functions-as-a-service, golang, python3, serverless
- Language: Python
- Homepage:
- Size: 159 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
Cats versus Dogs vote app
=========================
Architecture
------------
Current architecture includes 4 major components. Two of the are daemons::
PostgreSQL 9.5
VotingApp
Two of them are functions containers::
denismakogon/vote-task
denismakogon/result-task
Execution flow
--------------
When user votes (sends HTTP Post) VoteApp HTTP route handler triggers asynchronous voting function,
this function saves user's vote to persistent storage - PostgreSQL.
Once user wants to retrieve get voting results (sends HTTP Get) VoteApp HTTP route handler
triggers synchronous resulting function to retrieve voting statistics.
Building function images
------------------------
You can build your own images from given functions, but you are feel free to use pre-built and uploaded to DockerHub images::
denismakogon/vote-task
denismakogon/result-task
Running PostgreSQL container
----------------------------
Personally recommend to use `this PG image`_ because it has 1M+ pulls.
Use following commands to start PG container::
docker pull sameersbn/postgresql:latest
docker run --name postgresql -d -p 0.0.0.0:5432:5432 --env-file voteapp/voteapp.env sameersbn/postgresql:latest
VoteApp configuration
---------------------
VoteApp depends on big set of parameters like::
API host
API port
PostgreSQL host
PostgreSQL user/password
PostgreSQL database
Not all of them are mandatory, almost all parameter can be applied as operating system environment variables::
VOTEAPP_HOST stands for --host
VOTEAPP_POST stands for --port
PG_HOST stands for --pg-host
DB_USER stands for --pg-username
DB_PASS stands for --pg-password
DB_NAME stands for --pg-db
APP_NAME stands for --app-name
Not all of them are defined with default values, that is why there are only several of them are required, for our particular case::
VOTEAPP_HOST
VOTEAPP_PORT
are not required because they were defined with default values.
VoteApp is identified by single Python module **app.py** that is CLI tool to start a web service::
Usage: app.py [OPTIONS]
Options:
--host TEXT API service host.
--port INTEGER API service port.
--pg-host TEXT PostgreSQL connection host.
--pg-username TEXT VoteApp PostgreSQL user.
--pg-password TEXT VoteApp PostgreSQL user password.
--pg-db TEXT VoteApp PostgreSQL connection.
--app-name TEXT Existing Picasso app name
--help Show this message and exit.
Building VoteApp container
--------------------------
In order to simplify VoteApp usage, i recommend to build a container from it, corresponding Dockerfile included.
Also there's a file - voteapp.env, you should be aware that it's a sample file, because it is required to adjust a lot parameters there like::
VoteApp daemon configuration
PosgreSQL configuration
Once env file is ready use following command to build a container::
docker build -t voteapp .
To start a container::
docker run --name voteapp -d -p 0.0.0.0:11111:9999 --env-file voteapp.env voteapp
Or you can use pre-built container::
denismakogon/voteapp
To pull container::
docker pull denismakogon/voteapp
To start container::
docker run --name voteapp -d -p 0.0.0.0:11111:9999 --env-file voteapp.env denismakogon/voteapp
.. _this PG image: https://hub.docker.com/_/postgres/