V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
CDSer
V2EX  ›  问与答

如何利用首都在线的 GPN 来为国内用户提供全球远程协作办公服务??

  •  1
     
  •   CDSer · 2016-03-11 11:56:05 +08:00 · 2025 次点击
    这是一个创建于 3185 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如何利用首都在线的 GPN 来为国内用户提供全球远程协作办公服务??
    作者: Hermes 团队

    谈起我们组建 Hermes 来参加 @Container Hack Day 还是比较巧的,当时我们三个正在开发一款图片社交 APP 的后端,当时根据需求需要使用地理位置信息,但是发现国内比较知名的地图数据服务提供商,国内 POI 数据做的确实不错,但是国外基本都是一片白,当然国外的 POI 数据对于当前需求和市场不是很重要,但是这确实是我们发现的一个问题。

    比如说国内用户如果即将出国旅行,想要查看国外的街景数据,基本上国内的地图服务对国外位置是没有数据服务的,并且由于一些众所周知的原因,我们无法顺畅使用 Google Map 的 Places API ,我们不能保证每个开发者和用户都有能力去访问 Google service ,所以我们当初来参赛的目标就是利用首都在线的 GPN 来为国内用户提供无障碍的全球 POI 数据服务,当然这个要基于 Google Service 。

    当时的想法比较简单,也很好实现,主服务放在美国的数据中心,获取 Google Map Places 服务,国内用户通过国内数据中心节点代理访问,这样我们做的东西基本就是一个代理,只是转接了一下用户对 Google Map Service 的请求而已,这当然不能拿去参赛。

    这样我们就寻求能否做一套 SDK 出来,提供给移动端,这样用户只需要关注上层的使用就可以,但是在开发过程中我们发现, Google Service 的一套东西是完全闭源的,其 SDK 想要 Hack 非常困难,我们的目标是在其基础上进行修改,自己写一套一方面时间来不及,另一方面这不是三个人能够做的来的。如果这个方向继续做下去, Android 只能进行 root , IOS9 以前需要越狱,以此来进行移动端的请求代理转发,这样做下去就会偏重于移动端,而比赛的重点我们觉得还是在于后端服务的创意和基于 GPN 跨界的想法,这样我们就不得不转型了。

    做有价值的项目,解放用户时间

    那么现在 Hermes 又回到起点了,我们期间花了很久来思考接下来该向什么方向努力,但是我们的中心点始终是围绕着跨界,和要做有价值有意义的项目而存在的。如果我们做的东西对用户没有吸引力,不能带来什么价值,这就是一个没用的东西。所以我们就把目光移动到了 SOHO 移动办公一族上来。

    比如有一次,我开始用高德的志玲姐姐导航,躲避拥堵模式,然后手机没电了,然后由于不是走的大路,然后就迷路了,然后转悠了半天,哪哪都堵车,然后路上就花了三个小时……当时宝宝心里很苦,什么滴滴出行也好,真正从根本上解决出行问题,就是不出行,所以如果实现 SOHO ,能省掉多少路上浪费的时间啊!那么跨地域协作, SHOH 办公一定会成为新的工作方式。

    在这一想法的基础上,我们希望在首都在线的平台上搭建一套基于 web 的异地在线协同工作,线上视频教育系统,通过首都在线提供的 GPN 网络,让用户无论相隔多远,都能以一种稳定的速度享受彼此的连接,用户在我们实现的 Hermes 平台上,可以文字聊天,视频聊天,语音通话,共同显示分享一块可涂写的白板,协同工作,聆听远程讲师的讲解,无论用户在美国,还是欧洲,都可以通过首都在线提供的 GPN 网络享受稳定的视频语音聊天,不会出现视频显示音频连接不稳定的情况。

    那么想法已经有了,接下来就是如何实现了,谈技术,先看图:
    发不了图,原图见:
    http://mp.weixin.qq.com/s?__biz=MzA3MDI2NzIzMw==&mid=407884632&idx=1&sn=2351818b1ee11dab13db446795fd653d#rd

    上图是我们整体服务的一个架构,主服务都是搭建在国内节点上的,如果涉及到海外用户与国内用户的交互,就会通过搭建在国外节点上的代理,走 GPN 专线来完成通信传输。本项目的实现,借鉴和使用了很多现有的开源软件,在其基础上,我们团队使用 Docker ,做了适应于 GPN 网络环境的竞赛作品,在多媒体视频流服务上,我们选用了 Red5 做为 Flash 流媒体服务器,为了实现用户相互之间的文字聊天,我们选用了 redis 的 PubSub 做为支持,为了实现用户的音频通话,我们团队选择 FreeSWITCH 做为基础支持,在这三大软件的基础上,并且借鉴 BigBlueButton 实现方式,展开了我们的在线协同工作平台。

    Tech Stack
    讲技术栈,还是先上图:
    发不了图,原图见:
    http://mp.weixin.qq.com/s?__biz=MzA3MDI2NzIzMw==&mid=407884632&idx=1&sn=2351818b1ee11dab13db446795fd653d#rd

    上面的结构图已经基本完整的展现了本平台提供的所有服务和组件,下面进行详细的描述:
    Client :客户端就是运行在用户浏览器中的 Flash 应用,客户端使用 RTMP 协议连接了 Red5 服务器,但是在实际的工程中,我们在 Red5 前面放了一层 Nginx 做负载均衡,客户端实际连接的是 nginx 。
    Nginx : Nginx 在前端做了代理请求的分发,他是后面服务器中运行的 tomcat 的前端,同时在实现实时语音通讯上, nginx 代理完成 WebRTC 与 FreeSwitch 的连接。
    Presentation Conversion :为了让平台兼具协同工作的重任,协同文档展示是必不可少的,也就是说要让用户拥有文档上传的能力,但是最后都要统一显示成 Flash 的形式,所以存在转换工具,主要是使用了 SWFTools 。
    Redis PubSub : Redis PubSub 负责提供了用户之间的文字通信,即时通讯功能。同时我们也用它兼具了后台服务的消息中间件的功能。
    Redis DB :本平台提供了会议记录的功能,当会议结束时,后台会将会议中所有的记录事件存放入 redis DB 中。
    FreeSWITCH : FreeSwitch 为整个平台提供了语音通话的能力,用户浏览器会通过 WebRTC 协议连接后台的 FreeSwitch 服务。
    上面提到的所有组件在设计上都已经耦合度足够松散,所以我们将其都放入了 Docker 中,也就是说,如果用户不需要音频聊天了,那么 OK ,我们将含有 Voice 和 FreeSwitch 服务的 Docker 容器 stop 就可以了。
    为了展现我们的服务,我们用 J2EE 在 tomcat 上开发了一个 demo 聊天室,在使用上非常简单,进入聊天室不需要授权,在里面可以看到在线用户,这一系统仅仅作为一个 demo 展示,仅仅包含了我们计划的基本功能,比如视频,语音,文字聊天,白板文档共享。如下图展示的这样:
    原图见: http://mp.weixin.qq.com/s?__biz=MzA3MDI2NzIzMw==&mid=407884632&idx=1&sn=2351818b1ee11dab13db446795fd653d#rd

    打破距离,节省时间,创造价值

    到这里技术相关基本如上展示那样,为了在短时间内开发出一个功能完备,同时又能适应于 GPN 特殊的网络环境,我们在整体的实现上使用和借鉴了很多开源的实现,但是又结合了比赛的主旨和我们的想法。

    我们的目标就是沟通与跨界,远隔重洋的用户,通过这一平台可以无障碍的交流,速度稳定,视频,文字,通话,白板,文档,协同工作所需全部满足,世界的知识,不会因为地域的限制而无法获得,每个人都可以拥有平等顺畅的学习和沟通的能力。

    相信有一天,我们可以在任何地点和任何人协同工作,无障碍沟通和学习,因为人生的意义本应该放在有意义的事情上,而不应花费在路上,而 Hermes 存在的意义就在于此。

    注: GIC ,全称 Global Interconnected Cloud ,全球多点分布式一体化云平台,是首都在线基于 GPN ( Global Private Network )全球私有网络服务提供的跨界连接的云平台。

    免费试用体验首都在线 GIC 和 GPN 。
    注册地址: www.capitalonline.net

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2929 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:43 · PVG 10:43 · LAX 18:43 · JFK 21:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.