加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

创建一家互联网公司需要几个人?一个就够了

发布时间:2019-10-08 20:00:36 所属栏目:移动互联 来源:机器之心编译
导读:创建一个互联网公司需要几个人?一位来自旧金山的软件工程师告诉我们:一个就够了。这位工程师创建了一个名为「Listen Notes」的播客搜索引擎,像谷歌一样可以方便地搜索海量播客资源。在这篇文章中,这位工程师向我们介绍了他创建「Listen Notes」用到的

主要数据存储是 PostgreSQL,我有多年开发和运营经验——经过测试的技术很完善,所以我晚上能睡得着觉。Redis 用于缓存、统计数据等多个地方。Elasticsearch 用来索引播客和剧集并提供搜索查询,就像大多数无聊的企业一样。

Celery 用于离线处理。而 Celery Beat 用于调度任务,类似于 Cron 作业,但性能更佳。如果将来 Listen Notes 越来越受欢迎并且 Celery&Beat 导致一些扩展问题,我可能会转向我为前雇主做的两个项目:ndkale 和 ndscheduler。

Supervisord 用于每台服务器上的进程管理。

那 Docker / Kubernetes / serverless 怎么样?不。随着经验积累,你就会知道什么时候不要过度设计。实际上,我在 2014 年为我的前雇主做过一些早期的 Docker 工作,这对于一家市值十亿美元的中等规模创业公司来说是件好事,但对于一个小型创业公司来说可能有点「大炮打蚊子」了。

前端

网页前端主要使用 React+Redux+Webpack+ES。这是非常标准的。在部署到生产时,JS 包将上传到 Amazon S3 并通过 CloudFront 提供服务。

在 ListenNotes.com 上,大多数网页都是半服务器端呈现(Django 模板)和半客户端呈现(React)。服务器端呈现部分提供网页的样板,客户端呈现部分基本上是交互式网页应用程序。但是一些网页完全通过服务器端呈现,因为我的懒惰使事情变得完美以及出现一些潜在的 SEO 优势。

音频播放器

我使用了一个经过大量修改的 react-media-player 在 ListenNotes.com 上构建音频播放器,该播放器应用在 Listen Notes 网站、Twitter 嵌入式播放器和第三方网站上的嵌入式播放器中:

创建一家互联网公司需要几个人?一个就够了

第三方网站上的嵌入式播放器。

播客 API

我们为开发人员提供简单可靠的播客 API。构建 API 类似于构建网站。在后端使用相同的 Django/Python 堆栈,前端使用相同的 ReactJs(例如 API Dashboard、文档......)。

创建一家互联网公司需要几个人?一个就够了

ListenNotes 的 API dashboard。

创建一家互联网公司需要几个人?一个就够了

ListenNotes 的 API 文档。

对于 API,我们需要追踪用户在当前计费周期中使用的请求数量,并在周期结束时收取费用。不难想象,Redis 在这里被大量使用:)

DevOps

机器配置和代码部署

我使用 Ansible 进行机器配置。基本上,我写了一堆 yaml 文件来指定需要什么类型的服务器、什么配置文件和什么软件。我可以用所有正确的配置文件和软件启动一个服务器,并通过「一键安装」完成安装。这是 Ansible yaml 文件的目录结构:

创建一家互联网公司需要几个人?一个就够了

我可以在命名方面做得更好。但现在已经足够好了。

我还使用 Ansible 将代码部署到生产环境中。基本上,我有一个在 macOS 上运行的打包脚本 deploy.sh:

  1. ./deploy.sh production HEAD web  

deploy.sh 脚本有三个参数:

  • 环境:生产或分段;
  • listennotes repo 版本:HEAD 表示「仅部署最新版本」。如果指定了 git commit 的 SHA,那么它将部署特定版本的代码——当我需要从错误的部署撤回时,这特别有用;
  • 服务器类型:web、worker、api 或所有服务器。我不必一次部署到所有服务器。有时我会对 Javascript 代码进行修改,然后我只需要部署到 Web,而无需涉及 api 或 worker。

部署过程主要由 Ansible yaml 文件制定,当然,它很简单:

  • 在 Macbook Pro 上,如果要部署到 Web 服务器,则构建 Javascript 包并上传到 S3;
  • 在目标服务器上,git 将 listennotes repo 克隆到一个以时间戳命名的文件夹,检查特定版本,然后安装新的 Python 依赖项(如果有的话);
  • 在目标服务器上,将符号链接切换到上述时间戳命名文件夹,并通过 supervisorctl 重新启动服务器。

我不使用那些花哨的 CI 工具。实际的操作非常简易。

监控和警报

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读