简短的回答是我们在后端使用Flask for Python,在前端使用Backbone for Javascript,并将我们的数据存储在MongoDB,Redis和ElasticSearch中。我们托管在AWS上。
什么是堆栈?
为您提供网站需要许多技术,并且它们执行各种功能,包括:
- 在浏览器或应用程序中创建页面,对它们进行样式设置(颜色,字体),并使它们具有交互性(例如,当您单击它时将心脏变为红色并显示注释框)。这被称为 前端或客户端
- 收集页面所需的信息(例如问题,答案,用户名和图片,心数),然后将其发送到您的计算机或手机。这被称为 后端或服务器端
- 存储此信息,以便在需要时随时可用,并允许我们准确搜索所需信息。 这称为数据库或数据存储
- 计算机连接到Internet并始终打开,因此任何人都可以随时访问该网站。计算机被调用 服务器 他们是 托管 某处。
- 许多其他关键和次要功能
在每个层面,都有许多好的选择,任何一个团队的选择都取决于团队成员的经验和舒适度,以及成本和特定性能要求等实际问题。
我们(几乎)完整的堆栈
我们团队的成员在我们自己的服务器和笔记本电脑上安装,更新和管理某些技术。他们包括:
- Backbone来组织我们的Javascript
- 指南针重用和组织我们的CSS
- Flask,一个Python框架,用于提供JSON + HTML API并呈现完整的HTML页面
- pyres为我们的任务队列(可能很快芹菜)
- MongoDB存储我们的数据(可能很快就会发布Postgres)
- Redis可以缓存诸如站点周围的提要,趋势问题以及各种使用统计信息之类的内容
- ElasticSearch为搜索提供动力
- Nginx为该网站提供服务
- Grunt缩小,压缩和修改我们的Javascript和CSS
- Capistrano部署我们的应用程序并执行一些其他有用的任务
- Puppet在新服务器上设置我们需要的软件
一些技术是由其他公司建立和管理的服务。让别人专注于特定问题而不是自己做所有事情通常会更有效率。我们使用的一些服务是:
- AWS又称Amazon Web Services来托管我们的服务器,静态资产以及CDN
- 适用于DNS,缓存和某种安全级别的Cloudflare
- Google Analytics和Mixpanel用于分析
- Papertrail用于集中式日志记录
- Sentry用于跟踪客户端错误
- DataDog用于监控我们的服务器和服务
- 用于监控Flask应用程序性能的New Relic
- Customer.io根据您在应用中执行或不执行的操作发送电子邮件
- Github用于代码协作和托管
可能还有很多其他人。
构建和运营网站需要很多工作,但在精心打造的工具的帮助下,并不是那么难!