@
zzzzzzggggggg 上份在北京,也不算小公司,工作时间还行,不怎么加班。
不过受不了小组内 PUA ,我就辞职了。名字就不提了😂。
--
前端做过很多项目比如 DevOps 、测试自动化平台(觉得公司 Java 后端跟云原生整合得一般,我就没做了)、移动端完整商城( Next.js + Ant Design Mobile )、复杂物联网平台(停车场、充电桩、电力系统、水泵)、还有 App 配置平台等等。
之前公司有组件库、Eletron 桌面 App ,我没直接参与。
--
我可以分享下 BFF 的架构,这个项目比较有趣,也可以提供给大家 BFF 设计思路:
1 、公司是微服务 go 架构,所有服务都是 gRPC 通信。这个 BFF 聚合 gRPC 为 GraphQL ,暴露给 web 、小程序、iOS 、Android 等应用统一的网关。大概接入 30 个 domain
2 、BFF 用 NestJS 、Mercurius 、Fastify 做基础,把各个 proto 仓库通过 Git Submodule 引入到 BFF (这步看公司 proto 组织模式,其实这里可用 buf [
https://buf.build/docs/introduction] )。然后用写脚本“净化、统一”下 proto 文件字段(根据自己需求)、编译路径(因为 go 项目 proto 路径跟 node.js 有出入,若不修正路径会出错),然后再用 @
grpc/proto-loader 加载 proto ,就有了 grpc client
3 、我们 fork 了 ts-proto [
https://www.npmjs.com/package/ts-proto] ,直接把上述 Git Submodule 的 proto 自动化编译成 TypeGraphQL 代码,这样就节约了开发成本,同时保留各个 domain 的 proto 的接口注释,TypeGraphQL 代码自带服务、字段注释
(之前手动写 TypeGraphQL 代码,不过后来 domain 太多了手动根本无法维护;这步也可以直接把 ts-proto 编译 proto 出来的 ts interface 用 AST 解析生成 TypeGraphQL 代码)
然后本想提 PR 到官方库,后面就没弄了。取而代之,这里写了点 zx 脚本,剪裁了 ts-proto 编译出来冗余的代码
4 、各个端( web 、小程序、iOS 、Android )可以把 TypeGraphQL 生成的 GraphQL schema 文件直接编译成自己需要的语言的 Client ,完成对 BFF 的接入
5 、我主要负责 0-1:架构设计、文档编写、GitLab CI/CD 代码编写、Argo CD/Rollouts 部署编写、Istio 部分配置、log 处理、Prometheus ( Grafana )和 Sentry 接入、AutoCannon 压测、APQ 与 redis 对 GraphQL 请求缓存、报警
6 、日常大概六个人迭代,我和另外一个负责核心模块,其他四个人主要聚合编写业务模块
--
这个项目也可以用
https://the-guild.dev/graphql/mesh 做,不过当初 GraphQL Mesh 不是很成熟,就没引入