zoukankan      html  css  js  c++  java
  • 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 加密算法

  • 相关阅读:
    flask-login
    python3安装scrapy框架
    Redis--对象共享(整数型字符串)
    Redis--对象(type、encoding、ptr、lru、refcount)
    Redis--内存回收(引用计数法)
    Redis--跳跃表
    Redis--压缩列表(节约内存,连锁更新)
    Redis--整数集合(升降级)
    Redis--Rehash(h[0],h[1],rehashIdx, 渐进式)
    Redis--解决Hash表键冲突(单向链表next指针,表头)
  • 原文地址:https://www.cnblogs.com/lhp2012/p/11054386.html
Copyright © 2011-2022 走看看