ReleaseEngineering/Development Best Practices

From MozillaWiki
Jump to navigation Jump to search

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