Docker在千寻位置的实践

以下是精彩内容整理:
千寻位置
千寻位置以“互联网+位置(北斗)”的理念,通过北斗地基一张网的整合与建设,基于云计算和数据技术,构建位置服务云平台,以满足国家、行业、大众市场对精准位置服务的需求。
千寻位置是一个基于卫星定位、云计算和大数据技术的位置服务开放平台,面向企业和开发者、提供精准位置服务运营的平台型公司;致力于让位置创造价值,将公司打造成为提供精准位置服务、数据积累与挖掘、数据融合增值服务、具有全球竞争力的新兴产业集团;以卫星定位为基础,融合各类定位技术,针对特定的应用场景,不同的应用终端,推出与实际场景相结合的解决方案,向各类终端和应用系统提供高精准位置服务。
千寻位置服务是做什么的呢?我们能够提供亚米级到厘米级,甚至事后静态处理毫米级的高清定位服务,为什么能够做到这么高的精度,其实背后有我们地基增强的一张网,我们全国有1500多个基站,这是千寻自己建设的。用户的终端通过接受天上的卫星信号,把信息发送到我们的播发平台,播发平台连接地基增强的站,背后有一个复杂的算法加工,最后把处理过后的数据铺到终端上去,卫星信号经历过电离层、障碍物,还有各种复杂的场景,其实是有一定偏差的,我们就是要努力消除偏差,这就是千寻位置为什么能够提供到亚米级、厘米级的,甚至是静态处理毫米级的最根本原因。
毫不夸张的说,千寻算法可以说是国内在算法领域里面投入最多的一家公司,正是因为我们投入了巨大的人力、物力,所以我们才能够得以对高清定位市场的诉求提供很好的服务。
Docker在千寻位置的实践

图为千寻网站架构图。技术无所谓优劣,在合适的人、合适的团队手上,才能够发挥出它的作用,然后解决公司当下和未来可能出现的一些业务场景。我们的架构中,一边是我们公司的网站,一边是我们的服务售卖平台,一边是用户使用过程当中计费相关的,背后的播发是有播发团队去负责的。

Docker历程
千寻是阿里巴巴和中国兵器共同投资成立的一家公司,与阿里云深度合作,无论从ECS还是RDS,还是各种各样云计算相关的,当下有一千多台ECS,千寻Docker的历程分成了几个阶段:
在2014年到2015年的时候,用普通的ECS,公司也会做一些云集上的研发,适配各种业务场景,那时候人也不多,我们开了几十台几百台机器即可满足大部分的需求;
到了2016年,公司组织架构也做了一些调整,业务也在发力,对技术也提出了更多的要求,经过技术小组讨论,我们决定尝试在部门引入Docker,Docker并不是特别适用于CPO密集型或者是RAO密集型的,所以我们还是小心求证,不能步子迈得太快,不可能一下子把整个生产环境全部切到Docker上面去;
2016年8月,在线下我们的开发环境和测试环境下面就尝试着去用Docker,效果已经非常明显。每来一个同学就直接给他一台机器,每一个测试的同学都有一套独立的环境,我们网站差不多有40多个应用,如果每个应用部署一台服务器,这个代价还是蛮高的,现在直接给一套Docker的环境,按照规则根据我们设定去做一些安装,这是非常方便的。切到阿里云的Docker上去,好处是它提供了丰富的管理手段,包括监控、运维,包括它做了充分的测试,每一个新版本上来以后,都是经过充分测试才会放出去。我们自己用标准的Docker时候,自己设立了虚拟路由,解决了容器之间互通的问题。
2016年12月 生产环境阿里云Docker,阿里云的Docker天然支持容器之间的互通,它在底层的网络层做了一些处理, 12月份我们开始把相当一部分应用切到我们的生产环境上面,切到阿里云的Docker上去了。
资源利用不充分,1000+机器,服务扩容不方便,开发测试和生产配置不统一,基于这些,千寻切入Docker后有如下情况:
(1)测试环境:几十个系统,一个测试同学一套完整环境,对比机器数(待评估)
(2)使用阿里云仓库管理镜像包,相比以前方式,不需要手动拷贝包,CI集成起来很方便(3)compose管理,使用阿里云管理集群,页面化管理
(4)最开始解决dubbo调用,手工解决网段问题,后来用阿里云的网络,天然打通
(5)标准docker,自己解决夸主机容器互联(虚拟路由,指定网段)

Docker实践
在用Docker的时候,我们有一些自己的东西在里面,比如统一配置中心,从生产上来说,我们希望一个包可以丢到不同的环境里面去,只不过需要给它事先设定一些东西,可能在生产环境它是连着数据库,在开发环节连着另外一个数据库。我们也做了一些基础性的建设,就把统一的配制中心搞起来了,它同样适用于ECS这种情况。
我们同时还要兼顾一下开发同学的效率,开发同学如果感觉很不满意,基本上就是很失败了,比如说日志路径,生产环境所有的应用是日志路径,我们放了个人用户下面。开发同学用的是同一套配置,我们做到能够允许在本地的某一个地方去做一些覆盖,如果发现你这个地方有这样的一个K存在,我就不会使用配置中心,这样就可以大家统一都用同一套配置中心,同时又有自己的个性配置。生产环境只有一套配置中心,那我们有了配置中心,容器在启动的那个时刻,它也会到我们配置中心里面去读配置项。
使用Docker的好处,相信大家应该对Docker都有过比较深的了解,具体如下:
使用阿里云Docker,我们直接一个包放到我们的Docker容器里面,生成一个镜像,这个镜像不管是在开发环节还是在测试环节,还是在哪条生产环节,它都能够无缝的衔接上,这是我们用Docker的一个好处;
使用阿里云镜像仓库是有好处的,省得自己拷贝来拷贝去;
CI基于Docker,算法部门对环境要求较多(如ubunt,centos等),有多种的环境需要对算法进行验证和加工,所以这也是基于Docker去做的;
统一的Dockerfile;
数据卷(集群中多ECS数据卷共享建议使用NAS,可在阿里云容器管理中配置);
使用阿里云容器管理控制台;
创建集群注意网段不要和vpc冲突,集群中一台ECS需要占用一个C段;
偶尔遇到旧容器(名)清理不干净;
一个进程一个容器,admin;
统一配置中心;
非CPU密集型和高I/O型应用。比如像我们自己的播发平台,我们每秒钟就要往下吐数据,基本上就不太适合去做Docker,还有算法在持续不断的进行运算,这个也不太适合去用Docker。
我们一方面要做一些自己的基础化设施建设,另一方面还要响应公司的业务部门的需求,所以很多基础设施做的不完全够,自动化运维和日志监控这一部分,接下来的阶段我们可能会和运维同学一起来做,聚集各部门的能量才能把事情做好。

本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

上一篇:【Flutter】Dart 数据类型 ( dynamic 数据类型 )


下一篇:优化介绍及应用实践