EngineeringProductivity/Projects/Conduit/Tech Stack: Difference between revisions
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.