2018.3-2019.6 工做总结


服务端工做:前端

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

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

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

本身实现的RpcClient。 基于长连接,记录ReqId,超时机制。数据库


2. 文件上传模块FileGate。无状态的,客户端能够任意链接api

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

下载过程:
由于FileServer会有本地RocksDB缓存,因此经过FileGate路由,能够提升缓存命中率。服务器

 

3. Spring Cloud系统的搭建架构

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

使用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 加密算法

相关文章
相关标签/搜索