专栏名称: 算法与数学之美
从生活中挖掘数学之美,在实践中体验算法之奇,魅力旅程,从此开始!
目录
相关文章推荐
九章算法  ·  6月LeetCode刷题小分队正式开始啦:刷 ... ·  17 小时前  
九章算法  ·  Meta猛发offer!杀疯了! ·  17 小时前  
算法爱好者  ·  7000 万年薪!挖 AI 领军大牛! ·  昨天  
九章算法  ·  FAANG资深面试官,为你解决找工/面试难题! ·  2 天前  
51好读  ›  专栏  ›  算法与数学之美

湾区日报是如何运作的?

算法与数学之美  · 公众号  · 算法  · 2017-03-12 21:34

正文

请到「今天看啥」查看全文


网站与后台架构

2014年8月份,湾区日报只是处于”闹着玩”的阶段,没有严肃要做的意思。所以那个时期的湾区日报网站只是一些静态网页,用 Pelican 生成的。


之后的网站换成了 Wordpress。换了几个不同的主题。甚至还花了些钱买了 Product Hunt 的主题。


到了2015年3月份的某个周末,我也不知道哪根筋接错了,就宅在家里一天,从头写了现在的这个网站。主要用 Python/Django,Celery,RabbitMQ 以及 Postgres 搭建的。


为什么用Django?为什么能在一天做一个网站?很简单,我在过去两三年自己写了大大小小10几个 Web App,都是写着玩的 side project,都是用 Django/Postgres 搭建的 ,只是一个套路而已。将自己以前写的代码复制粘贴,当然可以很快拼凑一个网站出来了。


所有网站基本都能简化成这个架构:Web App,Database,Async Worker,Task Queue,以及 Scheduler。其中,Web App就是跑网站代码接受用户的访问请求,所有耗时间的task(比如发邮件,发微博,数据统计等)都扔到Task Queue上,然后Async Worker从Task Queue抓task过来离线处理;而Scheduler就是定时跑程序,很多网站直接用的Cron。


对于湾区日报,Web App就是Django App,用uwsgi跑N个进程,用supervisord 来管理进程,前面挂一个 nginx 当 load balancer。Database用的是Postgres。Task Queue是用RabbitMQ。Scheduler用的是Celery Beat。而Async Worker是Celery。下图是湾区日报后台简单的架构:

湾区日报的所有这些后台的大大小小20几个进程是跑在3台 DigitalOcean 的虚拟机上(每个月花$40多)。按照访问量的增长速度,这样的架构估计至少可以支撑到2020年。当然,我在这3台虚拟机上也跑了其他的 side project,也不算浪费计算资源。


iOS App

2015年5月份的时候,用了一个周末写了 iOS App。完完全全用 Swift 写的,很不错的体验。前面说了,这只是一个 side project,所以期望不高,我是可以厚着脸皮上线质量低劣的一个周末写的 app 的,反正也没什么人用,以后慢慢改进就是了。


后台的 Api 也是 Django App(抽象出一些通用的内部 api 与网站共用),也是跑了 个 uwsgi 进程然后用 nginx 做 load balancer。

在开发第一版 App 的那个周末,除了完成基本的功能(浏览文章)外,还加入:


  • Crash report(用 Crashlytics),第一时间通知我用户的 app crash 了,方便我调试;

  • Google Anlytics,监测用户使用 app 的情况,比如多少人在线,哪个页面比较多人访问,哪个按钮比较多人点击等;

  • Appirater,提醒那些使用了几次 App 的用户去 App Store 给个好评;

  • PSUpdateApp,提醒用户有新版本了,快及时更新。


这些都只是套路而已。尽管不是 iOS 开发人员,但至少要有这么一个意识。上线一个产品,最基本的东西都要有:收集 metrics,收集 crash 的信息,更新提醒等 --开始做 app 之前有跟同事打听了一下应该用哪些工具,少走了不少弯路。详见这篇博文:两天四夜上线一个 App


发布系统

湾区日报这个博客有很多推送的渠道。现代博客与10年前的博客不同:10年前的博客就是一个网站,而现代的博客形式多样,同一份内容会以不同的形式通过不同的渠道出现在读者面前。


前面介绍到我用 Slack 与机器人对话。这机器人就是 Hubot -- 它解析我发出的命令,然后调用我在 Django App 里提供的 REST api 发布文章;当文章的状态由 pending 变成 published后,将触发一些 Celery tasks;每个 task 负责一个渠道的发布任务,比如一个task发布到微博,一个task发布到reddit等。


微博:调用微博 api 发布。凡是微博的帖子底部有 “来自 湾区日报BayArea” 字样的,都是由发布系统自动发布的。







请到「今天看啥」查看全文