bff项目
一、bff
1. Back-end For Front-end: 服务于前端的后端
可以调用不同的系统的一个或者多个接口进行数据的聚合、过滤,而只向外部暴露一个接口即可
2.优点:
- 前后端彻底分离
- 业务更向前靠拢,琐碎的api由前端开发自己决定
- 留给后端更清晰的服务边界,只需要提供粗粒度的接口即可
3.缺点:
- 响应时间延迟(服务如果是内网之间访问,延迟时间较低)
- 编写起来较为浪费时间(因为在基础服务上添加的一层转发,所以会多写一部分代码)
- 业务异常处理(统一格式化业务异常的返回内容)
4.用到的依赖包:
ioredis koa-body-parser koa-jwt jsonwebtoken pm2 dotenv dotenv-expand等
5.bff 项目目录分析:
- src
- config: 配置文件
- controller: 控制器目录,子文件统一输出一个对象,方法属性中参数为ctx
- curl: 请求器目录,子文件暴露一个基于 bff-frame中Curl类的子类,可以设置请求参数已经响应数据
- middleware: 中间件目录,子文件暴露一个函数,参数为(ctx,next) ,最后一定要调用next(),否则程序停止运行
- service: 服务器目录,子文件暴露一个继承bff-frame中的Service类(其中做了挂载ctx属性的处理)的子类router.js:路由文件,暴露一个函数,参数为app实例,并返回router列表
- index.js: 文件入口
6.实践应用:
-
访问控制
例如,服务中的权限控制,将所有服务中的权限控制集中在 BFF 层,使下层服务更加纯粹和独立。 -
应用缓存
项目中时常存在一些需要缓存的临时数据,此时 BFF 作为业务的汇聚点,距离用户请求最近,遂将该缓存操作放在 BFF 层。 -
第三方入口
在业务中需要与第三交互时,将该交互放在 BFF 层,这样可以只暴露必要信息给第三方,从而便于控制第三方的访问。
二、Redis
Redis 是一个基于内存的高性能key-value非关系型数据库。也是基于内存运行支持持久化的NoSQL数据库,也称为数据结构服务器。
由于 Redis 的所有操作都是在内存中执行的,所以它的执行速度非常快。既然说到在内存执行,有的同学肯定会想到如果机房断电或者故障导致数据丢失怎么办,这方面作者已经想到了,Redis 会通过快照和日志的形式保存到硬盘上,进行持久化。
简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向
redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。
优点
- 速度快:因为数据存在内存中,
- 支持丰富数据类型,支持string(字符串),list(列表),Set(集合)、Sorted Set(有序集合)、Hash(哈希)
缺点
- 数据库容量受到物理内存的限制, 不能用作海量数据的高性能读写, 因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上