专栏名称: 高可用架构
高可用架构公众号。
目录
相关文章推荐
美团技术团队  ·  可信实验白皮书系列04:随机轮转实验 ·  3 天前  
美团技术团队  ·  可信实验白皮书系列03:随机对照实验 ·  3 天前  
架构师之路  ·  爸爸!除了你,沈括,沈万三... ... ·  4 天前  
51好读  ›  专栏  ›  高可用架构

如何用Go实现一款类似滴滴优步的网络约车软件(含源码)

高可用架构  · 公众号  · 架构  · 2017-02-28 09:45

正文

请到「今天看啥」查看全文



  1. 第一是车费计算器, 计算是在司机端(客户端)完成,这样避免发送无用的请求 ,可以节约很多服务端资源。 另一方面,为了安全等方面考虑,我们需要在服务器端复制数据并保存它。

  2. 此外,我们意识到每 15 秒一次上报太少,因为用户在屏幕打开后,15秒后才会看到车在移动。

  3. 此外,我们在司机端的 GPS 模块有很多问题,这个可能跟司机的手机设备相关。

  4. 最后,我们想要在主屏幕上渲染动画车。


还需要解决的问题


  1. 从司机收集更多的数据

  2. 在主屏幕上显示动画车

  3. 在服务器端存储行车过程中计费数据

  4. 节约移动流量

  5. 每秒收集一次数据


我想谈一谈有关节约移动流量带宽的问题。在我们国家,出租车收费非常便宜,我们像使用公共交通那样使用出租车。 例如,从城市的一边跑到另一边可能只需要 2 欧元,这就跟在巴黎坐地铁价格差不多。但另外一方面移动带宽成本还也很高,如果我们每秒节约 100 字节,那么我们将给为公司节省差不多 2000 美元。


数据追踪


  1. 司机位置(纬度,经度)

  2. 司机当前的 session 信息,在登录时我们会给司机端提供 session id

  3. 订单信息(订单 ID 和车费)


我们决定每一次数据上报应小于 100 字节。 我们寻找传输协议来解决这个问题

正如你可以看到,我们审视了以下几个协议:


  1. HTTP

  2. WebSockets

  3. TCP

  4. UDP


对我们来说理想的选择是 UDP ,因为:


  1. 我们只发送数据报

  2. 我们不需要保证送达

  3. 极简主义

  4. 保存大量数据

  5. 只有 20 字节开销

  6. 在我们的国家的移动网络没有被阻止


至于数据序列化,我们考察了:


  1. JSON

  2. MsgPack

  3. Protobuf


我们选择 ProtoBuf ,因为它对小数据非常有效。



以看到最近的竞争对手是 PB 的三倍。(小编:可以参考 TimYang 的一条微博 [3] )


每次上报总共的数据


  1. 42 字节的业务数据

  2. 加上 20 字节的 IP 报头

  3. 得到每次上报 62 字节数据


当我们获得数据时,我们考虑如何存储。


数据存储







请到「今天看啥」查看全文