半路雨歌

【他说风雨中这点痛算什么,擦干泪不要怕,至少我们还有梦,至少我们还可以歌唱】

一般项目都集成了 Swagger 来提供接口文档,项目一多,前端开发人员就需分别记录各个项目的接口文档地址,不便于统一管理与维护。 YApi(开源地址: https://github.com/YMFE/yapi) 提供了一个统一的接口管理服务,基于 YApi,开发者可以轻松创建、发布、维护与调试 API, 同时提供了定时从 Swagger 地址同步接口的功能。 本文介绍采用 Docker 部署 YApi 服务,及其基本使用。

权限管理是每个项目必备的功能,只是各自要求的复杂程度不同,简单的项目可能一个 Filter 或 Interceptor 就解决了,复杂一点的就可能会引入安全框架,如 Shiro, Spring Security 等。
其中 Spring Security 因其涉及的流程、类过多,看起来比较复杂难懂而被诟病。但如果能捋清其中的关键环节、关键类,Spring Security 其实也没有传说中那么复杂。本文结合脚手架框架的权限管理实现(jboost-auth 模块),对 Spring Security 的认证、授权机制进行深入分析。

现在很多 Web 项目,包括普通的前后端分离项目,微服务项目,都基于 Spring Boot 搭建,项目中一般需要包含一些通用的特性或功能,如统一异常处理、切面日志功能、权限管理功能等。写一个自己的脚手架,对一些基本规范、基础功能进行沉淀,基于此可只需要关注业务实现,提高开发效率。

目前整个脚手架包含三部分:

  1. 基础组件:对单个项目(服务)的一些基本特性、功能等进行封装,便于复用,或达到常说的“开箱即用”
  2. Spring Boot 单体项目脚手架:基于基础组件,提供常见的一些基础通用功能实现的单体项目框架,如权限管理,提供前后端分离的后端 Spring Boot 项目与前端 Vue 项目
  3. Spring Cloud(包含 Spring Cloud Alibaba)微服务项目框架:基于基础组件,提供微服务框架的基础组件与功能实现,如网关(Spring Cloud Gateway),服务注册中心与配置管理(Nacos),服务限流降级(Sentinel),统一权限管理(Spring Security Oauth2)等。

本项目还在持续完善中,本篇为基础组件介绍。

使用 Spring Cloud Config 我们可以实现配置的集中化管理,但 Spring Cloud Config 如果要实现配置的动态更新, 则需要借助 Spring Cloud Bus(参考 Spring Cloud(八):使用Spring Cloud Bus来实现配置动态更新)。 Nacos 不仅可作为服务注册中心,同时还可以作为配置的集中化管理中心,且其自身默认就支持动态更新,集成非常方便。

在以前的文章中,曾经提过“技术人员的价值,不在于你能写出多么优美的代码,也不在于你能设计出一个多么大而全的高屋建瓴的架构,而在于你实实在在的解决问题的能力,在于你使用技术手段服务于业务的能力”。

最近一段时间,因工作中遇到一些现象,让我重又想起这句话,并且试图思考如何来提高解决问题的能力,有没有一种方法论的手段或者技术性的框架来实践?

日志是应用服务运行过程中的一个关键环节,借助日志,我们可以排查定位问题,也可以借助集中化的日志管理平台(如ELK)来做一些必要的数据统计分析与监控告警。在 K8s 环境中,容器的日志有可能是通过 STDOUT/STDERR 输出(对于标准输出,前面 Docker笔记(十三):容器日志采集实践 有相关介绍可参考),并且一般也推荐将日志写到标准输出,但是也有一些特殊的场景,应用直接将日志写在容器内部的日志文件。对于容器的标准输出日志来说,Docker Engine 本身就提供了一个很好的日志采集能力,但是对于容器内部的文件日志采集,现在却并没有一个很好的工具能够去动态发现采集。因为在分布式的容器集群中,容器随着 Pod 调度被动态创建或删除,我们无法像虚拟机环境那样事先配置好日志采集路径等信息,目前的采集工具都是需要我们事先手动配置好日志采集方式和路径等信息,它无法自动感知到容器的生命周期变化或者动态漂移(一个 Pod 挂了,可能是在另一个节点上启动一个新的 Pod),无法进行动态的配置。因此,在 K8s 中进行日志采集将变得更为复杂。