ReleaseEngineering/Development Best Practices: Difference between revisions
Jump to navigation
Jump to search
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 | |||
Revision as of 22:36, 18 November 2013
Language
- Python
- JS
Framework
- web:
- flask
- db api:
- sqlalchemy
- daemons:
- 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