技术文档
方法相同入参 AOP 使用说明
Shopee 刊登业务梳理文档
亚马逊刊登相关业务知识
刊登监控设计方案
亚马逊跟卖设计
Fanno 刊登业务梳理文档
日志收集 方案设计
PIB 刊登方案设计
Temu 刊登方案设计
ShopTokenInfo Aop集成MBC方案
香港定时卡刊登任务方案
push-message 、receive-message 省流方案
OZON 刊登方案设计
Lazada视频上传方案
广州同步店铺框架搭建
Shopify翻版
Amazon交接
TikTok 由global模式切换replicate模式调研
tiktok 折扣活动对接方案
Target 初期调研
本文档使用 MrDoc 发布
-
+
首页
push-message 、receive-message 省流方案
# 起始 > 调度中心刊登和订单的项目在香港处理业务,处理完成后需要把消息推给广州通知结果,```push-message``` 和 ```receive-message``` 之间通过 http 请求,且请求体一般比较大,此处消耗的流量比较大,需要在此处进行优化,在不影响业务的情况下,减少流量消耗。 # 方案 ### 方案二:使用 socket 通信 > 相对于 http 请求可以减少每次请求的中业务无关的数据(请求消息头、响应消息头)。当对于当下环境不太适合快速实现。 ### 方案二:对请求的 body 加解密 > 对 body 加解密的方式能更好的减少对 CPU 的消耗。 > 1、```aes、des、base64 加解密```: 无法减少字符串大小,反而会增大。 > 2、```MD5 加解密```: 加密后固定长度,但是无法解密。 ### 方案三:对请求的 body 压缩 #### # 常见的压缩算法有如下: ```JDK GZIP``` :这是一个压缩比高的慢速算法,压缩后的数据适合长期使用。JDK中的java.util.zip.GZIPInputStream / GZIPOutputStream便是这个算法的实现。 ```JDK deflate``` :这是JDK中的又一个算法(zip文件用的就是这一算法)。它与gzip的不同之处在于,你可以指定算法的压缩级别,这样你可以在压缩时间和输出文件大小上进行平衡。可选的级别有0(不压缩),以及1(快速压缩)到9(慢速压缩)。它的实现是java.util.zip.DeflaterOutputStream / InflaterInputStream。 ```LZ4压缩算法```:这是本文介绍的算法中压缩速度最快的一个,与最快速的deflate相比,它的压缩的结果要略微差一点。它是基于友好的Apache 2.0许可证发布的。 ```Snappy```:这是Google开发的一个非常流行的压缩算法,它旨在提供速度与压缩比都相对较优的压缩算法。它也是遵循Apache 2.0许可证发布的。 #### # 关于他们之间的性能如下:  # 实践 > 最终选择 LZ4 来进行 body 的压缩,对于性能和压缩比比较折中。 > 导入maven ```xml <dependency> <groupId>org.lz4</groupId> <artifactId>lz4-java</artifactId> <version>1.6.0</version> </dependency> ``` > 工具类封装 ```java package com.mabang; import net.jpountz.lz4.LZ4CompressorWithLength; import net.jpountz.lz4.LZ4DecompressorWithLength; import net.jpountz.lz4.LZ4Factory; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.IOException; import java.io.UnsupportedEncodingException; /** * 类<code>LZ4Utils</code>说明: * * @author Junan * @email chenjunan@mabangerp.com * @since 2023/3/7 */ public class LZ4Utils { private static LZ4CompressorWithLength lz4CompressorWithLength = new LZ4CompressorWithLength(LZ4Factory.fastestJavaInstance().fastCompressor()); private static LZ4DecompressorWithLength lz4DecompressorWithLength = new LZ4DecompressorWithLength(LZ4Factory.fastestJavaInstance().fastDecompressor()); private static BASE64Encoder base64Encoder = new BASE64Encoder(); private static BASE64Decoder base64Decoder = new BASE64Decoder(); public static byte[] compress2Byte(String source) throws UnsupportedEncodingException { return lz4CompressorWithLength.compress(source.getBytes("UTF-8")); } public static String compress2Str(String source) throws UnsupportedEncodingException { return base64Encoder.encode(compress2Byte(source)); } public static byte[] decompress2Byte(byte[] source){ return lz4DecompressorWithLength.decompress(source); } public static String decompress2(String source) throws IOException { return new String(decompress2Byte(base64Decoder.decodeBuffer(source)),"UTF-8"); } } ``` > 调用示例 ```java public static void main(String[] args) throws IOException { StringBuilder s = new StringBuilder("aaaaaaaa"); System.out.println(s.length()); long l = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { LZ4Utils.compress2Str(s.toString() + i); } long l2 = System.currentTimeMillis(); System.out.println(l2-l); } ```
chenjunan
2023年3月8日 11:26
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码