零碎知识点
日志
slfj外观框架,有多种实现
类型
控制台日志
访问日志
通过 Filter 过滤器 通过 Spring MVC HandlerInterceptor 处理器过滤器 通过 Spring AOP 切面
相关配置
日志文件
默认情况下,Spring Boot 日志只会打印到控制台。所以需要通过 logging.file.path 或 logging.file.name 配置项来设置。不过要注意,这两者是二选一,并不是共同作用。 日志级别
logging.level.* 配置项,设置自定义的日志级别。Spring Boot 定义的日志级别为 TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF。默认情况下,控制台和日志文件的日志级别 INFO。即,INFO、WARN、ERROR 级别的日志,都会记录到控制台和日志文件中。 颜色输出
正常,不同的环境下,日志配置可能存在差异性
在开发环境下,无需日志文件,只需要打印日志到控制台。同时,使用 DEBUG 级别的日志级别,打印更多的日志,以便排查问题。 在生产环境下,需要日志文件,可选打印日志到控制台。同时,使用 INFO 级别的日志级别,毕竟生产环境下访问量比较大,日志量会很大。
敏感词相关开源
脱敏工具
正则
idea插件
序列化
Protocol Buffers
protostuff
- 一个 Java 序列化库,内置支持向前向后兼容性(模式演变)和验证
- 特点
- 高效,无论是速度还是内存
- 灵活,支持可插拔格式
Kryo
Java 对象序列化框架 快速高效的 Java 对象图形序列化框架,主要特点是性能、高效和易用。该项目用来序列化对象到文件、数据库或者网络
FST
MessagePack
基于二进制高效的对象序列化类库,可用于跨语言通信 可以像 JSON 那样,在许多种语言之间交换结构对象;但是它比 JSON 更快速也更轻巧 支持 Python、Ruby、Java、C/C++ 等众多语言。 比 Google Protocol Buffers 还要快 4 倍
FlatBuffers
是一个 Java 的序列化库,用于游戏和其他内存受限的应用
fastjson
Jackson
Gson
Java 的 JSON 类库 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库,可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
jfire-codejson
hessian
Resin 的二进制 Web 服务 和其他 Web 服务的实现框架不同的是,Hessian 是一个使用二进制 Web 服务协议的框架,它的好处在于免除了一大堆附加的 API 包,例如 XML 的处理之类的 jar 包,这也就是为什么说它是一个轻量级的 Web 服务实现框架的原因,这个原因还在于手机上的应用程序可以通过 Hessian 提供的 API 很方便的访问 Hessian 的 Web 服务。
hessian2
dubbo默认的序列化方式,目前相关资料比较少,可能只能看dubbo的序列化模块里面的源码 跨语言
加解密插件
Spring Crypto Utils
旨在提供纯 Java 的加密 API,用来简化公私钥和证书存储、对称和非对称加密方法的封装,可方便的跟 Spring 框架进行集成。
OpenSSL
加密程序库
包含一个命令行工具用来完成 OpenSSL 库中的所有功能,更好的是,它可能已经安装到你的系统中了。
是一个强大的安全套接字层密码库,Apache 使用它加密 HTTPS,OpenSSH 使用它加密 SSH,但是,你不应该只将其作为一个库来使用,它还是一个多用途的、跨平台的密码工具
有许多的特征,而且还有 SSL 客户端和服务端特征
其他特征
美国联邦政府 NIST FIPS 140-2 一级评估确认 TLS,下一代 SSL 协议 X.509 密钥和证书的生成 X.509 证书权力 文件加密和粉碎 打乱 UNIX 密码 9 个不同的商业密码硬件设备 9 个密码算法、密码性能测试、36 个命令、6 个消息摘要算法、多个加密协议等
GmSSL
支持国密算法和标准的 OpenSSL 分支 增加了对国密 SM2/SM3/SM4 算法和 ECIES、CPK、ZUC 算法的支持,实现了这些算法与 EVP API 和命令行工具的集成。GmSSL 由北京大学信息安全实验室 (http://infosec.pku.edu.cn) 开发和维护。
Crypto-JS
ClassFinal
Java class 文件安全加密工具,支持直接加密 jar 包或 war 包,无需修改任何项目代码,兼容 spring-framework,可避免源码泄漏或字节码被反编译。
Apache Commons Crypto
是一个加密库,使用 AES-NI (Advanced Encryption Standard New Instructions) 进行优化。提供了加密级别和流级别的 API。开发者可以使用最少代码来实现高性能的 AES 加解密应用。
Jasypt
是一个 Java 库,它允许开发者以最小的努力为他 / 她的项目添加基本的加密功能,而且不需要对密码学的工作原理有深刻的了解。 高安全性、基于标准的加密技术,既可用于单向加密也可用于双向加密。加密密码、文本、数字、二进制文件 与 Hibernate 的透明集成。 适合集成到基于 Spring 的应用程序中,也可与 Spring Security 透明地集成。 对应用程序的配置(即数据源)进行加密的综合能力。 在多处理器 / 多核系统中具有高性能加密的特殊功能。 开放的 API,可与任何 JCE 供应商一起使用。
Jlog
日志系统几大模块
收集(filebeat、logstash等) 传输(kafka、tcp直传 等) 存储(es,mysql、hive等) 查询(kibana、自建)
基本流程为通过filter获取web请求出入参、自定义log4j、logback的appender搜集中途打印的日志,通过请求入口时生成的tracerId进行关联,写入本地内存(取代写磁盘),进行压缩(字符串空间占用减少80%以上),通过Udp发往worker端(取代mq),worker接收数据抽取索引字段,并入库clickhouse,除未来查询要用的索引字段外,其他内容全程压缩直至入库。
问题
该日志框架即为在有所取舍的情况下,支撑海量日志的场景所研发,如前文所讲,该方案在同等硬件配置下,较filebeat+mq+es的模式秒级 日志吞吐量提升10倍,且全链路磁盘占用下降了70%以上 。
ClickHouse 是俄罗斯第一大搜索引擎 Yandex 开发的列式储存数据库。令人惊喜的是,这个列式储存数据库的性能大幅超越了很多商业 MPP 数据库软件,比如 Vertica,InfiniDB.
相比传统的数据库软件,ClickHouse 要快 100-1000X:
压缩插件
Commons Compress
ZeroTurnaround
ZIP4J
Shrinkwrap
Zstandard(zstd)
是 Facebook 开源的一种快速无损压缩算法,以 zlib 级为目标的实时压缩场景和更好的压缩比。它提供了非常宽范围的压缩 / 速度折衷,同时支持非常快的解码器。它还为小数据提供了一种特殊模式,称为字典压缩,并且可以从任何样本集创建字典。 采用双授权协议:BSD 和 GPLv2
存储系统
FastDFS
nas
MinIO
适合存储海量的非结构化的数据,例如说图片、音频、视频等常见文件,备份数据、容器、虚拟机镜像等等,小到 1 KB,大到 5 TB 都可以支持。 基于 Go 实现的高性能、兼容 S3 协议的对象存储。它采用 GNU AGPL v3 开源协议
oss-server
单元测试工具
JUnit
Baidu iTest
TestableMock
PowerMock
Mockito
easyMock
jMock