Giter VIP home page Giter VIP logo

methane's People

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

methane's Issues

流媒体路线

1

  1. 不涉及流媒体格式解析,仅通过文件的断点续传来解决问题,文件有可能在传输开始时尚没有完全生成。因为底层实质是文件,因此完整性是有基本保证的,但实时性则不太理想,容易发生卡顿。
  2. 不涉及流媒体格式解析,优化播放。通过跳过部分内容来改进实时性,通过带宽控制来改进多路播放效果
  3. 需要解析流媒体内容,通过对流媒体的关键帧和非关键帧的控制来改进播放效果
  4. 需要编码流媒体内容,以实现不同码率下的播放
  5. 协同上传和播放。以较低码率提供高实时性播放,以较高码率增补传输高清内容

ref #1

网关之概要设计

Requirement

  • 接收模拟器发来的数据包 (ref #4 #5) (ref #7)
  • 转发给处理集群
    • 考虑 通过 消息队列 中转的方式(Kafka or RocketMQ)
    • 考虑直接通过 gRPC 发送的方式
    • 考虑扩展运行时按消息内容(流媒体 #3 /测量报告/紧急告警)分别通过不同路径中转
    • 考虑扩展运行时动态切换中转路径(例如优先gRPC直连,处理不过来产生堆积时再用消息队列中转)
  • 考虑扩展统计功能(例如统计消息包总数,中转时延,错误计数)
  • 考虑主动暂时关闭接收数据包(例如处理后端积压过多时)

Task

  • 仅仅只做设计,暂不要实现
  • 用最精炼的文字描述设计**&要点
  • 用一张图片描述主要的classes之间的关系(手绘,工具绘皆可)
  • 用最简洁的文字描述主要的class的职责
  • 不要涉及次要class,这是详细设计期的职责
  • 不要涉及主要class里方法定义细节(例如参数定义),这也是详细设计期的职责,但可以描述关键方法的关键参数/关键算法/关键流程
  • 以后扩展部分可以只用说明以后从哪里扩展,本次设计扩展部分仅需简略涉及

ref #2

后台处理 之 概要设计

Requirement

  • 处理网关转发来的数据包,并提供给业务端做为服务 ( #5 #6 )
  • 考虑网关的多种转发路径 ( #8 )
  • 以集群方式工作

Task

  • 仅仅只做设计,暂不要实现
  • 用最精炼的文字描述设计**&要点
  • 用一张图片描述主要的classes之间的关系(手绘,工具绘皆可)
  • 用最简洁的文字描述主要的class的职责
  • 不要涉及次要class,这是详细设计期的职责
  • 不要涉及主要class里方法定义细节(例如参数定义),这也是详细设计期的职责,但可以描述关键方法的关键参数/关键算法/关键流程
  • 以后扩展部分可以只用说明以后从哪里扩展,本次设计扩展部分仅需简略涉及

ref #2

网关实现说明

网关代码实现


代码说明

网关概要设计( #8 )
数据采集器接口类为Gather

  • GatherMQ为从kafka中获取数据(必须实现)

  • GatherTCP为从tcp中获取数据(非必须实现)

  • GatherUDP为从udp中获取数据(非必须实现)

  • GatherChannelMQ处理从kafka中获取到的数据(必须实现)

  • GatherChannelTCP处理从tcp中获取到的数据(非必须实现)

  • GatherChannelUDP处理从udp中获取到的数据(非必须实现)

  • ServiceMQHandler负责发送数据到P(kafka方式)

  • ServiceRPCHandler负责发送数据到P(RPC方式)

  • MQListener负责监听P发送给G的消息(kafka)

  • RPCListener负责监听P发送给G的消息(RPC)

Code Name : methane

升级改造新一代的车联网系统

  • 随时间的版本演变机制
  • 关键组成部分的可替换模块化
  • 具备混合使用多种编程语言的能力
  • 友好的运维支撑

大文件传输协议实现(测试用例)

任务描述

需要模拟客户端,完成资源的下载,实现MockClient.java,步骤如下

  • 建立grpc客户端连接grpc服务器,参考代码ResourceRunner.java中的mockClient
  • 获取资源信息
    通过grpc调用ResourceServiceGrpc.ResourceServiceBlockingStub.pullInfo,获取资源信息
  • 根据资源信息拆分请求
    通过Resource.ResourceInfoPullResponse.fragment属性进行请求拆分,组装多个ResourceServiceGrpc.ResourceServiceBlockingStub.pullData
  • 获取资源内容进行合并
    合并Resource.ResourceDataPullResponse.data,组装成完整的资源

大文件传输协议实现

任务描述

实现ResourceStoreHandler.java的get/getFragment

需要做的事情

  • get: 读取硬盘上存储的文件信息,文件信息内容参考ResourceInfo.java,文件的存储方式可自行定义,设计时候需要考虑到不完整文件的存储
  • getFragment: 读取文件中的部分内容,分片信息内容参考ResourceFragment.java
    • getFragment中存在version参数,即时请求的version低于文件的version,也应该可以成功,因为对于推送端来说,分批推送只是append,不会进行替换改变之前已经存在的内容

概要设计 之 代码级约束

  • 根据概要设计创建可编译通过的代码
  • 添加且仅添加公有成员(方法/参数/返回值/简要注释)
    • 不要实现内部逻辑,用返回缺省值或简单抛一个异常让编译通过即可
    • 实现会交给别人来完成
  • 主分支上仅保留单线的少量commit(原则上不超过3个),建议自行在另外的分支工作,以PR的形式合并成一个或几个commit
  • 接入travis-ci,在travis-ci上自动编译通过
  • repo分配
  • 监控需要包含和前端页面通信的API定义,不需要前端代码

ref #7 #8 #9 #10 #2 #1

大文件(音视频文件)的断续续传接口&流程定义

按照 #3 的路线图,我们需要制定大文件(音视频文件) 的断点续传方案
当前暂不考虑对音视频文件的编解码,仅仅对文件进行断点续传

制定断点需传的接口定义,不需要实现
制定这些接口的使用流程(怎么发起,怎么通知进度,怎么断开后重连)

接口定义使用google protobuf格式定义
附带简要说明

后台处理实现

参考 后台处理 之 概要设计 实现后台处理业务逻辑

  1. Host中通过配置文件配置GRPC的监听端口号
  2. TransceiverFactory 中通过配置文件中的配置项决定启动哪一个收发器,当前仅实现了GRPC收发器,计划还将支持Kalfka消息队列和RocketMQ消息队列收发器,对尚不支持的收发器简单抛出异常
  3. 如果Transceiver & TransceiverGRPC 中逻辑有缺少的部分,补全它们
  4. 如果MonitorService中逻辑有缺少的部分,补全它们
  5. 实现 VehicleMgr & VehicleBiz
  • 所有实现代码以一个PR的形式提交,不需要合并到master
  • PR提交后,关闭这个issue

模拟器实现说明 code

模拟器代码实现

思路说明

模拟器入口在 Context 类中,如下图,必须实现接口并注入如下bean到spring
TaskScheduler(必须实现,计划任务执行器,其中需要递归调用保持不断)
DataBuilder(数据构造器,生成一批数据)
Sender(数据发送器,取出BuildDataCache全部数据并发送,实现netty或者kafka版本发送数据)
BuildDataCache(构造数据缓存,用于存储DataBuilder生成的一批数据)
RetrySendDataCache(可以不必实现,不实现没有重发功能)
Collector
image

运行流程

主流程

  1. TaskScheduler在系统启动时候构造下一次执行的任务
  2. DataBuilderTask先执行,调用DataBuilder构造一批数据并存入缓存** BuildDataCache**
  3. SendDataTask执行,拿走** BuildDataCache中的数据,调用Sender**发送数据

数据重发流程

在主流程执行完毕后

  1. 根据响应的结果,记录下发送失败的记录,存储到RetrySendDataCache
  2. RetrySendDataTask执行,取出RetrySendDataCache数据并发送,若失败重复数据重发流程

Collector说明

CollectorDataBuilderTaskSendDataTaskRetrySendDataTask采集运行数据

Hello

一个极简的迭代开始基石

  • 一个模拟器:可以随机的发送一些报文,它是以后模拟车辆的基石
  • 一个网关:接收模拟器发来的报文,并转发到一个消息队列上,它是以后网关的基石
  • 一个业务处理模块:仅仅对报文进行计数,它是以后业务处理部分的基石
  • 一个业务呈现模块:以网页形式展现报文计数,它是以后业务展现部分的基石

ref #1

监控处理实现

参考 #10 实现监控业务逻辑:
1、前端框架建议使用vue
2、搭建简易的前端框架
3、根据交互接口,展示一个简易的消息计数页面

监控 之 概要设计

Requirement

  • 实现一个网站,查看消息计数 ( ref #2 )
  • 通过 ( ref #6 #9 ) 实现功能

Task

  • 仅仅只做设计,暂不要实现
  • 用图片描述关键页面样式
  • 用最精炼的文字描述设计**&要点

流媒体服务器端概要设计

Requirement

流媒体服务器接收来自设备推送的音视频流,存储,同时把流媒体转发给需要下载或播放的客户端

  • 接收来自设备推送的音视频流
  • 考虑鉴权(防止未授权的设备/客户端)
  • 符合 #16 规定的接口和流程

Task

  • 仅仅只做设计,暂不要实现
  • 用最精炼的文字描述设计**&要点
  • 用一张图片描述主要的classes之间的关系(手绘,工具绘皆可)
  • 用最简洁的文字描述主要的class的职责
  • 以后扩展部分可以只用说明以后从哪里扩展,本次设计扩展部分仅需简略涉及

模拟器之概要设计

Reqiurement

  • 模拟器发送消息包
  • 正确内容的消息包内容符合 HelloV.proto 的定义
  • 模拟器可以模拟刻意错误的数据
  • 考虑以下发送方式的变种
    • 发送到Kafka消息队列
    • 发送到RocketMQ消息队列
    • 以TCP方式直接发送到网关
    • 以UDP方式直接发送到网关
    • 以gRPC方式直接发送到网关
  • 发送方式不需要运行时动态切换,仅需支持运行前按配置切换 或者 编译时选择一种 即可
  • 单个模拟器需要模拟0~N台车辆(N>0)
  • 模拟器可以支持按时间在运行时动态调整模拟的车辆数目
  • 模拟器可以调节车辆的数据发送频率(从数个毫秒一包数据 到 数十分钟一包数据 不等)
  • 多个模拟器可以同时以集群方式运行,以模拟出数百万台车辆的规模
  • 模拟器可以方便的扩展数据的生成算法(比如扩展模拟车辆运行轨迹,扩展模拟充电)
  • 模拟器可以扩展发送音频/视频数据(ref #3 )
  • 模拟器可以方便的扩展出接收下行命令,并执行相应的动作(比如服务器端下发"停止充电",则模拟出相应的动作)
  • 模拟器可以扩展模拟数据补发(服务器返回失败或超时之后延时一段时间再重试发送)
  • 模拟器可以扩展统计功能(例如统计发总的总数据包,车辆总数,平均服务端响应延时,服务端错误计数)

Task

  • 仅仅只做设计,暂不要实现
  • 用最精炼的文字描述设计**&要点
  • 用一张图片描述主要的classes之间的关系(手绘,工具绘皆可)
  • 用最简洁的文字描述主要的class的职责
  • 不要涉及次要class,这是详细设计期的职责
  • 不要涉及主要class里方法定义细节(例如参数定义),这也是详细设计期的职责,但可以描述关键方法的关键参数/关键算法/关键流程
  • 以后扩展部分可以只用说明以后从哪里扩展,本次设计扩展部分仅需简略涉及

ref #2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.