canmove, Confirmed users
2,850
edits
ChrisCooper (talk | contribs) (Created page with "= Language = * Python * JS = Framework = * web: ** flask * db api: ** sqlalchemy * daemons: ** don't manage, use supervisord **") |
ChrisCooper (talk | contribs) |
||
Line 10: | Line 10: | ||
* daemons: | * daemons: | ||
** don't manage, use supervisord | ** don't manage, use supervisord | ||
** | ** '''not''' async if you can help it | ||
*** shell out to celery | |||
** tasks: ? | |||
** general: | |||
*** requests | |||
= Resiliency = | |||
* retry everything, fail gently | |||
* no in-memory state (including call stack) | |||
* support multiple endpoints (db, redis, rabbitmq, etc) [e.g. no single-point-of-failure] | |||
* sync + caching, you have slightly stale data but still keep running if the service you need to query is down | |||
* run multiple copies of the app at once without conflicts | |||
= Deployment = | |||
* db: | |||
** clustered mysql - innodb vs myisam. | |||
** nosql - redis | |||
* mq: | |||
** rabbitmq | |||
* logging: | |||
** log to stdout (use python logging) | |||
* use supervisord | |||
* deploy python packages | |||
* semantic versioning (semver.org) | |||
= Auth = | |||
= Documentation = | |||
= Security = | |||
* passwords | |||
* secrets | |||
= Performance = | |||
* multi-threading | |||
* scalability | |||
* configuration |