ReleaseEngineering/Development Best Practices: Difference between revisions

(Created page with "= Language = * Python * JS = Framework = * web: ** flask * db api: ** sqlalchemy * daemons: ** don't manage, use supervisord **")
 
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
canmove, Confirmed users
2,850

edits