2018.3-2019.6 工作总结


服务端工作:

1. 文件上传模块FileServer。有状态的,会有本地缓存。

线程分片处理。同一个资源的请求,必定分配到同一个线程中,避免了线程的加锁。
Java实现Promise的实现。对于RocksDB本地缓存没有此文件的情况,如果有多个请求同时到达,加入到Pending等到队列中,只有第一个请求引起的操作才会去请求数据库。

使用mysql存储文件索引。用来标记每个文件存储在哪台mongoDb服务器上。

自己实现的RpcClient。 基于长链接,记录ReqId,超时机制。


2. 文件上传模块FileGate。无状态的,客户端可以任意连接

上传过程:
通过FileGate对上传请求做分片路由到FileServer中。保证同一个文件到多个分片能够落盘在同一个FileServer中。
考虑到用户可能取消文件发送到情况。所以不能直接将文件分片直接传入文件服务器。

下载过程:
因为FileServer会有本地RocksDB缓存,所以通过FileGate路由,可以提高缓存命中率。

 

3. Spring Cloud系统的搭建

客户端H5页面请求。客户端打开H5页面时候,在URL上拼接jwtToken。页面会将它写到自己本地的Cookie中。同时,对于有权限的请求,为了防止CSRF攻击,后续的Ajax请求,需要携带CsrfToken

使用zuul实现restapi gate 拦截所有请求,解开jwtToken,还原成用户信息。

使用长连接JwtToken生产者。JwtToken使用非对称加密。使用私钥签名,公钥验证签名。JwtToken中不存储敏感数据,只明文存储UID信息。

使用eurake实现服务的注册和发现。

 

4. 服务端架构

Access -- 随机连接上来。Netty qps 5000

Session -- (uid,access_server_id,connection_id) 使用UID做分片,一致性哈希算法

P2PChatServer -- 使用from_uid,to_uid做分片。

OffMsgServer -- 离线消息服务。

GroupServer -- 使用group_id做分片。

HistoryMsgServer -- 历史消息服务器 。存储到MySQL

FileGate -- 随机连接上来。

FileServer -- 使用 storage_file_id 或 client_file_id 做分片

消息发送前,客户端生成一个client_msg_id . 发送到服务器后,服务端返回一个 storage_msg_id


前端工作:

 


WebIM

WebSocket,Protobuf,React,Redux,高阶组件,DH密钥交换算法,

emoji 表情库 , 文本输入框contentEditable, 头像编辑框。

ECC 加密算法

 

posted on 2019-06-19 20:16  袜子破了  阅读(166)  评论(0编辑  收藏  举报