EngineeringProductivity/Projects/Conduit/Tech Stack: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
(Add link to doc about why we ran a trial of uWSGI)
Line 43: Line 43:
=== uWSGI ===
=== uWSGI ===


uWSGI is our preferred WSGI server/gateway.
uWSGI is our preferred WSGI server/gateway. ([https://docs.google.com/document/d/1N60ho1Dz10EclwE72cLkcBa25h3JQHa1L82Sa8PZ-YM/edit?usp=sharing Here's why we chose this.])


=== PostgreSQL ===
=== PostgreSQL ===

Revision as of 18:43, 17 August 2017

Our Technologies

The following is a non-exhaustive lists of the technologies the team primarily chooses to use. When developing a new system, especially under tight time constraints, it is a good idea to stick with these technologies.

Programming Languages

Python (3.5+)

Python is our team's primary programming language. It is a versatile language which is both easy to learn and powerful. Much of our team's previously developed software is built with Python.

Python 3 is the preferred version as it is the future of Python development and most libraries are compatible.

Notes:

  • Python has good enough performance for most tasks and is adequate until measurements show otherwise.
  • There are many existing Python services interacting with Mozilla's various systems, which may serve as examples.

The following is a set of python libraries commonly used by our team (It's best to have a concrete reason when considering an alternative library that is not listed here):

  • click
  • connexion
  • Django
  • Flask
  • Kombu
  • pytest
  • requests
  • SQLalchemy

Python (2.7.x)

Python 2 is used where version 3 is inappropriate. This includes the following locations:

  • Mercurial extensions (mercurial's python 3 support is incomplete 2017-06-16)
  • Scripts packaged with the Firefox build environment
  • Modifications to existing systems built with Python 2

Javascript

Javascript (ES6) is used by our team for building client side web applications.

Supporting Services

uWSGI

uWSGI is our preferred WSGI server/gateway. (Here's why we chose this.)

PostgreSQL

PostgreSQL is our preferred database.

Notes:

  • Traditional RDBMS' are well understood by our development team
  • Our operations team is more experienced with SQL systems vs newer NOSQL databases
  • PostgreSQL can fulfill a similar role to NOSQL databases using the built-in JSON data types.
  • There are mature libraries and tools for working with PostgreSQL
  • Performance characteristics are well understood and adequate

Redis

Redis is the preferred choice for in-memory storage of data. It performs comparably with memcached in traditional caching scenarios but also supports more powerful data types.

Redis is also suitable as a persistent data store when configured correctly. This is at the expense of some performance, but may be used as such where it makes sense.

Amazon SNS/SQS

Amazon's notification and messaging services are the preferred choice when a reliable internal message queue is required.

RabbitMQ (Mozilla's Pulse)

Messages which are relevant to a wider audience may be published to Mozilla's Pulse service. While it is possible to use Pulse for non-sensitive internal messages, Amazon SNS/SQS is preferred.

Conceptual Choices

OpenAPI (Swagger)

RESTful