服务目前分为两层,一层是 Service 层,提供领域服务。
上面一层是 Web 层,即应用层,包括数据校验、权限校验、文件处理、监控等。
在实际的开发中,我们需要考虑如何给 Web 层附加一些能力。
能力主要包含几个方面:权限集成、重复提交、分布式锁、审计功能。
对于整个通用的服务来讲,我需要考虑链路追踪。
链路追踪从上到下都要进行检测,链路追踪从网关到 Web 到 Service 的所有行为。我们通常使用中间件来集成这种能力,例如 APM、SkyWalking。
第二部分主要是分布式日志收集。
分布式日志收集的主要配置点有两个:
- Maven 依赖
- 在 resource/logback-spring.xml 下配置 grpc-log appender:
分布式日志收集目前采用的是 grpc,会对性能产生一定的影响。
如果不想业务处理的时候上报,可以先打到本地磁盘,然后通过 logstash 完成各个机器的收集和上报,好处是对应用的侵入性低。
Web 应用还需要考虑文件处理。
Web 层是走 HTTP 协议的,前端访问的是一个文件地址,通过 Nginx 直接反向代理给它。
对于 Service 层,不走 HTTP,而是直接走文件流,例如,直接通过 OSS 走文件流读,
在 Web 层会有一个部署操作,这个操作实际上是将文件直接上传给 OSS。
在流程引擎 deploy 的时候,会直接拿到流进行 deploy 操作。
在系统中,我们会写一堆 starter。
例如 oss-starter,为了实现通用性。
oss 通常会选用阿里云、腾讯云,如果自己搭建的话,会选用 MINIO。
这些 OSS 都是走的 S3 (Simple Storage Service,简单存储服务) 协议。
为了避免在多个云平台之间切换导致频繁切换代码,我们需要考虑通过 S3 协议实现一个通用的 OSS 客户端。
这里可以选用如下 POM 工具包:
抽象操作如果不涉及太多的权限管理等操作,会抽象出来一个 OssClient 类。
最终的架构变成下图:
有一套 API,通过这套 API,后面的对接细节完全屏蔽。
包括后面接入 MQ 时,我们可以通过一个 Binder API,后面可以集成 Kafka、RocketMQ。
这种类似设计模式中的门面模式。




