Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

有没有什么序列化的同时分片的设计思路? #65

Open
FULaBUla opened this issue Aug 2, 2024 · 11 comments
Open

有没有什么序列化的同时分片的设计思路? #65

FULaBUla opened this issue Aug 2, 2024 · 11 comments
Labels
enhancement New feature or request
Milestone

Comments

@FULaBUla
Copy link
Contributor

FULaBUla commented Aug 2, 2024

目前序列化的时候要分片成多个小包发送,避免 tcp 发大包的情况,目前都是直接一整个或者需要我自己先把数据体序列化,然后分片拼数据头然后再序列化一下发送,有没有更好的方法一次性的在框架中做完。

@MisterChangRay
Copy link
Owner

你数据包很大吗?
我理解的分片的意义一般是指业务上用于区分数据边界的。如果单个业务本来数据量就大而且这些数据已是最小的了,那这个也没必要去拆了啊。

@FULaBUla
Copy link
Contributor Author

FULaBUla commented Aug 5, 2024

你数据包很大吗? 我理解的分片的意义一般是指业务上用于区分数据边界的。如果单个业务本来数据量就大而且这些数据已是最小的了,那这个也没必要去拆了啊。

是的我们一次数据可能有10M,要1K一分片,因为互联的是一些嵌入式设备,那边有要求,这么大的数据没法一下子都过去,所以要分片

@MisterChangRay
Copy link
Owner

明白了,你这个属于流量控制和流量整形。
这个一般通信框架有支持的,
我们这个属于序列化框架,暂时没计划支持

@FULaBUla
Copy link
Contributor Author

FULaBUla commented Aug 6, 2024

明白了,你这个属于流量控制和流量整形。
这个一般通信框架有支持的,
我们这个属于序列化框架,暂时没计划支持

通信框架做这部分吗?因为我数据序列化,然后还要拼东西分片再序列化,这种序列化框架没法一次性出来数据吗?

@MisterChangRay
Copy link
Owner

是的啊,大部分通讯框架会做这块的。我理解直接控制发送速率就行了(比如限速收发速度为10kb/s)。

@MisterChangRay
Copy link
Owner

不过下个版本也可以加一个

@MisterChangRay MisterChangRay added the enhancement New feature or request label Aug 6, 2024
@MisterChangRay MisterChangRay reopened this Aug 6, 2024
@FULaBUla
Copy link
Contributor Author

FULaBUla commented Aug 6, 2024

是的啊,大部分通讯框架会做这块的。我理解直接控制发送速率就行了(比如限速收发速度为10kb/s)。

哦哦哦,那我这个场景不太一样,我这个分开的片要给分片加头告诉接收方这个偏移了多少,他们自己组分片,然后我发的时候还对分片数据做了签名和加密,确保每一片的安全和防重放

@MisterChangRay
Copy link
Owner

这部分业务不是tcp层已经做了吗,用的udp?

@FULaBUla
Copy link
Contributor Author

这部分业务不是tcp层已经做了吗,用的udp?

是的,我们场景比较特殊,反正是自己实现的分片,不完全依赖于网络层

@MisterChangRay
Copy link
Owner

可以考虑加入一个注册分片逻辑的配置,数据序列化完成后按配置长度截断后调用,
然后再形成数据整体返回

@MisterChangRay MisterChangRay added this to the V2.4.5 milestone Oct 10, 2024
@FULaBUla
Copy link
Contributor Author

FULaBUla commented Dec 4, 2024

思考了一下:

  1. 作为高级配置,需要用户手动配置开启,避免影响效率
  2. 感觉通过一套新的注解来配置,因为每个分片需要一个头来标识这一片的偏移
  3. 需要一个注解标识这个类是消息头,不参与分片;
  4. 一个注解标识对应的属性参与分片,分片大小(分片大小也可以配置开启分片功能的时候全局指定);
  5. 还有两个注解标识消息头中的属性为记录偏移和包序号的字段
  6. 分片的时候根据注解自动填写偏移和包序号的信息
  7. 每一片最后都可以生成一个校验和填充到二进制末尾
  8. 有个特殊需求,需要在第一片消息头和分片数据之间或者分片数据和校验和之间插一个定长随机数,应该如何做?可能还需要个什么注解标识自动拼接且不参与分片并告诉拼接到哪里

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants