axetroy / blog

:open_book:基于Github API 的动态博客
https://axetroy.xyz
216 stars 36 forks source link

前端仔的后端进击之路 #104

Open axetroy opened 7 years ago

axetroy commented 7 years ago

之前一直写前端应用,一直没有机会真正的写后端(有也是小打小闹,写后后端博客)。

但也在最近两个月。项目需要,开始真正的后端的,踩了很多坑,总结下来。

技术选型

开发语言

  1. Typescript

    Typescript是第一个考虑的,根本就没考虑过Javascript。 因为设计到金融,必须要强类型,才能确保Bug在开发阶段就能被发现。Flow这种polyfill不在考虑当中。 而且Typescript也能很好的沿用npm社区的海量包库

  2. Javascript

没有类型检查,总是用着不放心

  1. Dart

很棒的语言,但是社区不丰富,没有graphql的实现

Web框架

可选的框架有:

  1. Express

老牌/稳定的web框架,社区丰富,中间件多。这些都是其次,重要的是: 稳定

  1. Koa

新一代的web框架, 之前TJ大神引导的。需要nodejs@8支持,koa2之后支持async await 但是对于我使用Typescript来说,async await都不是事

  1. Egg

阿里团队,基于koa框架的企业型框架. 社区不活跃,内容不丰富,关键是害怕是kpi项目,后期不再维护(虽然开发人员已经在知乎说了很多次,阿里内部也在使用)

  1. Nest

基于Typescript的框架,概念,以及路由定义, 第一印象是很棒。 但是缺点就是社区不活跃,中间件不够丰富,而且主要是开发graphql接口,用不到怎么定义路由 所以就暂时搁置,没有用

数据库

  1. Mongodb

因为之前接触的就是mongodb,简单易容,无关系型,所以简单上手就直接用了。

这就涉及到其中的一些坑了:

  1. Postgres

项目也是进行到一些,果断换了数据库,据说postgres坑比较少,支持多种类型,字段校验,事务,隔离,而且gui支持不错,有pgadmin,所以就它了。

然后选用的关系型数据库ORM,选用了一个star最高,并且社区还算活跃的sequelize。

然后使用下来的心得就是: 坑多.

踩坑

RPC

RPC采用thift,但是thrift的官方库不支持SSL重连,意味着如果RPC的提供者端口如果断开连接,是不会重连的。RPC接口一直报错..

解决方法:

自己维护连接池,自动重连功能...

定时任务

定时任务有缺陷,如果定时任务很频繁。会导致数据库连接一直没有可以释放,从而导致死锁。

因为定时任务不会等待上一个任务结束之后才开始。

解决办法:

业务代码内启动无限循环,执行业务代码,然后等待上一个任务完成之后,才进行下一个任务。

开机自启动

部署使用pm2部署集群,设置开机自启动

pm2 start pm2.json
pm2 save
pm2 startup

总结:

Typescript是必备,后悔没有用基于Typescript的ORM,typeorm。 自己构建的项目也是有很多重复的代码,曾经也很纠结要不要用webpack打包起来,但是想想打包其他之后,线上的堆栈信息报错不方便查找问题,而且涉及到一些C++模块无法打包,一些镜头资源无法加载的问题..

plh97 commented 7 years ago

我了个去,原来你的博客数据都保存在GitHub的issue里面,,,不知道这是不是属于serverless的概念

plh97 commented 7 years ago

那么在博客页面是不是可以写评论,然后直接调用github的commit接口

axetroy commented 7 years ago

@pengliheng 我的站点 axetroy.xyz 里面的数据,全部来源于Github。 想做的就是serverless,然后又不需要常规的发布/编辑文章那一套,也不要Hexo那一套。 Github就很适合我

axetroy commented 7 years ago

评论这一块,在博客里面不支持直接评论, 但是会显示评论。评论的话因为要oauth认证,需要一个中间服务器(可以搭建的heroku上)。之前有做过,而且还做了差不多。可以在博客里面通过Github登陆,然后评论。

但是后面又不做了,有点繁琐

axetroy commented 7 years ago

@pengliheng issues还可以做很多事,比如规定合适的模板,解析出你想要的数据。

比如这里 http://axetroy.xyz/#/case

数据存放在这里 https://github.com/axetroy/showcase/issues

通过特定的格式去解析

plh97 commented 7 years ago

所以,如果需要一个新的模板,就又要重新建一个github仓库

axetroy commented 7 years ago

@pengliheng 这都不是事

.github文件夹里面定义issues模板

创建issues的时候,就是那个固定的模板了

你可以创建类似这样的模板

Author: axetroy
Date: 2017-11-19T13:31:04.335Z
Category: React

<-- content-start -->
这里是文章内容
<-- content-end -->

然后再前端解析这段模板,再渲染页面