2.12离线计算 离线计算是不需要及时反馈,但需要长时间计算的一个任务。例如,从日志中获取分析用户行为这样的任务,系统首先将资源从硬盘或网络上
2.12 离线计算
离线计算是不需要及时反馈,但需要长时间计算的一个任务。例如,从日志中获取分析用户行为这样的任务,系统首先将资源从硬盘或网络上读取到内存当中,然后进行对日志进行切分。从切分的日志中,获取到需要的数据字段。离线计算通常使用MapReduce的方式来进行计算。Map函数将一条完整的日志进行切分,Reduce进行做数据统计。离线计算的特点是数据量非常大、能够通过分治的方法分步骤、数据在计算前已经齐全,计算过程中数据不会再做任何改变、可以批量查询结果。
3 DOCKER虚拟化
计算机虚拟化技术由来已经很久了。可以虚拟化硬件,虚拟化内存,虚拟化通信。软件架构的虚拟化能够帮助系统解决复杂的问题,提高系统的效率。在Linux容器中,不得不提到的就是Docker,Docker引擎的核心底层是一个Linux容器,因此许多Linux发行版,在后来升级中都加入了Docker容器作为他们的虚拟化容器。
容器有效地将由单个操作系统管理的资源划分到孤立的组中,在每个单独的组之间,可以平衡有冲突的资源的使用需求。在虚拟化技术的条件下,既不需要模拟指令,也不需要编译。容器可以不需要任何专门的编译机制,直接运行在核心CPU上。
Linux容器其实已经是一个非常老的技术了,在10多年的技术演变,多年架构的演化中,已经非常成熟了。后来LXC项目借鉴相对成熟的容器概念,并基于许多新的内核特性扩展出了虚拟化容器这一概念。随着Docker技术架构在不断的升级换代,现在也变成众多互联网企业Linux容器的不二之选。
3.1 Docker虚拟化
Docker是一个Linux的虚拟化容器,它可以帮助开发者和运维人员高效地构建应用。开发人员和运维人员可以很方便地创建运行一个Docker私有仓库,并保存镜像应用,可以让应用脱离底层机器,而且Docker创建的私有仓库也可以随时随地地获取应用镜像,无需通过系统应用的安装和部署来完成。Docker也可以帮助开发人员如果需要创建一个分布式应用程序。
在搭建分布式系统的时候。如果使用标准的tomcat,需要为每一个机器都部署相关的应用。其中有大量重复的操作,使运维人员工作量大大增加。传统的做法需要对tomcat、mysql、jdk等等分别配置一遍。经过如此大量的操作后。如果遵循一个开发环境、一个测试环境和一个产品环境,还需要进行功能测试,看系统是否正常工作,保证测试环境与生产环境能够保持一致。在这里很多时候可能会发生一个问题,测试人员在全部测试通过后,准备部署到产品环境。但是,由于产品环境发生了变化,导致某些功能无法运行。这样就会回档,重新部署。像支付宝、微信、携程这样的应用,如果半小时不能紧急修复线上环境,这样会对公司产生很大的影响。
还有更可怕的是,如果需要对服务器做迁移,将一部分应用部署到其他的服务器上。这将会是一个灾难级的操作,因为往往需要重新部署项目。这是一件琐碎又无趣的“体力活”。然而Docker提供了一个聪明的办法,就是将整个应用(不如:mysql)打包成一个容器应用。那么意味着,在迁移项目的时候只需要在新的服务器上安装docker,然后安装镜像,最后启动就可以了。不需要对任何配置文件做改变,一来,大大的节约了运维人员的时间。二来,降低了部署过程中出现的风险。特别对于分布式系统来说,在启动组件具有先后顺序的时候,更需要通过docker去脱离底层系统。
3.2 Docker集群
在生产环境中,往往会用到docker集群的需求。Docker集群最核心的问题是如何让不同主机之间的Docker容器可以相互通信。