当前位置:C++技术网 > 资讯 > 云平台开发架构分析系列:1 云平台系统基本架构分析

云平台开发架构分析系列:1 云平台系统基本架构分析

更新时间:2017-06-17 01:23:53浏览次数:1+次

    历经半年的开发,从1月份到6月份,我一个人完成了云平台的完整的开发。从最开始的毫无概念,到现在的清晰的架构,其中学到了不少东西。然而当时也都是顾着赶进度赶紧研究,也没有总结,虽然实现了,但是或许也不能说出个所以然。现在专门花时间来做一个总结。鉴于个人水平有限,做的不好的,还请多多指正。
    这些经验是绝对的纯粹的项目经验开发干货,是服务器从零到有开发的一个完整的项目经验分享。一部分是写给公司接手我工作的同事了解,另一分部是为了整体提升自己的水平,再一部分是分享给所有想从事服务器开发的网站会员。经验珍贵,就不直接免费完全公开,如果您支持我们网站,可以开个会员,费用并不多,也是为了网站能够有点收入可以持续运营下去。而这些经验,用钱都不一定买的来的。希望读者的您明白这个道理。
    不管你有没有做过服务器的开发,这系列的文章都会对你大有裨益。如果是你需要的,请好好阅读一吧,如果有不解,可以在文章后面留言,一起讨论学习。
    我先将这个系统的基本架构的示意图贴出来,方便理解。云平台架构图如下所示:
    云平台项目开发分析系列1:云平台系统基本架构分析
    先简单解释下云平台的概念吧,不保证一定准确,只能说个大概哈。当然,我们这里是从技术代码层面来理解云平台的。云平台就是一个系统,运行在云服务器上。这个系统如果能够对外提供标准的rest api,利用服务器提供的功能服务,就是云平台了。作为平台,就是提供服务的一个系统,而提供服务的形式肯定是API。第三方利用你的API,可以进行二次开发。如果你的系统是封闭的,不提供API的,称不上是平台。如果API不对外开放,只供内部系统使用,那么就是私有云平台;如果API对外开发,可以称为公有云平台。
    当然,你的服务器可能不是使用云服务器的,比如像传统的服务器。其实对于平台系统来讲,其实不关心这些的。但是在系统平台层面,我们都可以理解为云平台。云平台的含义也表明平台是一种服务,服务是收费的。比如很多第三方的平台接口,包装了各种API,再对我们提供统一的API,然后对我们进行API使用收费,这就是一种平台服务,也就是公有云平台。
    当然,这个概念我们无需在意,大致知道这么回事就行。我们更关心的是系统如何开发出来的,对吧。所以我们继续来看看云平台架构。
    平台一方面要和客户端进行通信控制,另一方面还要对web提供支持。所以总体来看是分为两部分的:TCP服务器和Web服务器。TCP服务器是控制通信和核心业务逻辑的中心。而web服务器支持管理系统、微信、APP等各种形式的api实现。如果单从这两个部分来讲,两个服务器还是独立的。然而我们需要从微信或者web后台管理系统来控制设备,那么就需要将两个服务器串接在一起。也就是说,两个服务器还需要通信。这就是我们看到的进程消息队列通信。进程消息队列通信打通了两个服务器的沟通,可以让控制流在两个服务器之间流动,这样才能实现远程控制设备。
    远程控制设备是物联网中太常见的功能,基本的模型就都和我们这个架构一样。所以我们这个架构也是很具有参考价值的。然而我这里并没有将两个服务器拆分的很细,也是为了方便理解。

1.TCP服务器
    TCP服务器使用socket通信,编程开发还是标准的几步,学过socket编程的都知道。不过我这里要说的是,为了实现更加通用的跨平台应用,我们采用了libuv库。而libuv封装了底层的通信细节,而上层的逻辑还是一样的。我们不用关心底层到底是如何一步步实现的。这样可以让我们节省大量时间。因为libuv是开源的,我们也可以直接阅读源码来学习。libuv在Windows系统使用的是完成端口IOCP,在Linux中使用了Epoll,都是支持高并发的通信机制的。在性能上都是很不错的选择。只不过,libuv目前的资料太少,这给学习造成了一定的难度。

2.Web服务器
    web服务器我们当然也是采用了支持高并发的nginx服务器,然后使用uwsgi和web.py,用python脚本来写web接口。web.py是一个轻量级的web服务器,我们用它来写接口是够了的。另外,我们也可以方便的在python中使用C++的库,让python直接复用TCP服务器中写的基础库。python的灵活和C++库的高性能,结合在一起,可以确保开发效率很高的同时运行效率也很高,有了代码复用也是很省事的。
    而web网站我们则是基于h5网站,使用bootstrap和jquery来实现。在h5中,通过使用web服务器提供的rest api来和服务器交互,实现功能。而因为历史原因,我们的微信公众号使用的是asp.net开发的。所以还需要另外一个小IIS服务器运行。同样也还是使用rest api来和我们的web服务器通信。
    而在web后台管理系统中,我们使用了百度地图作为各个站点的分布,所以这里也就用到了百度地图API。而微信公众号要实现微信公众号的各种功能,就用到了微信的jsapi接口,然后公众号中也有地图导航服务,因为微信封杀了百度地图,最后没有办法,只能改用腾讯地图。然后就是短信平台,在注册、重置密码时都需要进行短信验证,所以这里我们就使用了短信平台的api。这些第三方API都是属于公有云平台服务的。我们的后台管理系统不仅用了自己平台的API,还用了这么多的API。

3.数据管理
    在web后台管理系统和微信公众号网站中,都是不存储数据的。所有的数据都是通过api接口汇总到web服务器统一存储和管理。而TCP服务器自然也会产生大量的数据,这些数据自然也要进入数据中心存储和管理。所以TCP服务器得到的充电桩的状态都会实时刷新到数据中心,然后数据中心提供API,这样网页客户端或者APP都可以实时查询各个设备的状态。

4.远程控制
    通过数据中心,我们可以将两个服务器的数据打通,数据共享。我们可以通过web服务器查看设备的状态,然而我们并无法用web服务器来控制设备。
    因为我们的TCP服务器和web服务器都是在同一个计算机中运行的两个进程。要实现web服务器到TCP服务器的控制,可以有很多方式,只要是能够实现进程间通信的都可以。我们这里采用了进程消息队列来实现的。web后台管理系统或者微信中发起了控制命令,则会通过进程消息队列发送给TCP服务器控制命令,TCP服务器接收到命令后,然后执行命令,再将执行结果原路返回,就完成了一个完整的控制链。这也就是我们知道的远程控制的逻辑。

    整个云平台也就是这样的一个基本架构,我们这里是第一篇,不展开讲述。先能够有个总体的印象,就可以了。每一个部分的实现,则是具体的复杂的。后面再一一展开。