因为后期的范围比较大,用户比较广,我们后期的设备量会达到几万台。当时我们就考虑到,未来自动化运维相关的东西,考虑到不能再用传统的思路进行运维了,因为那样的话,对于运维的压力就太大了,几百台、几千台设备的时候可能还好,但是到了上万台设备之后,再用传统思路运维,压力是不可想象的。
在这个架构中,缓存是内容分发特别主要的组件,它把所有热点的内容,缓存到边缘,实现用户的就近访问,改善用户的访问速度、提高服务质量。目前天翼高清项目主要用这个架构,后面我们会基于整个架构再做图片和静态 页的加速。另外缓存服务器,我们用的是三级缓存,分别是硬盘、固态硬盘还有内存。这就是我们整个的CDN架构。
下面这个部分就是我们使用Docker的落地。首先我们在前期调研了以下容器技术有哪些优势,容器的生态系统中,我们运用Docker和系统中的生态组件,我们到底具体能实现哪些东西
第二部分,我们用的是缓存。刚才介绍了,缓存在CDN中是非常大的一个组件,它占的比重是非常大的。基于ATS我们做了相应的开发,这是我们实现的第二个业务的容器化。
第三个点播转码和业务切片的软件,最后也要实现容器化。还有Nginx,最后是GSLB全局调度。
有了这些组件,实现容器化,要实现这些组件的一键部署,包括一键生成镜像,一键升级所有的业务,还有自动化配置相关的东西,最后通过自动化的方式解放运维,提高运维的效率。
另外再有一部分,Etcd存储集群,这是我们配置相关的集群,大家把前期的配置,都会默认到写到Etcd集群里面去。当对应的某一个Slave需要对应的配置的时候就去Etcd拉去配置,实现每一台设备的差异化。目前主要用IP作为同一软件唯一的区分方式。
下面这部分就是我们持续集成相关的东西,当一个工程师把代码提交到我们的服务器上之后,当文件中的标志改变了以后,会自动构建生成Jenkins的Job,自动生成镜像,如果成功的话就PUSH到我们测试环境里面。如果测试成功的话,就会发邮件通知,告诉运维同事,这个镜像可以用了,以及我们的Etcd集群里面,配置也会做好相应的准备,就可以自动向Slave集群里面下发任务了。
当然这个地方主要是用Jenkins做的集成,不可能每一次都是成功的,如果失败了,我们也会发相关的邮件通知,把错误的日志信息发送到负责相关代码的工程师的邮箱里,通知修改代码,直至生成镜像。
这里面还有一部分是Mesos Master集群,我们下发任务的时候,也会去Etcd里面取,另外也有一部分内容要从Master往Etcd集群里面写内容。还有一部分是Mesos Master和Mesos Slave之间的自动调度。如果设置选择了有10台服务器进行部署设备,但是你可以部署9台,如果其中有一台设备出现了问题,类似于宕机,它就会默认的再另外一台设备把这个任务集成。访问Mesos Slave的时候,也会把IP放进去了,如果IP内容访问服务失败了,会默认再探测另外一台,这样就实现了弹性调度。
我下发任务以后,会检测Mesos Slave是否有镜像,如果没有的话就去下拉。每次下发任务的时候,如果有镜像的时候,第一次会把镜像拉下来,如果想第二次再下发任务使用相同的镜像的话,可以设置一下,还可以再下拉一次,也可以不设置,这个就要看大家自己的选择了。
最近我们才上线的福建省的缓存服务,26台Cache设备,这些设备最终都会纳入到整个管理平台上去。目前来讲,一共有200多台物理设备,业务范围有直播、点播和缓存。目前我们主要做的就是缓存相关的一些,把软件都放到我们的Mesos直播管理平台上。因为Cache服务量是特别大的,特别是用户量越大,Cache服务器就会越多。考虑到Cache服务器,后期可能有上万台的设备,我们在搭建另外的Mesos集群专门进行管理Cache。
另外说一下我们的升级次数,这些业务都升级了几十次,最终都平滑升级了,中间肯定遇到一些小问题,一些小坑,大家也都会去弥补它。

最后一个部分给大家讲一下我们在整个落地过程当中遇到的一些问题。第一个Docker默认共享内存太小,普通权限无法更改,最后我们就给了最高权限。现在新版本Docker已经支持更改共享内存了,在测试环境里面我们用新的命令去更改,目前测试效果还是比较理想的,并没有出现致命的问题。后期我们也会把最高权限去掉,使用命令行进行共享内存的更改。
另外一个问题,Docker最高权限会把容器107G存储给写满,如果你写满之后,再想生成一个容器的话,Create成功,但是RUN不起来。这个有两个方法,一个是更改107G存储,给它一个2T或者4T的大硬盘,这样的话不能从根源上解决问题。最终我们想了一个办法,从业务软件上避免这个问题。首先把日志尽量往小了写,另外把日志映射出来。
另外一个问题,我们在直播程序中,直播转码和切片中我们需要获取CP方给我们的组播流,但是我们获取不到组播流,最后我们给这个容器HOST模式,性能上几乎没有损失了,用的 络可能比较多一点,目前我们还在用HOST模式。
还有一个可能是Docker的bug,防火墙进行修改以后,Docker 络环境是不通的。修改了防火墙,重启防火墙之后,之前RUN起来的镜像,再RUN的时候, 络是不通的。目前我们的解决方案,只能规避它,我们在使用镜像的时候,先把防火墙所有的配置参数调好以后,具体后面再用镜像的话就会好一点,不要重启防火墙。
我们使用Cache的时候,要对Cache软件要有一定的了解,你用的内存比较大的时候,你下发任务的时候,对内存配置比较小了以后,容易发现这个容器特别慢,因为特耗内存。在做任务下发的时候,要对业务软件有一个更加了解以后,再容器化和下发任务,遇到的坑可能会更少一点,不能以为给它最大的就是最好的或者是一些相关的操作。这就是今天分享的全部内容,谢谢大家!
Q&A
Q:你刚才提到直播比较耗CPU和硬盘,CPU我可以理解,硬盘是怎么理解/span>
A:因为电视直播的话,我们现在有一个比较重要的服务,直播内容是支持7天回看的,要在直播的时候,需要把7天的内容全都缓存下来,存到本地硬盘上,但是7天以后是自动删除,7天的内容要存到硬盘上,频道比较多的话是比较耗硬盘的。
Q:你们的直播对外服务吗们是不是能用你们直播的CDN调用、SDK这些/span>
A:我们有对应的盒子天翼高清,目前在北京市还没有发,辽宁、山西和福建省已经发了,其他的省份都会陆续发盒子,现在我们的用户量大概有将近30万个,后期全国各个省都可以买到相应的盒子。
Q:我想请问一下,容器是HOST模式,你们是怎么用的,端口有可能是在镜像里面或者在容器RUN的时候定义好的。
A:Etcd配置里面会把这个业务用的端口定义好,如果我们要用取这个对应的服务的时候,会去Etcd里面拿到这个端口 ,用的时候用这个断口 ,取这个容器以后,已经把端口 分配好,用HOST的时候,直接用宿主机的IP的地址。
Q:性能上有没有一些损耗/span>
A:HOST模式直接用宿主机的 络,跟我们的直播测试以及用HOST模式和直接在物理机上不用Docker,几乎是持平的。
Q:我有两个小问题,第一个问题,CDN云是集中部署的吗是分散在每个省部署的。如果是分散部署的话,包括Mesos中央节点和省节点还要做调度吗二个,CDN主要是内容分发,内容存在硬盘和缓存上,这块不用Docker,你们的Docker只是做应用程序包括中间件、缓存/span>
A:CDN的加速肯定是全国各个省份,包括地级市都有我们的缓存设备,我们的CDN整个 络架构有三大内容中心,九大分中心,最后到省节点、地市节点,全国都有。目前我们用Mesos管理整个集群。刚才你说的问题,我们目前用了一个大集群来管理全国的设备。
Q:你的内容存在磁盘上,是大数据的存法还是什么,你们放在Docker上是一个中间件缓存的东西/span>
A:主要的内容上,肯定存到硬盘上,但是我们是在容器里面对硬盘进行读写,这个硬盘是在容器里面可以访问的。具体是存到这个硬盘上去,目前就是多个大硬盘,硬盘是用裸盘存的。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!