零碎知识点

零碎知识点

日志

slfj外观框架,有多种实现

  • logback
  • log4j
  • log4j2

类型

  • 控制台日志

  • 访问日志

    • 通过 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 级别的日志,都会记录到控制台和日志文件中。
  • 颜色输出

    • 如果我们的控制台支持 ANSI ,则可以使用颜色输出,来提高可读性

      • ALWAYS :启用 ANSI 颜色的输出。
      • NEVER :禁用 ANSI 颜色的输出。
      • DETECT :自动检测控制台是否支持 ANSI 功能。如果支持则进行开启,否则则进行禁用。默认情况下,使用 DETECT 这种选项。

正常,不同的环境下,日志配置可能存在差异性

  • 在开发环境下,无需日志文件,只需要打印日志到控制台。同时,使用 DEBUG 级别的日志级别,打印更多的日志,以便排查问题。
  • 在生产环境下,需要日志文件,可选打印日志到控制台。同时,使用 INFO 级别的日志级别,毕竟生产环境下访问量比较大,日志量会很大。

敏感词相关开源

脱敏工具

  • desensitization

正则

idea插件

  • any-rule

序列化

Protocol Buffers

  • 是 Google 公司开发的一种数据描述语言,类似于 XML 能够将结构化数据序列化,可用于数据存储、通信协议等方面。现阶段支持 C++、JAVA、Python 等三种编程语言。

  • 为什么不只用 XML?同 XML 相比,优点

    • 更简单
    • 数据描述文件只需原来的 1/10 至 1/3
    • 解析速度是原来的 20 倍至 100 倍
    • 减少了二义性
    • 生成了更容易在编程中使用的数据访问类
  • 延伸

protostuff

	- 一个 Java 序列化库,内置支持向前向后兼容性(模式演变)和验证
	- 特点

		- 高效,无论是速度还是内存
		- 灵活,支持可插拔格式

Kryo

  • Java 对象序列化框架
  • 快速高效的 Java 对象图形序列化框架,主要特点是性能、高效和易用。该项目用来序列化对象到文件、数据库或者网络

FST

  • fast-serialization 是重新实现的 Java 快速对象序列化的开发包

  • 特点

    • 序列化速度更快(2-10 倍)
    • 体积更小
    • 而且兼容 JDK 原生的序列化
    • 要求 JDK 1.7 支持

MessagePack

  • 基于二进制高效的对象序列化类库,可用于跨语言通信
  • 可以像 JSON 那样,在许多种语言之间交换结构对象;但是它比 JSON 更快速也更轻巧
  • 支持 Python、Ruby、Java、C/C++ 等众多语言。
  • 比 Google Protocol Buffers 还要快 4 倍

FlatBuffers

  • 是一个 Java 的序列化库,用于游戏和其他内存受限的应用

fastjson

  • 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发

  • 特点

    • 快速 FAST (比其它任何基于 Java 的解析器和生成器更快,包括 jackson)
    • 强大(支持普通 JDK 类包括任意 Java Bean Class、Collection、Map、Date 或 enum)
    • 零依赖(没有依赖其它任何类库除了 JDK)

Jackson

  • 高性能的 JSON 处理

Gson

  • Java 的 JSON 类库
  • 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库,可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。

jfire-codejson

  • JSON 框架,是最快最自由的 json 框架,性能超越 fastjson 1 倍。支持策略能力。

  • 特点

    • 性能强劲 codejson 是迄今为止最为强大的 json 框架,序列化速度超越 fastjson 50%,超越 Jackson2 40%。反序列化性能超越 Fastjson 几倍。
    • 自由定制输出 codejson 除了可以完成常规的对属性的忽略和改名以为。依靠强大的策略能力,可以对序列化的输出做出任意的修改。可以对同一个对象,使用不同的策略 进行不同的输出。充分满足不同场景的使用要求。策略能力可以进行属性改名,属性忽略,对输出内容格式化,对某一种格式进行各耍等等,只要能想得出来,策略 能力都可以做到。
    • 极致简单的 API 对于序列化来说,只需要使用类似 JsonTool.write(entity) 一行静态代码即可得到 json 字符串。 对于反序列化来说,只需要使用类似 JsonTool.read(User.class,str) 一行静态代码即可将 json 字符串反序列化为 pojo 对象

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

  • JavaScript 加密库

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,除未来查询要用的索引字段外,其他内容全程压缩直至入库。

问题

  • 为什么是UDP而不是TCP?

    • udp是知道对方的ip和端口,把消息发出去后,直接清空本地缓存。而tcp是发出去后,等待对方回复确认收到信息后,才会删除这条消息的缓存。一旦接收端卡顿,则客户端可能堆外内存溢出。并且通信时间翻倍,吞吐量下降。
  • UDP丢消息怎么办?

    • 网络拥堵,交换机被打满。则无论udp tcp都发不出去了
    • 重启机器,在空档期udp发出去的不会重发
    • worker消费入库不及,主动抛弃
    • 总结:日志允许以上情况下的丢失,无需保证强可靠性
  • 1台clickhouse,极限一秒写入180M,对应用户QPS约1万。 那么30台服务器如何支撑大促60万QPS,或更高?

    • 前提:clickhouse性能是明确的,譬如一秒最多写1万用户QPS,则30台最高写30万。那么60万QPS时, 我们只能用别的地方去缓冲。 方案: 定制8核32G机器,单机开一个10万的队列(应该指的是内存队列),存放用户请求数据。批量入库,靠内存来吃下 大促陡增的几秒流量。则50台worker机器,即可拥有500万的内存队列,即便高峰是80万、100万,随后 逐步下降至30万、20万并维持。则一个能吃下30万的clickhouse集群足以支撑。 且worker机器可以随时扩容,平时4台支撑日常的1-5万的QPS,大促当天扩容即可,成本极低。

该日志框架即为在有所取舍的情况下,支撑海量日志的场景所研发,如前文所讲,该方案在同等硬件配置下,较filebeat+mq+es的模式秒级 日志吞吐量提升10倍,且全链路磁盘占用下降了70%以上 。

ClickHouse 是俄罗斯第一大搜索引擎 Yandex 开发的列式储存数据库。令人惊喜的是,这个列式储存数据库的性能大幅超越了很多商业 MPP 数据库软件,比如 Vertica,InfiniDB.

相比传统的数据库软件,ClickHouse 要快 100-1000X:

压缩插件

Commons Compress

  • 文件压缩/解压缩包

ZeroTurnaround

  • Java压缩处理类库

ZIP4J

  • Java 的 zip 开发包

Shrinkwrap

  • 归档操作的 Java API

Zstandard(zstd)

  • 是 Facebook 开源的一种快速无损压缩算法,以 zlib 级为目标的实时压缩场景和更好的压缩比。它提供了非常宽范围的压缩 / 速度折衷,同时支持非常快的解码器。它还为小数据提供了一种特殊模式,称为字典压缩,并且可以从任何样本集创建字典。
  • 采用双授权协议:BSD 和 GPLv2

存储系统

FastDFS

  • 轻量级分布式对象存储

  • 一个开源的分布式文件系统,她对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

  • 为什么越来越少使用 FastDFS 实现文件存储服务呢?

    • 部署运维复杂、无官方文档、缺乏长期维护的团队、性能较差、未提供 Docker & Kubernetes 集成方案等等原因。

nas

MinIO

  • 适合存储海量的非结构化的数据,例如说图片、音频、视频等常见文件,备份数据、容器、虚拟机镜像等等,小到 1 KB,大到 5 TB 都可以支持。
  • 基于 Go 实现的高性能、兼容 S3 协议的对象存储。它采用 GNU AGPL v3 开源协议

oss-server

  • 对象存储系统

单元测试工具

JUnit

  • Java单元测试框架

Baidu iTest

  • 基于Junit扩展的测试框架

TestableMock

  • Java 单元测试增强工具

PowerMock

  • 单元测试模拟框架

Mockito

  • Java 测试框架

easyMock

  • 模拟测试辅助工具

jMock

  • Java模拟测试工具
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值