ReleaseEngineering/Development Best Practices: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(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

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