![38d02080468183211172ce8533ad6527.gif](https://i-blog.csdnimg.cn/blog_migrate/c58250b976e490d3054b70f6e7330637.gif)
本文首发于知乎,大家可以通过文章底部的
项目背景
小编我在国内某知名互联网(非一线)做前端开发,平时做NodeJS比较多,所以负责BFF和服务端的事情也不较多。
前些日子,我所在的Team接到了一个“大活儿”,为我们公司某个服务(出于保密的原因,这里不能直说)做数据可视化及数据分析平台。
与数据生产方(服务维护方)沟通几轮后,我了解到了本次的后端服务有几大挑战:
全栈开发:本项目在数据生产完成之后,所有工作都要由我们前端组独立完成,包括前端页面、后端服务、数据加工等等
数据量庞大:原始数据的日增量过亿,如果赶上运营活动数据量可能还会翻倍
实时展示:我们希望为用户提供实时的数据展示,如此大的数据量要做到实时绝非易事
权限认证:该服务的所有数据都是有安全性要求,除了最基础的登录校验,不同业务线也只能查看自身业务线的数据
项目准备
我们对接的服务维护方可以为我们提供的是 将所有实时数据落到clickhouse
(一种适合大数据存储分析的数据库)中,除实时数据外,还有小时级别的聚合数据(维度是各业务单元)。
也就是说,每个业务线在该服务上产生的数据会每小时做一个聚合并落到另一张表(包括:小时内的总计、平均值、uv均值、pv总值等等)。
剩下的事情就要靠我们几位前端同学搞定了。
技术选型
后端当然是用NodeJS写,毕竟我们是前端开发,选择NodeJS是理所当然的。
但是基于NodeJS的http server框架该选什么?目前市面上三个比较被大家熟知的有3个。
Express和Koa、EggJS
Express
本人用了多年,做过两个运行多年的大型项目,但事实上用的很痛苦。每次的请求实例都是通过参数一层层传递的,所有错误也要一层层传递出来。用起来很不爽,急需寻找改变。Koa
是Express
原班人马打造的, 从根源上做解决了Express的很多痛点,但是我需要一个更适合企业级应用的框架
EggJS——最终选择
EggJS
成为了最终的选择,我觉得Egg有如下的优势:
多环境配置,作为企业应用,我们会有多个环境——测试环境、stage环境、生产环境,每个环境下的应用所连接底层服务的参数、配置信息都是不一样的。EggJS可以通过启动时注入环境变量来加载不同的配置文件,并且挂在到context上,应用代码根本不用关心环境的差异,多环境问题轻松解决。
系统稳定性,使用Express和Koa的话,为了