EngineeringProductivity/Projects/Conduit/Tech Stack: Difference between revisions
(→Javascript: mention ES6) |
No edit summary |
||
Line 1: | Line 1: | ||
= Our Technologies = | = Our Technologies = | ||
The following is a non-exhaustive lists of the technologies the team primarily | 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 == | == Programming Languages == |
Revision as of 14:54, 13 July 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.
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.