zabbix 无用告警纪要

Windows 2008

  • Service "sppsvc" (Software Protection) is not running (startup type automatic delayed)
  • Service "WLMS" (Windows Licensing Monitoring Service) is not running (startup type automatic)
  • Service "stisvc" (Windows Image Acquisition (WIA)) is not running (startup type automatic)
  • Service "ShellHWDetection" (Shell Hardware Detection) is not running (startup type automatic)
2017/3/10 posted in  云计算和大数据

夹缝求生,PaaS要靠什么来刷存在感?

此时此刻,当我们回头审视整个云计算领域,风景从未如此绚烂。

据贝恩()最新报告指出,预计到2020年,全球云计算市场规模将达到3900亿美元,这一数字与2015年的1800亿美元相比,年均复合增长率CAGR()达到17%。

210519563928

中国市场,2015年云计算市场整体规模为394亿元,CAGR保持在30%以上,这意味着,到2020年,中国云计算市场跨过千亿元大关几乎没有悬念。与此同时,2015年,公有云占中国云计算整体市场规模的33%左右,且CAGR达到惊人的49%,即到2020年,公有云将毫无疑问的成为中国云计算市场的中流砥柱。

蛋糕越做越大,对整个云计算行业来说皆为利好,但相比IaaS和SaaS非常显著的增长趋势,PaaS的表现并不尽如人意。

尤其在中国市场,虽然PaaS“云时代操作系统”的命题早在10年前便进入国内,且一直以来都被寄予厚望,但国内始终没有出现令人信服的PaaS平台。更加令人意外的是,随着IaaS市场的进一步成熟,以及SaaS行业裂变式的进化和资本的蜂拥而至,PaaS与IaaS和SaaS的边界正在变得模糊,甚至消失,PaaS的存在感越来越微弱。

一、透过IaaS和SaaS的夹缝,被边缘化的PaaS并不冤枉

传统意义上,云计算领域从底层往上被划分IaaS-PaaS-SaaS三层,PaaS天然的被夹在了IaaS和SaaS当中。

沿着云计算发展的轨迹分析,基础层IaaS厂商的率先爆发为云计算开辟出了万亩良田,随之而来,数以万计的SaaS应用得以在“辽阔的田野上”播种和生长,而PaaS平台则一边扎根在IaaS土壤中,一边为SaaS们出售各种生产工具、肥料和生产技术,为的是让SaaS作物能够更好、更快的破土而出。

换句话说,如果没有PaaS,SaaS应用一样可以在IaaS上长出来,只不过长得会慢一点、产量会低一点。因此,与其说PaaS平台成就SaaS应用,不如说是SaaS开发者对开发效率和易用性更高的要求,倒逼出了PaaS平台。

PaaS平台安身立命的前提是,确确实实能够帮助SaaS开发者降低成本,提高效率,即开发者用PaaS平台“卖一个锄头”所花费的时间和效率成本小于他自己去“做一个”。

那么,问题来了,国内云计算市场上有没有能够帮助SaaS开发者高效且低成本解决全生命周期中遇到的各种问题的PaaS平台呢?答案实在令人抱歉。事实如此,PaaS便怨不得被市场边缘化。

当然,我们也要看到客观原因。中国的云计算市场,尤其是企业级SaaS市场,不过是一个从2013年走上台前,2015年爆发的新兴市场,SaaS产品的数量和体量并不足以倒逼出大而全的PaaS平台,即便是走在To B企业级服务和云计算领域最前列的美国,PaaS在整个云计算市场的占比也不过5-7%。

210519412864

随着国内企业信息化和云端化成为主流趋势,庞大的需求群体让企业级SaaS市场快速催熟,企业级SaaS应用越来越多,且相互之间对协同的要求越来越高,PaaS平台的意义日渐凸显。所以,PaaS市场的空窗期对中国云计算从业者来说,绝对不是坏事,它意味着一个拥有广阔想象空间的新机遇正在来临。

二、从细分到跨领域,从孤岛到跨层应用,PaaS希望向台前

PaaS,平台即服务。平台的概念本就十分宽泛,放在PaaS当中便越发难以准确诠释。咨询公司Gartner将PaaS平台分为两类:一类是应用部署和运行平台APaaS(),另一类是集成平台IPaaS()。按部署的角度,PaaS又可细分为数据库服务、应用开发、应用基础架构、中间件服务等。

从APaaS来看,国内已经有一些提供细分领域服务的PaaS平台,主要集中在通讯、支付、位置服务、智能识别等几个领域,具体厂商不一一点名。

整体来看,国内市场对APaaS平台的需求还远没有被完全满足。未来将有更多的APaaS平台为SaaS开发者提供部署和运行服务,他们之中一定会出现以细分领域为切口,逐步发展为跨领域PaaS的玩家给行业树立标杆。同时,国外的云计算巨头的触手将会很快触及中国市场,为中国SaaS开发者提供较为成熟的APaaS平台。

接着来看IPaaS。目前,许多企业级SaaS厂商都在产品体系中设置了“开放平台”。主要原因在于,国内SaaS应用开放的API接口普遍不够多,导致企业用户在租用多个SaaS服务后很难集成,在企业内部仍形成一个个的信息孤岛。

站在企业用户的角度,随着API调用的增加,跨层应用的需求也越来越多,他们需要更加集成化的SaaS产品。但是,当他们发现多个SaaS产品事实上却是很难做到完全“打通”的,这直接导致企业在选择SaaS产品的决策成本非常之高。

当SaaS产品无法通过售后集成来全面满足企业用户的个性化需求,为了能“卖出去”,SaaS厂商只能将集成环节前置,通过“开放平台”,尽量将各种跨层应用集成在自身的产品上。这种做法实际造成了SaaS应用开发成本的增加,羊毛出在羊身上,成本最终还是会通过销售转嫁到企业用户身上。

按理来说,用户对集成的需求更应该是由SaaS厂商通过IPaaS平台来搞定。但市面上并没有能够帮助SaaS开发者解决问题的IPaaS平台,他们只能自己来做。某种意义,SaaS厂商已经在做PaaS平台的工作。一不做二不休,部分SaaS企业便将PaaS写进了自家的宣传资料里,更有甚者刻意给自己贴上PaaS的标签,先行占坑,以期标榜出一个更大的概念。

三、答此3问,PaaS可强刷存在感

PaaS平台背后的用户是SaaS开发者群体,而To B的SaaS应用走向PaaS平台的目的本质上是为了匹配其客群()对云端产品的需求。

对企业用户来说,他们在选择一款SaaS产品的时候无非面临“易用性”“性价比”“适配性”这3个核心问题。所以,上述三点正是PaaS平台需要着力满足SaaS开发者的需求点。

1、PaaS平台是否能够让SaaS系统更好用?

对B端企业用户来说,决心摒弃传统IT系统,转而选择SaaS化产品的内在驱动力是老系统不再适用于新形势。换句话说,即原来的系统不好用了,希望SaaS模式的产品能具备更好的易用性。

企业级SaaS行业经过近几年的蓬勃发展,企业全生命周期上的每个节点在市面上都可以找到形形色色的SaaS应用,因此竞争日趋激烈,导致行业卡位者不断寻求差异化优势。但在企业用户眼中,无论SaaS提供商如何定义其差异化的竞争优势,归根结底落在一个“通”字上,即利用云端技术,打通企业的信息流、资金流和物流。

举一个最简单的例子,企业客户在售前咨询时往往会问“一个账户是否能管理所有的系统?”,这个私有部署时代不是问题的问题,放在SaaS面前却成了个难题。试问,一套连账户体系都无法与其他系统打通的SaaS产品如何称得上“好用”?

SaaS的问题便是PaaS的追求,PaaS平台想要刷存在感,或在云计算大蛋糕上多切一块,就要从企业用户追求“易用性”的角度去思考,如何解决SaaS开发者的实际问题,而不仅仅只是告诉SaaS,我能满足你某某方面的需求,至于你客户的需求,与我无关。

2、PaaS平台是否能让SaaS产品更便宜?

毫无疑问,中国企业信息化的主要战役是中小企业的信息化,而中小企业客户对价格更为敏感,他们选择SaaS产品来推进信息化,有很大程度上是因为SaaS的价格更便宜,收费方式更灵活。

那么,PaaS平台是否能让SaaS应用的价格更便宜一些呢?从PaaS的业务逻辑上来看,这个命题是成立的。在工业时代,制造商从其他工厂购买通用零件组装成机器的成本远比自己加工更低,且效率更高。

回到云计算领域,趋势已经非常明显,不断有刚需性质的上层服务成为下层标配,也不断有下层服务集成打包升级为上层服务。那么PaaS平台便如同工业时代提供通用零件的厂商,提供数据库、存储、计算、中间件、流程等等服务,以此降低SaaS应用的开发成本。尤其是,容器技术已经成为业务快速交付、产品快速迭代的代名词,越来越多的软件厂商基于容器开发产品。

3、PaaS平台是否能让SaaS产品更适合于企业用户所处行业?

左右用户选择SaaS产品的胜负手往往来自该产品与其行业的适配性的考量,即SaaS产品能否满足企业的个性化需求。

业内关于通用型SaaS和垂直型SaaS的争论由来已久。整体来看,垂直型SaaS近两年在餐饮、医疗、建筑、健身等行业的发展非常快,而通用型SaaS厂商则倾向于提供以标准化产品为核心的垂直行业解决方案。

与SaaS厂商自己搞行业解决方案的做法相比,从PaaS平台的角度切入细分行业显然更具优势,原因很简单,PaaS平台对垂直行业支持服务可以“卖”很多次,组合调整的空间和余地也更大。

因此,在企业级SaaS应用愈发重视垂直行业特性的背景下,如果PaaS平台能够让SaaS开发者获得更好的行业适配能力,未来或许大有可期。

*文章为作者独立观点,不代表虎嗅网立场
本文由
温二爷 授权 虎嗅网 发表,并经虎嗅网编辑。转载此文章须经作者同意,并请附上出处( 虎嗅网 )及本页链接。原文链接https://www.huxiu.com/article/182611.html
关注微信公众号虎嗅网(huxiu_com),定时推送,福利互动精彩多

夹缝求生,PaaS要靠什么来刷存在感?

2017/2/27 posted in  云计算和大数据

ZABBIX 主机资产记录

1,资产记录总体介绍:
每个公司监控一些设备,但数量过多以后不容易直接查看,之前见过有人就记录到一个记事本的,每次进去都要翻一下什么服务器,具体配置参数是什么,比如IP地址,别名,mac地址,操作系统和一些备注等。 数量多了以后每次都要进去检查,zabbix的资产记录就是解决该问题的,可以将我们监控的所有设置添加到这个资产记录中,这样可以一目了然。这个信息我们可以通过添加主机监控或编辑主机信息的时候进行添加编辑资产记录。zabbix如何添加主机监控,请参考之前的教程:[原创]zabbix 如何添加主机监控(11)

2,配置资产记录
添加办法:配置–》主机–》选中要编辑的主机–》点击 主机资产记录 进去可以添加或编辑。

2
这里主要说明下添加模式,模式是停用,里边没有资产记录信息。 有一个手工模式和自动模式,两种模式添加。
故名思议,手动模式就是需要自己手工添加服务器的参数信息。 自动模式:自动填充主机名和操作系统信息,其他信息依旧需要手工输入。

3,查看资产记录。
zabbix的web管理登录以后,点击资产记录–主机–选择需要的主机群组,可以查看我们已经设置好的主机资产信息,这样看起来就一目了然了。
2

点击总览,可以看到整体信息。
3

点击细节,可以看到该主机详细参数。
4

小结:

资产记录这块基础已经介绍完毕。看了网上其他资料,针对资产记录这两还有一些扩展应用的地方,比如清单变量:我们在发送报警通知可以使用变量{INVENTORY.}来发送故障服务器的基本信息。或者说这台服务器故障了,我们需要发送邮件给当前服务器的联系人,我们可以发送邮件给{INVENTORY.CONTACT1}或者发短信给{INVENTORY.POC.PRIMARY.PHONE.A1}。{PROFILE.} 宏变量依旧支持使用,当时现在强烈建议使用{INVENTORY.*}来代替。zabbix资产管理不仅仅是一个设备清单,还是一个告警联系人列表。

2017/2/24 posted in  云计算和大数据

京东从OpenStack切换到Kubernetes的经验之谈 - 今日头条(www.toutiao.com)

2017/2/23 posted in  云计算和大数据

Serverless,下一个趋势?

如果你看过有关2017年技术发展的预测,特别是云计算方面的预测,一定对Serverless Computing(无服务器计算)印象深刻。

AWS在2014年推出了第一个大型无服务器计算服务(AWS Lambda),其他云计算巨头也纷纷在2016年开展了自己的Serverless Computing服务。对于Serverless Computing来说,2017年很可能会是收获巨大突破的一年。
事实上,在Gartner推出的“ 2017年十大战略技术趋势 ”榜单中,Serverless Computing赫然在列。Gartner将Serverless Computing看作是MASA(the mesh app and service architecture)的重要部分,并解释说,“MASA是一种多通道解决方案架构,利用云计算、无服务计算、容器、微服务、APIs及事件等提供模块化、灵活、动态的解决方案”。Gartner同时提醒到,这将是一个长期的趋势,需要IT采用新的工具和工作方法。

所以, 关于Serverless Computing

我们应该知道哪些事?

1. Serverless Computing并不是真的没有服务器

其实有很多人认为,Serverless Computing一词并不是十分妥当。我们的工作负载仍然在某个服务器上运行着,只不过我们不需要以任何方式部署、配置、维护或管理这些服务器。我们甚至不需要知道所使用VM(虚拟机)的类型和数量。

我们可以把Serverless Computing看作是对于终端用户的IT抽象和简化。虚拟化使用户不在需要知道哪些物理服务器正在运行;云计算使配置变得更容易,但仍需要用户选择VM类型、启动或停止服务;而Serverless Computing则更进一步,将VM类型选择、服务的启动和停止操作都省去了。

2. Serverless Computing是云计算的一种

Serverless Computing的另一个更具描述性的名字是FaaS(Function as a service)。就像IaaS、PaaS、SaaS一样,FaaS是云计算的一种。通过FaaS,用户为应用的某一特定功能购买必要的功能。

举个例子,假设企业有一个用来生成特定报告的分析应用。我们可以使用Serverless Computing来处理生成特定报告的功能。当分析应用需要完成这一报告时,服务将自动启动必要的云实例,并在功能完成后自动关闭。我们可以将FaaS用于整个应用程序或者某些功能。

3. Serverless Computing在代码运行时以毫秒计费

Serverless Computing将云计算按使用计费的模式提升到了一个新的粒度级别。例如,AWS Lambda按代码执行的每100毫秒和代码的触发次数向用户收费。

4. Serverless Computing的优势

Serverless Computing的一个主要好处是,创建应用程序的开发者不再需要花费任何时间处理基础架构并管理应用程序。开发者仅需上传代码,支持Serverless Computing的平台或服务将处理其他工作。

对于企业来说,支持Serverless Computing的平台可以节省大量时间和成本,同时可以释放员工,让开发者得以开展更有价值的工作,而不是管理基础设施。另一方面可以提高敏捷度,更快速地推出新应用和新服务,进而提高客户满意度。

5. Serverless Computing是DevOps的绝配

Serverless Computing在DevOps环境中运行良好,同样源于它最大限度减少了开发者在管理服务器上所花费的工作和精力。甚至在某些情况下,允许企业采用“NoOps”的方法,服务器的部署和管理都已实现自动化,开发者不需要与运维人员一起同步工作。

6. Serverless Computing与微服务架构相关

微服务架构下,开发者将应用拆分为一个个可独立构建、管理和扩展的小服务,而ServerlessComputing可以将之降低到更小的级别。

然而,行业内对于微服务和功能由什么组成,还存在分歧。两者之间的区别比较模糊,有些供应商在微服务和功能两个术语的使用上甚至可以互换。

需要注意的是,目前有一种趋势是将应用程序视为较小的独立部分的组件,而不是作为一个整体。

7. 不需要学习新开发语言

Serverless Computing支持广泛的编程语言和框架,大多数人员可以立即开始使用Serverless Computing,这样的语言支持,无疑是胜利和效率提升的一大助力。

8. Serverless Computing具有可扩展性

对于处于快速增长期的企业,Serverless Computing的可扩展性是其最具吸引力的特性之一。构建一个同时即适用于数百万用户又适用于数十个用户的应用,是当今开发者面临的最大挑战之一。

Serverless Computing消除了这一挑战,因为其每个功能都可以独立扩展,而不需要员工配置额外的VM或实例。

9. Serverless Computing也有缺点

首先,Serverless Computing很新,不容易找到有经验的工作人员和工具来支持。

其次,Serverless Computing简化了一些工作,却也让一些工作变得复杂了起来。将我们的关注点从一个大的应用程序或几个微服务,转为对几十个甚至上百个独立功能,需要有新的管理技术和流程。

第三,与每一项新技术类似,Serverless Computing短期内很可能会给企业带来额外的花费,并对企业的管理水平提出更高要求。

10. 有很多服务商提供Serverless Computing

想要使用Serverless Computing,目前已有不少供应商可选。除了文章开头提到的AWS及IBM、Azure等几家云计算巨头,包括好雨科技在内的一些新型云计算公司同样提供专业的Serverless Computing服务。

Author  CynthiaHarvey

Trans by 好雨科技 “支持Serverless Computing”

Serverless,下一个趋势?

2017/2/20 posted in  云计算和大数据

对Gartner发布2017年十大技术趋势的分析

近日Gartner公司着重介绍了在2017年对多个组织具备战略意义的重大科技发展趋势。分析师在座无虚席的Gartner ITxpo座谈会介绍了他们的发现。这次发布的十大技术趋势报告,可以总结概括为:以智能为中心,通过数字化实现万物互联。

Gartner将战略科技发展趋势定义为具有颠覆性潜力、脱离初级阶段且影响范围和用途不断扩大的战略科技发展趋势,这些趋势在未来五年内迅速增长、高度波动、预计达到临界点。

“2017年十大战略科技发展趋势为Gartner智能数字网(Intelligent Dgital Mesh)提供了舞台。”Gartner副总裁兼研究员David Cearley说,“这十大趋势中,前三个趋势体现了‘智能无处不在’,数据科学技术和方法如何演化,向先进的机器学习和人工智能发展,以将智能物理和基于软件的系统应用于机器学习和自适应。接下来的三个趋势聚焦数字世界,物理和数字世界日益纠缠。而最后四个趋势则着眼于智能数字网络所需的平台和服务网络。”

让我们逐一看看Gartner预测的十大技术趋势并进行分别简单地分析。

人工智能和高级机器学习

人工智能(AI)和高级机器学习(ML)由许多科技和技术(例如,深度学习、神经网络、自然语言处理(NLP))组成。 更先进的技术超越了传统的基于规则的算法,以创建理解、学习、预测、适应和潜在地自主操作的系统。 这就是智能机器出现“智能化”的原因。

“应用人工智能和高级机器学习带来了一系列智能实现,包括物理设备(机器人,自动车辆,消费电子)以及应用和服务(虚拟个人助理(VPA),智能顾问)”。Cearley说,“这些实现将表现为新一类的智能应用和物件,以及为广泛的网格设备和现有的软件和服务解决方案提供嵌入式智能。”

这个问题的关键在于如何产生嵌入式的AI技术,能够支持业务流程、模型,以及从一开始就被定义为企业中“智能”模块的应用。另外,资金也是个大问题。

智能App

诸如VPA的智能App执行人工助手的一些功能,使日常任务更加容易(例如,优先考虑电子邮件)及其用户效率的提高(突出最重要的内容和交互)。其他智能App(如虚拟客户助理(VCA))更加专注销售和客户服务等领域的任务。因此,这些智能App有可能改变工作的性质和工作场所的结构。

“在未来10年,几乎每个应用程序和服务都将包含一定水平的人工智能。”Cearley说,“这将成为长期趋势,不断发展和扩大人工智能和机器学习应用和服务。”

这对一些企业而言是一个巨大的机遇,目前在应用、基础设施和设备上的智能分量越来越重。运用智能应用的形式是通过新的智能特性嵌入到某一行业的现有应用程序中。麦当劳生产汉堡包运用了智能App,对汉堡包面包生产的监控由人工专为自动化,能够提高并保证质量。智能应用还拥有数据和分析的优势,如,每分钟通过照片分析超过1000个面包来检查颜色、形态和芝麻分布,并根据分析结果不断自动调整烤箱和流程,以保证生产最好的汉堡包面包。其带来的结果显而易见:避免了浪费,每年节省数千万元;加速生产并节约能源;减少人工成本。
智能应用对其他行业也有显著的价值,比如医学顾问。凯特琳癌病中心肿瘤学顾问,应用智能App可带来高价值的用户,并能解决复杂的问题,整理杂乱、非结构性和重复内容,并带给用户高影响力的结果。

智能事物

智能事物指的是超越刚性编程模型的物理实体,利用人工智能和机器学习来实现高级行为,与周围环境和人们交互更加自然。作为智能事务,如无人机,自动车辆和智能家电的不断普及,Gartner预计单独的智能物件将演变为协作的智能物件模型。

智能事物的预测,就是认为在可以预期的未来,任何事物都可以智能化,比如消费者产品、医疗产品、嵌入式产品等等。但这个预测已经滞后了,现在已经有这方面的产品,甚至都具备了可用性。比如Google、Uber研发的应用在通用道路的自动车辆;运用在特定环境的自动驾驶汽车:如无人收割机等;以及各种各样的机器人,比如零售机器人、迎宾机器人等等。
除了上述智能事物的形式外,还有协同智能。

虚拟和增强现实

沉浸式技术,如虚拟现实(VR)和增强现实(AR),改变了人与人和人与软件系统交互的方式。 Cearley说:“到2021年,沉浸式消费、商业内容和应用程序的格局将发生巨变。VR和AR功能将与数字网络合并,形成一个更加无缝的设备系统,能够协调来自用户的信息流作为超个性化的相关应用和服务。融合多个移动、可穿戴设备、物联网和大量传感器的环境将拓展沉浸式应,超越孤立的单人体验。客房和空间将与物体互动,它们通过网络的连接,并与沉浸式虚拟世界一起工作。”

时下,正是VR、AR兴起的时代。有各种各样的产品已经出现并投入使用,比如可以应用于模拟体验;对于科学研究来说,可以用于分子建模;医生也可以用于远程虚拟诊断并开出医疗处方,等等。孩子还可以应用这种技术,进行探索动物园等未知世界。这个趋势的预测已经滞后了,严格讲,不算趋势预测而是实实在在来临了。

数字化双生

数字化双生(Digital Twin)是事物或系统的多元软件模型,它依赖于传感器数据来理解其处境,响应变化,改进操作和增加价值。数字化双生包含元数据(例如,分类、组成和结构),处境或状态(例如,位置和温度),事件数据(例如,时间序列)和分析方法(例如,算法和规则) 。

在三到五年内,数以亿计的物件将由数字化双生的形式呈现。组织将使用数字化双生主动修复和规划设备服务、规划制造流程、操作工厂、预测设备故障或提高运营效率,以及执行增强的产品开发。因此,数字化双生最终将成为技术人员和传统监测设备和控制(例如,压力计,压力阀)的组合的代理。

这个预测没有什么新意。显然,物联网的发展显示了数字化双生的潜力。数字化双生可以理解为不断发展和扩张的数字化宇宙,这需要从智能生态系统的内容、广度和控制将继续从不同维度上扩展。

区块链和分布式分类帐

区块链(Blockchain)是一种分布式分类账(Distributed Ledgers),其价值交换交易(以比特币或其他代币计)按顺序分组成块。每个块链接到前一个块,使用加密的信任和保证机制,跨对等网络进行记录。区块链和分布式分类账概念日益广受关注,因为它们有望改变行业运营模式。虽然当前炒作是围绕金融服务行业,但是应用前景广泛,包括:音乐分发,身份验证,所有权登记和供应链。

Cearley说:“分布式分类帐有可能引起一场变革,但大多计划仍处于早期的Alpha或Beta测试阶段。”

该趋势预测的要点就是在不可信环境中增加信任的机制,对于重要数据和事件不可更改的记录,例如货币交易、财产登记或其他有价资产,不仅是被动式数据记录,同时能够有选择性的为事件增加动态预置行为。这个技术在供应链中蕴含着万亿美元的机遇。但是人们并不十分了解区块链技术,最大的挑战就是如何能广泛使用区块链。区块链的实施需要各方进行深入合作,区块链行业将如何发展,现在还无法预测是各方割据还是一家独大的局面。

会话系统

会话界面的当前焦点集中在聊天机器人(chatbots)和支持麦克风的设备(例如,扬声器、智能手机、平板电脑,个人电脑和汽车)。然而,数字网格有一系列不断扩展的端点,人们可通过这些端点访问应用程序和信息,或与他人。社交群体、政府和组织互动。随着设备网格的演变,连接模型将会扩展,设备之间出现更大的协作交互,为连续和环境数字新体验奠定基础。

现在已经有了成熟的方案,比如苹果的Siri,微软的Cortana、京东的小i,这类应用的共同特征是通过智能云服务,聊天机器人和个人助理成为对话媒介。甚至进入了婴幼儿产品市场,如腾讯的早教故事机小小Q、小米的早教故事机米小兔,就是通过智能云服务来达到人工智能对话的。语音对系统界面很重要,越来越智能、越来越交互的语音接口,将是人机交互的首选方式。未来的交互方式是一种主动性对话,将进一步增强语音交互。主动式语音协助由用户位置等数据进行支持,将会在没有人机交互的情况下,也能够提供指导和管理。随着语义分析的加重,会话语音的价值会增加。语音分析能够理解用户服务记录和社交媒体的各类数据并进行推理。

网格应用和服务架构

在网格应用程序和服务架构(MASA)中,移动应用程序、网络应用程序、桌面应用程序和物联网应用程序链接到广泛的后端服务网络,创建被用户视为“应用程序”的内容。该架构封装服务,并在多级别和跨组织边界公开了API,从而平衡了服务的灵活性和可伸缩性的需求与服务的组合和重用。 网格使用户能够具有针对数字网格(例如,桌面、智能手机、汽车)中的目标端点的优化解决方案以及当他们在这些不同信道上切换时的连续体验。

这只是基于理想状态的市场竞争中设想的。现实是,在非理想的市场竞争中,专有基础架构数量并不占优,要实现所有的软硬件基础架构无缝集成并协同,难于上青天。

数字技术平台

数字技术平台为数字业务提供基本的构建模块,是数字业务的关键推动者。Gartner已经确定实现数字业务新功能和商业模式的五个要点:信息系统、客户体验、分析和智能、物联网和业务生态系统。 每个组织都将有这五个数字技术平台组合的平台。

可以理解为对话式AI驱动平台。比如亚马逊的amazon echo+wink。物联网平台是解决方案成功的必要因素,现在微软Azure、ORACLE、Google、SAP等IT巨头都有涉足。回顾上世纪60年代,是主机系统,到70年代就是微型计算机,80年代是PC和文件共享LAN,90年代是服务器和图形界面,1998~2007年是因特网和网络应用,2007~2016年是移动和云,未来,将是对话式AI和物联网。所有这些并非割裂,而是互相交织。未来会有越来越多的基础架构和应用程序融合,组织需要了解这种融合,对他们的竞争力、应变能力带来什么样的影响。

自适应安全架构

智能数字网格和相关的数字技术平台和应用程序架构创建了一个日益复杂的安全世界。 Cearley表示:“规定的安全技术应作为确保物联网平台的基准。监控用户和实体行为是物联网中特别必要的一个重要补充,然而,物联网边缘是许多IT安全专业人员产生薄弱领域的新前沿,因此经常需要新的补救工具和流程,建立物联网平台必须考虑这些因素。”

自适应安全架构能够实现持续分析用户和实体行为,如外部身份和威胁智能,包含审查、规则/评分;持续画像;持续分析和验证。但是通常业务端会滞后于技术端,而技术端又滞后于设备和应用端,还要对安全行业有一个正确的认识——本质就是响应机构,是以解决问题为目的,而不管这个问题出现有多久。

感谢 徐川 对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ@丁晓昀 ),微信(微信号: InfoQChina )关注我们。

讨论

对Gartner发布2017年十大技术趋势的分析

2017/2/20 posted in  云计算和大数据

Gartner’s Top 10 Strategic Technology Trends for 2017

Today, a digital stethoscope has the ability to record and store heartbeat and respiratory sounds. Tomorrow, the stethoscope could function as an “intelligent thing” by collecting a massive amount of such data, relating the data to diagnostic and treatment information, and building an artificial intelligence (AI)-powered doctor assistance app to provide the physician with diagnostic support in real-time. AI and machine learning increasingly will be embedded into everyday things such as appliances, speakers and hospital equipment. This phenomenon is closely aligned with the emergence of conversational systems, the expansion of the IoT into a digital mesh and the trend toward digital twins.

Three themes — intelligent, digital, and mesh — form the basis for the Top 10 strategic technology trends for 2017, announced by David Cearley, vice president and Gartner Fellow, at Gartner Symposium/ITxpo 2016 in Orlando, Florida. These technologies are just beginning to break out of an emerging state and stand to have substantial disruptive potential across industries.

Intelligent

AI and machine learning have reached a critical tipping point and will increasingly augment and extend virtually every technology enabled service, thing or application.  Creating intelligent systems that learn, adapt and potentially act autonomously rather than simply execute predefined instructions is primary battleground for technology vendors through at least 2020.

Trend No. 1: AI & Advanced Machine Learning

AI and machine learning (ML), which include technologies such as deep learning, neural networks and natural-language processing, can also encompass more advanced systems that understand, learn, predict, adapt and potentially operate autonomously. Systems can learn and change future behavior, leading to the creation of more intelligent devices and programs.  The combination of extensive parallel processing power, advanced algorithms and massive data sets to feed the algorithms has unleashed this new era.

In banking, you could use AI and machine-learning techniques to model current real-time transactions, as well as predictive models of transactions based on their likelihood of being fraudulent. Organizations seeking to drive digital innovation with this trend should evaluate a number of business scenarios in which AI and machine learning could drive clear and specific business value and consider experimenting with one or two high-impact scenarios..

Trend No. 2: Intelligent Apps

Intelligent apps, which include technologies like virtual personal assistants (VPAs), have the potential to transform the workplace by making everyday tasks easier (prioritizing emails) and its users more effective (highlighting important content and interactions). However, intelligent apps are not limited to new digital assistants – every existing software category from security tooling to enterprise applications such as marketing or ERP will be infused with AI enabled capabilities.  Using AI, technology providers will focus on three areas — advanced analytics, AI-powered and increasingly autonomous business processes and AI-powered immersive, conversational and continuous interfaces. By 2018, Gartner expects most of the world’s largest 200 companies to exploit intelligent apps and utilize the full toolkit of big data and analytics tools to refine their offers and improve customer experience.

Trend No. 3: Intelligent Things

New intelligent things generally fall into three categories: robots, drones and autonomous vehicles. Each of these areas will evolve to impact a larger segment of the market and support a new phase of digital business but these represent only one facet of intelligent things.  Existing things including IoT devices will become intelligent things delivering the power of AI enabled systems everywhere including the home, office, factory floor, and medical facility.

As intelligent things evolve and become more popular, they will shift from a stand-alone to a collaborative model in which intelligent things communicate with one another and act in concert to accomplish tasks. However, nontechnical issues such as liability and privacy, along with the complexity of creating highly specialized assistants, will slow embedded intelligence in some scenarios.

Digital

The lines between the digital and physical world continue to blur creating new opportunities for digital businesses.  Look for the digital world to be an increasingly detailed reflection of the physical world and the digital world to appear as part of the physical world creating fertile ground for new business models and digitally enabled ecosystems.

Trend No. 4: Virtual & Augmented Reality

Virtual reality (VR) and augmented reality (AR) transform the way individuals interact with each other and with software systems creating an immersive environment.  For example, VR can be used for training scenarios and remote experiences. AR, which enables a blending of the real and virtual worlds, means businesses can overlay graphics onto real-world objects, such as hidden wires on the image of a wall.  Immersive experiences with AR and VR are reaching tipping points in terms of price and capability but will not replace other interface models.  Over time AR and VR expand beyond visual immersion to include all human senses.  Enterprises should look for targeted applications of VR and AR through 2020.

Trend No. 5: Digital Twin

Within three to five years, billions of things will be represented by digital twins, a dynamic software model of a physical thing or system. Using physics data on how the components of a thing operate and respond to the environment as well as data provided by sensors in the physical world, a digital twin can be used to analyze and simulate real world conditions, responds to changes, improve operations and add value. Digital twins function as proxies for the combination of skilled individuals (e.g., technicians) and traditional monitoring devices and controls (e.g., pressure gauges). Their proliferation will require a cultural change, as those who understand the maintenance of real-world things collaborate with data scientists and IT professionals.  Digital twins of physical assets combined with digital representations of facilities and environments as well as people, businesses and processes will enable an increasingly detailed digital representation of the real world for simulation, analysis and control.

Trend No. 6: Blockchain

Blockchain is a type of distributed ledger in which value exchange transactions (in bitcoin or other token) are sequentially grouped into blocks.  Blockchain and distributed-ledger concepts are gaining traction because they hold the promise of transforming industry operating models in industries such as music distribution, identify verification and title registry.  They promise a model to add trust to untrusted environments and reduce business friction by providing transparent access to the information in the chain.  While there is a great deal of interest the majority of blockchain initiatives are in alpha or beta phases and significant technology challenges exist.

Mesh

The mesh refers to the dynamic connection of people, processes, things and services supporting intelligent digital ecosystems.  As the mesh evolves, the user experience fundamentally changes and the supporting technology and security architectures and platforms must change as well.

Trend No. 7: Conversational Systems

Conversational systems can range from simple informal, bidirectional text or voice conversations such as an answer to “What time is it?” to more complex interactions such as collecting oral testimony from crime witnesses to generate a sketch of a suspect.  Conversational systems shift from a model where people adapt to computers to one where the computer “hears” and adapts to a person’s desired outcome.  Conversational systems do not use text/voice as the exclusive interface but enable people and machines to use multiple modalities (e.g., sight, sound, tactile, etc.) to communicate across the digital device mesh (e.g., sensors, appliances, IoT systems).

Trend No. 8: Mesh App and Service Architecture

The intelligent digital mesh will require changes to the architecture, technology and tools used to develop solutions. The mesh app and service architecture (MASA) is a multichannel solution architecture that leverages cloud and serverless computing, containers and microservices as well as APIs and events to deliver modular, flexible and dynamic solutions.  Solutions ultimately support multiple users in multiple roles using multiple devices and communicating over multiple networks. However, MASA is a long term architectural shift that requires significant changes to development tooling and best practices.

Trend No. 9: Digital Technology Platforms

Digital technology platforms are the building blocks for a digital business and are necessary to break into digital. Every organization will have some mix of five digital technology platforms: Information systems, customer experience, analytics and intelligence, the Internet of Things and business ecosystems. In particular new platforms and services for IoT, AI and conversational systems will be a key focus through 2020.   Companies should identify how industry platforms will evolve and plan ways to evolve their platforms to meet the challenges of digital business.

Trend No. 10: Adaptive Security Architecture

The evolution of the intelligent digital mesh and digital technology platforms and application architectures means that security has to become fluid and adaptive. Security in the IoT environment is particularly challenging. Security teams need to work with application, solution and enterprise architects to consider security early in the design of applications or IoT solutions.  Multilayered security and use of user and entity behavior analytics will become a requirement for virtually every enterprise.

David Cearley is vice president and Gartner Fellow in Gartner Research and is a leading authority on information technology. Mr. Cearley analyzes emerging and strategic business and technology trends and explores how these trends shape the way individuals and companies derive value from technology.

Get Smarter

Events on Demand
A video replay of this session will be available on Gartner Events on Demand.

Complimentary Research
Read the complimentary report, Top 10 Strategic Technology Trends for 2017.

Leadership eBook
Learn how to lead through digital disruption. Download the complimentary CIO Leadership eBook.

Gartner’s Top 10 Strategic Technology Trends for 2017

2017/2/20 posted in  云计算和大数据

Gartner Identifies the Top 10 Strategic Technology Trends for 2017

2017/2/20 posted in  云计算和大数据

美团点评Docker容器管理平台

郑坤 ·2017-01-23 19:19

本文是郑坤根据第14期美团点评技术沙龙“你不知道的美团云” 演讲内容整理而成,已发表在《程序员》杂志2017年1月刊。

美团点评容器平台简介

本文介绍美团点评的Docker容器集群管理平台(以下简称“容器平台”)。该平台始于2015年,是基于美团云的基础架构和组件而开发的Docker容器集群管理平台。目前该平台为美团点评的外卖、酒店、到店、猫眼等十几个事业部提供容器计算服务,承载线上业务数百个,日均线上请求超过45亿次,业务类型涵盖Web、数据库、缓存、消息队列等。

为什么要开发容器管理平台

作为国内大型的O2O互联网公司,美团点评业务发展极为迅速,每天线上发生海量的搜索、推广和在线交易。在容器平台实施之前,美团点评的所有业务都是运行在美团私有云提供的虚拟机之上。随着业务的扩张,除了对线上业务提供极高的稳定性之外,私有云还需要有很高的弹性能力,能够在某个业务高峰时快速创建大量的虚拟机,在业务低峰期将资源回收,分配给其他的业务使用。美团点评大部分的线上业务都是面向消费者和商家的,业务类型多样,弹性的时间、频度也不尽相同,这些都对弹性服务提出了很高的要求。在这一点上,虚拟机已经难以满足需求,主要体现以下两点。

第一,虚拟机弹性能力较弱。使用虚拟机部署业务,在弹性扩容时,需要经过申请虚拟机、创建和部署虚拟机、配置业务环境、启动业务实例这几个步骤。前面的几个步骤属于私有云平台,后面的步骤属于业务工程师。一次扩容需要多部门配合完成,扩容时间以小时计,过程难以实现自动化。如果可以实现自动化“一键快速扩容”,将极大地提高业务弹性效率,释放更多的人力,同时也消除了人工操作导致事故的隐患。

第二,IT成本高。由于虚拟机弹性能力较弱,业务部门为了应对流量高峰和突发流量,普遍采用预留大量机器和服务实例的做法。即先部署好大量的虚拟机或物理机,按照业务高峰时所需资源做预留,一般是非高峰时段资源需求的两倍。资源预留的办法带来非常高的IT成本,在非高峰时段,这些机器资源处于空闲状态,也是巨大的浪费。

由于上述原因,美团点评从2015年开始引入Docker,构建容器集群管理平台,为业务提供高性能的弹性伸缩能力。业界很多公司的做法是采用Docker生态圈的开源组件,例如Kubernetes、Docker Swarm等。我们结合自身的业务需求,基于美团云现有架构和组件,实践出一条自研Docker容器管理平台之路。我们之所以选择自研容器平台,主要出于以下考虑。

快速满足美团点评的多种业务需求

美团点评的业务类型非常广泛,几乎涵盖了互联网公司所有业务类型。每种业务的需求和痛点也不尽相同。例如一些无状态业务(例如Web),对弹性扩容的延迟要求很高;数据库,业务的master节点,需要极高的可用性,而且还有在线调整CPU,内存和磁盘等配置的需求。很多业务需要SSH登陆访问容器以便调优或者快速定位故障原因,这需要容器管理平台提供便捷的调试功能。为了满足不同业务部门的多种需求,容器平台需要大量的迭代开发工作。基于我们所熟悉的现有平台和工具,可以做到“多快好省”地实现开发目标,满足业务的多种需求。

从容器平台稳定性出发,需要对平台和Docker底层技术有更高的把控能力

容器平台承载美团点评大量的线上业务,线上业务对SLA可用性要求非常高,一般要达到99.99%,因此容器平台的稳定性和可靠性是最重要的指标。如果直接引入外界开源组件,我们将面临3个难题:1. 我们需要摸熟开源组件,掌握其接口、评估其性能,至少要达到源码级的理解;2. 构建容器平台,需要对这些开源组件做拼接,从系统层面不断地调优性能瓶颈,消除单点隐患等;3. 在监控、服务治理等方面要和美团点评现有的基础设施整合。这些工作都需要极大的工作量,更重要的是,这样搭建的平台,在短时间内其稳定性和可用性都难以保障。

避免重复建设私有云

美团私有云承载着美团点评所有的在线业务,是国内规模最大的私有云平台之一。经过几年的经营,可靠性经过了公司海量业务的考验。我们不能因为要支持容器,就将成熟稳定的私有云搁置一旁,另起炉灶再重新开发一个新的容器平台。因此从稳定性、成本考虑,基于现有的私有云来建设容器管理平台,对我们来说是最经济的方案。

美团点评容器管理平台架构设计

我们将容器管理平台视作一种云计算模式,云计算的架构同样适用于容器。如前所述,容器平台的架构依托于美团私有云现有架构,其中私有云的大部分组件可以直接复用或者经过少量扩展开发。容器平台架构如下图所示。
1jiagou

美团点评容器管理平台架构
可以看出,容器平台整体架构自上而下分为业务层、PaaS层、IaaS控制层及宿主机资源层,这与美团云架构基本一致。

业务层 :代表美团点评使用容器的业务线,他们是容器平台的最终用户。
PaaS层 :使用容器平台的HTTP API,完成容器的编排、部署、弹性伸缩,监控、服务治理等功能,对上面的业务层通过HTTP API或者Web的方式提供服务。
IaaS控制层 :提供容器平台的API处理、调度、网络、用户鉴权、镜像仓库等管理功能,对PaaS提供HTTP API接口。宿主机资源层:Docker宿主机集群,由多个机房,数百个节点组成。每个节点部署HostServer、Docker、监控数据采集模块,Volume管理模块,OVS网络管理模块,Cgroup管理模块等。

容器平台中的绝大部分组件是基于美团私有云已有组件扩展开发的,例如API,镜像仓库、平台控制器、HostServer、网络管理模块,下面将分别介绍。

API

API是容器平台对外提供服务的接口,PaaS层通过API来创建、部署云主机。我们将容器和虚拟机看作两种不同的虚拟化计算模型,可以用统一的API来管理。即虚拟机等同于set(后面将详细介绍),磁盘等同于容器。这个思路有两点好处:1. 业务用户不需要改变云主机的使用逻辑,原来基于虚拟机的业务管理流程同样适用于容器,因此可以无缝地将业务从虚拟机迁移到容器之上;2. 容器平台API不必重新开发,可以复用美团私有云的API处理流程
创建虚拟机流程较多,一般需要经历调度、准备磁盘、部署配置、启动等多个阶段,平台控制器和Host-SRV之间需要很多的交互过程,带来了一定量的延迟。容器相对简单许多,只需要调度、部署启动两个阶段。因此我们对容器的API做了简化,将准备磁盘、部署配置和启动整合成一步完成,经简化后容器的创建和启动延迟不到3秒钟,基本达到了Docker的启动性能。

Host-SRV

Host-SRV是宿主机上的容器进程管理器,负责容器镜像拉取、容器磁盘空间管理、以及容器创建、销毁等运行时的管理工作。

镜像拉取:Host-SRV接到控制器下发的创建请求后,从镜像仓库下载镜像、缓存,然后通过Docker Load接口加载到Docker里。

容器运行时管理:Host-SRV通过本地Unix Socker接口与Docker Daemon通信,对容器生命周期的控制,并支持容器Logs、exec等功能。

容器磁盘空间管理:同时管理容器Rootfs和Volume的磁盘空间,并向控制器上报磁盘使用量,调度器可依据使用量决定容器的调度策略。

Host-SRV和Docker Daemon通过Unix Socket通信,容器进程由Docker-Containerd托管,所以Host-SRV的升级发布不会影响本地容器的运行。

镜像仓库

容器平台有两个镜像仓库:

  • Docker Registry: 提供Docker Hub的Mirror功能,加速镜像下载,便于业务团队快速构建业务镜像;
  • Glance: 基于Openstack组件Glance扩展开发的Docker镜像仓库,用以托管业务部门制作的Docker镜像。

镜像仓库不仅是容器平台的必要组件,也是私有云的必要组件。美团私有云使用Glance作为镜像仓库,在建设容器平台之前,Glance只用来托管虚拟机镜像。每个镜像有一个UUID,使用Glance API和镜像UUID,可以上传、下载虚拟机镜像。Docker镜像实际上是由一组子镜像组成,每个子镜像有独立的ID,并带有一个Parent ID属性,指向其父镜像。我们稍加改造了一下Glance,对每个Glance镜像增加Parent ID的属性,修改了镜像上传和下载的逻辑。经过简单扩展,使Glance具有托管Docker镜像的能力。通过Glance扩展来支持Docker镜像有以下优点:

  • 可以使用同一个镜像仓库来托管Docker和虚拟机的镜像,降低运维管理成本;
  • Glance已经十分成熟稳定,使用Glance可以减少在镜像管理上踩坑;
  • 使用Glance可以使Docker镜像仓库和美团私有云“无缝”对接,使用同一套镜像API,可以同时支持虚拟机和Docker镜像上传、下载,支持分布式的存储后端和多租户隔离等特性;
  • Glance UUID和Docker Image ID是一一对应的关系,利用这个特性我们实现了Docker镜像在仓库中的唯一性,避免冗余存储。

可能有人疑问,用Glance做镜像仓库是“重新造轮子”。事实上我们对Glance的改造只有200行左右的代码。Glance简单可靠,我们在很短的时间就完成了镜像仓库的开发上线,目前美团点评已经托管超过16,000多个业务方的Docker镜像,平均上传和下载镜像的延迟都是秒级的。

高性能、高弹性的容器网络

网络是十分重要的,又有技术挑战性的领域。一个好的网络架构,需要有高网络传输性能、高弹性、多租户隔离、支持软件定义网络配置等多方面的能力。早期Docker提供的网络方案比较简单,只有None、Bridge、Container和Host这四种网络模式,也没有用户开发接口。2015年Docker在1.9版本集成了Libnetwork作为其网络的解决方案,支持用户根据自身需求,开发相应的网络驱动,实现网络功能自定义的功能,极大地增强了Docker的网络扩展能力。

从容器集群系统来看,只有单宿主机的网络接入是远远不够的,网络还需要提供跨宿主机、机架和机房的能力。从这个需求来看,Docker和虚拟机来说是共通的,没有明显的差异,从理论上也可以用同一套网络架构来满足Docker和虚拟机的网络需求。基于这种理念,容器平台在网络方面复用了美团云网络基础架构和组件。

2wangluo

美团点评容器平台网络架构
数据平面: 我们采用万兆网卡,结合OVS-DPDK方案,并进一步优化单流的转发性能,将几个CPU核绑定给OVS-DPDK转发使用,只需要少量的计算资源即可提供万兆的数据转发能力。OVS-DPDK和容器所使用的CPU完全隔离,因此也不影响用户的计算资源。

控制平面: 我们使用OVS方案。该方案是在每个宿主机上部署一个自研的软件Controller,动态接收网络服务下发的网络规则,并将规则进一步下发至OVS流表,决定是否对某网络流放行。

MosBridge

在MosBridge之前,我们配置容器网络使用的是None模式。所谓None模式也就是自定义网络的模式,配置网络需要如下几步:

  1. 在创建容器时指定—net=None,容器创建启动后没有网络;
  2. 容器启动后,创建eth-pair;
  3. 将eth-pair一端连接到OVS Bridge上;
  4. 使用nsenter这种Namespace工具将eth-pair另一端放到容器的网络Namespace中,然后改名、配置IP地址和路由。

然而,在实践中,我们发现None模式存在一些不足:

  • 容器刚启动时是无网络的,一些业务在启动前会检查网络,导致业务启动失败;
  • 网络配置与Docker脱离,容器重启后网络配置丢失;
  • 网络配置由Host-SRV控制,每个网卡的配置流程都是在Host-SRV中实现的。以后网络功能的升级和扩展,例如对容器添加网卡,或者支持VPC,会使Host-SRV越来越难以维护。

为了解决这些问题,我们将眼光投向Docker Libnetwork。Libnetwork为用户提供了可以开发Docker网络的能力,允许用户基于Libnetwork实现网络驱动来自定义其网络配置的行为。就是说,用户可以编写驱动,让Docker按照指定的参数为容器配置IP、网关和路由。基于Libnetwork,我们开发了MosBridge – 适配美团云网络架构的Docker网络驱动。在创建容器时,需要指定容器创建参数—net=mosbridge,并将IP地址、网关、OVS Bridge等参数传给Docker,由MosBridge完成网络的配置过程。有了MosBridge,容器创建启动后便有了网络可以使用。容器的网络配置也持久化在MosBridge中,容器重启后网络配置也不会丢失。更重要的是,MosBridge使Host-SRV和Docker充分解耦,以后网络功能的升级也会更加方便。

解决Docker存储隔离性的问题

业界许多公司使用Docker都会面临存储隔离性的问题。就是说Docker提供的数据存储的方案是Volume,通过mount bind的方式将本地磁盘的某个目录挂载到容器中,作为容器的“数据盘”使用。这种本地磁盘Volume的方式无法做到容量限制,任何一个容器都可以不加限制地向Volume写数据,直到占满整个磁盘空间。

3volume

LVM-Volume方案
针对这一问题,我们开发了LVM Volume方案。该方案是在宿主机上创建一个LVM VG作为Volume的存储后端。创建容器时,从VG中创建一个LV当作一块磁盘,挂载到容器里,这样Volume的容量便由LVM加以强限制。得益于LVM机强大的管理能力,我们可以做到对Volume更精细、更高效的管理。例如,我们可以很方便地调用LVM命令查看Volume使用量,通过打标签的方式实现Volume伪删除和回收站功能,还可以使用LVM命令对Volume做在线扩容。值得一提地是,LVM是基于Linux内核Devicemapper开发的,而Devicemapper在Linux内核的历史悠久,早在内核2.6版本时就已合入,其可靠性和IO性能完全可以信赖。

适配多种监控服务的容器状态采集模块

容器监控是容器管理平台极其重要的一环,监控不仅仅要实时得到容器的运行状态,还需要获取容器所占用的资源动态变化。在设计实现容器监控之前,美团点评内部已经有了许多监控服务,例如Zabbix、Falcon和CAT。因此我们不需要重新设计实现一套完整的监控服务,更多地是考虑如何高效地采集容器运行信息,根据运行环境的配置上报到相应的监控服务上。简单来说,我们只需要考虑实现一个高效的Agent,在宿主机上可以采集容器的各种监控数据。这里需要考虑两点:

  1. 监控指标多,数据量大,数据采集模块必须高效率;
  2. 监控的低开销,同一个宿主机可以跑几十个,甚至上百个容器,大量的数据采集、整理和上报过程必须低开销。

4jiankong

  1. 监控数据采集方案

针对业务和运维的监控需求,我们基于Libcontainer开发了 Mos-Docker-Agent 监控模块。该模块从宿主机proc、CGroup等接口采集容器数据,经过加工换算,再通过不同的监控系统driver上报数据。该模块使用GO语言编写,既可以高效率,又可以直接使用Libcontainer。而且监控的数据采集和上报过程不经过Docker Daemon,因此不会加重Daemon的负担。

在监控配置这块,由于监控上报模块是插件式的,可以高度自定义上报的监控服务类型,监控项配置,因此可以很灵活地适应不同的监控场景的需求。

支持微服务架构的设计

近几年,微服务架构在互联网技术领域兴起。微服务利用轻量级组件,将一个大型的服务拆解为多个可以独立封装、独立部署的微服务实例,大型服务内在的复杂逻辑由服务之间的交互来实现。

美团点评的很多在线业务是微服务架构的。例如美团点评的服务治理框架,会为每一个在线服务配置一个服务监控Agent,该Agent负责收集上报在线服务的状态信息。类似的微服务还有许多。对于这种微服务架构,使用Docker可以有以下两种封装模式。

  1. 将所有微服务进程封装到一个容器中。但这样使服务的更新、部署很不灵活,任何一个微服务的更新都要重新构建容器镜像,这相当于将Docker容器当作虚拟机使用,没有发挥出Docker的优势。
  2. 将每个微服务封装到单独的容器中。Docker具有轻量、环境隔离的优点,很适合用来封装微服务。不过这样可能产生额外的性能问题。一个是大型服务的容器化会产生数倍的计算实例,这对分布式系统的调度和部署带来很大的压力;另一个是性能恶化问题,例如有两个关系紧密的服务,相互通信流量很大,但被部署到不同的机房,会产生相当大的网络开销。

对于支持微服务的问题,Kubernetes的解决方案是Pod。每个Pod由多个容器组成,是服务部署、编排、管理的最小单位,也是调度的最小单位。Pod内的容器相互共享资源,包括网络、Volume、IPC等。因此同一个Pod内的多个容器相互之间可以高效率地通信。

我们借鉴了Pod的思想,在容器平台上开发了面向微服务的容器组,我们内部称之为 set 。一个set逻辑示意如下图所示。

5set

Set逻辑示意图
set是容器平台的调度、弹性扩容/缩容的基本单位。每个set由一个BusyBox容器和若干个业务容器组成, BusyBox容器不负责具体业务,只负责管理set的网络、Volume和IPC配置。

6setconfig

set的配置json
set内的所有容器共享网络,Volume和IPC。set配置使用一个JSON描述(如图6所示),每一个set实例包含一个Container List,Container的字段描述了该容器运行时的配置,重要的字段有:

  • Index ,容器编号,代表容器的启动顺序;
  • Image ,Docker镜像在Glance上的name或者ID;
  • Options ,描述了容器启动时的参数配置。其中CPU和MEM都是百分比,表示这个容器相对于整个set在CPU和内存的分配情况(例如,对于一个4核的set而言,容器CPU:80,表示该容器将最多使用3.2个物理核)。

通过set,我们将美团点评的所有容器业务都做了标准化,即所有的线上业务都是用set描述,容器平台内只有set,调度、部署、启停的单位都是set。
对于set的实现上我们还做了一些特殊处理:

  • Busybox具有Privileged权限,可以自定义一些sysctl内核参数,提升容器性能。
  • 为了稳定性考虑,用户不允许SSH登陆Busybox,只允许登陆其他业务容器。
  • 为了简化Volume管理,每一个set只有一个Volume,并挂载到Busybox下,每个容器相互共享这个Volume。

很多时候一个set内的容器来自不同的团队,镜像更新频度不一,我们在set基础上设计了一个灰度更新的功能。该功能允许业务只更新set中的部分容器镜像,通过一个灰度更新的API,即可将线上的set升级。灰度更新最大的好处是可以在线更新部分容器,并保持线上服务不间断。

Docker稳定性和特性的解决方案:MosDocker

众所周知,Docker社区非常火热,版本更新十分频繁,大概2~4个月左右会有一个大版本更新,而且每次版本更新都会伴随大量的代码重构。Docker没有一个长期维护的LTS版本,每次更新不可避免地会引入新的Bug。由于时效原因,一般情况下,某个Bug的修复要等到下一个版本。例如1.11引入的Bug,一般要到1.12版才能解决,而如果使用了1.12版,又会引入新的Bug,还要等1.13版。如此一来,Docker的稳定性很难满足生产场景的要求。因此十分有必要维护一个相对稳定的版本,如果发现Bug,可以在此版本基础上,通过自研修复,或者采用社区的BugFix来修复。

除了稳定性的需求之外,我们还需要开发一些功能来满足美团点评的需求。美团点评业务的一些需求来自于我们自己的生产环境,而不属于业界通用的需求。对于这类需求,开源社区通常不会考虑。业界许多公司都存在类似的情况,作为公司基础服务团队就必须通过技术开发来满足这种需求。

基于以上考虑,我们从Docker 1.11版本开始,自研维护一个分支,我们称之为MosDocker。之所以选择从版本1.11开始,是因为从该版本开始,Docker做了几项重大改进:
Docker Daemon重构为Daemon、Containerd和runC这3个Binary,并解决Daemon的单点失效问题;

  • 支持OCI标准,容器由统一的rootfs和spec来定义;
  • 引入了Libnetwork框架,允许用户通过开发接口自定义容器网络;
  • 重构了Docker镜像存储后端,镜像ID由原来的随即字符串转变为基于镜像内容的Hash,使Docker镜像安全性更高。

到目前为止,MosDocker自研的特性主要有:

  1. MosBridge,支持美团云网络架构的网络驱动, 基于此特性实现容器多IP,VPC等网络功能;
  2. Cgroup持久化,扩展Docker Update接口,可以使更多的CGroup配置持久化在容器中,保证容器重启后CGroup配置不丢失。
  3. 支持子镜像的Docker Save,可以大幅度提高Docker镜像的上传、下载速度。

总之,维护MosDocker使我们可以将Docker稳定性逐渐控制在自己手里,并且可以按照公司业务的需求做定制开发。

在实际业务中的推广应用

在容器平台运行的一年多时间里,已经接入了美团点评多个大型业务部门的业务,业务类型也是多种多样。通过引入Docker技术,为业务部门带来诸多好处,典型的好处包括以下两点。

  • 快速部署,快速应对业务突发流量。由于使用Docker,业务的机器申请、部署、业务发布一步完成,业务扩容从原来的小时级缩减为秒级,极大地提高了业务的弹性能力。
  • 节省IT硬件和运维成本。Docker在计算上效率更高,加之高弹性使得业务部门不必预留大量的资源,节省大量的硬件投资。以某业务为例,之前为了应对流量波动和突发流量,预留了32台8核8G的虚拟机。使用容器弹性方案,即3台容器+弹性扩容的方案取代固定32台虚拟机,平均单机QPS提升85%, 平均资源占用率降低44-56%(如图7,8所示)。
  • Docker在线扩容能力,保障服务不中断。一些有状态的业务,例如数据库和缓存,运行时调整CPU、内存和磁盘是常见的需求。之前部署在虚拟机中,调整配置需要重启虚拟机,业务的可用性不可避免地被中断了,成为业务的痛点。Docker对CPU、内存等资源管理是通过Linux的CGroup实现的,调整配置只需要修改容器的CGroup参数,不必重启容器。 7qps

某业务虚拟机和容器平均单机QPS

8shiyongliang

某业务虚拟机和容器资源使用量

结束语

本文介绍了美团点评Docker的实践情况。经过一年的推广实践,从部门内部自己使用,到覆盖公司大部分业务部门和产品线;从单一业务类型到公司线上几十种业务类型,证明了Docker这种容器虚拟化技术在提高运维效率,精简发布流程,降低IT成本等方面的价值。

目前Docker平台还在美团点评深入推广中。在这个过程中,我们发现Docker(或容器技术)本身存在许多问题和不足,例如,Docker存在IO隔离性不强的问题,无法对Buffered IO做限制;偶尔Docker Daemon会卡死,无反应的问题;容器内存OOM导致容器被删除,开启OOM_kill_disabled后可能导致宿主机内核崩溃等问题。因此Docker技术,在我们看来和虚拟机应该是互补的关系,不能指望在所有场景中Docker都可以替代虚拟机,因此只有将Docker和虚拟机并重,才能满足用户的各种场景对云计算的需求。

Docker 容器 美团云 云计算 虚拟化技术 技术工程 后台 技术沙龙

美团点评Docker容器管理平台

2017/2/15 posted in  云计算和大数据

ubuntu docker

  • release
    ## 安装docker

docker几个版本更新的比较快,我们按照官方给出的方法来安装docker

可以参考这篇gitbook

为了比较方便学习,采用手动的方式来进行安装

$ sudo apt-get update
###安装https和证书,现在大多数镜像源都采取https的模式了
$ sudo apt-get install apt-transport-https ca-certificates
###添加gpg秘钥,这步很重要,否则就没有办法继续安装
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
###将docker的源添加到apt-get的源里面去
$ echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list
###更新源并安装
$ sudo apt-get update
$ sudo apt-get install docker-engine
###启动
$ sudo service docker start
###只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket
$ sudo groupadd docker
$ sudo usermod -aG docker $USER

###检查安装情况
$ sudo docker info

使用docker

运行docker ubuntu 容器

$ docker run -i -t ubuntu /bin/bash

运行第一个docker命令,-i标识保证容器中的STDIN是开启的,-t命令告诉docker为要创建的docker容器创建一个伪tty终端。

ubuntu标识创建的镜像名称,当前的ubuntu镜像是一个基础镜像,有docker公司提供。镜像创建的流程是:检查本地是否存在ubuntu镜像,如果本地不存在,则向Docker Hub Registry上注册,查看Docker Hub 中是否存在该镜像。找到该镜像之后下载到本地镜像中来。

root@firephoenix-virtual-machine:~# docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
8aec416115fd: Downloading 12.69 MB/50.31 MB
8aec416115fd: Downloading 18.79 MB/50.31 MB
8aec416115fd: Downloading 20.31 MB/50.31 MB
8aec416115fd: Downloading 24.37 MB/50.31 MB
2508cbcde94b: Download complete
8aec416115fd: Retrying in 1 second

8aec416115fd: Pull complete
695f074e24e3: Pull complete
946d6c48c2a7: Pull complete
bc7277e579f0: Pull complete
2508cbcde94b: Pull complete
Digest: sha256:71cd81252a3563a03ad8daee81047b62ab5d892ebbfbf71cf53415f29c130950
Status: Downloaded newer image for ubuntu:latest

直接从docker hub上面下载会有些慢,需要稍微多等一下

使用容器

前面启动了容器并制定了使用_bin_bash来创建,所以进入后就直接进入到了容器的界面

root@11dab611cdcd:/# hostname
11dab611cdcd
root@11dab611cdcd:/# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  11dab611cdcd
root@11dab611cdcd:/# ip a
bash: ip: command not found
root@11dab611cdcd:/# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18312  3364 ?        Ss   04:10   0:00 /bin/bash
root        18  0.0  0.0  34424  2768 ?        R+   04:12   0:00 ps -aux
root@11dab611cdcd:/#

输入exit的时候就可以退出了,同时容器也停止运行了。

root@firephoenix-virtual-machine:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
11dab611cdcd        ubuntu              "/bin/bash"         5 minutes ago       Exited (0) 47 seconds ago                       sleepy_jepsen

从状态可以看到容器的状态已经变味 exited 。

容器命名

可以指定—name 参数来为docker容器指定相应的容器名,方便唯一区分。
从下面可以看出指定docker的名称主要影响到docker的名称,但是不会改变容器的主机名。

root@firephoenix-virtual-machine:~# docker run --name test_ubuntu_container -i -t ubuntu /bin/bash
root@2cb6824d5457:/#

从下面看到docker的名称已经改变。

root@firephoenix-virtual-machine:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
2cb6824d5457        ubuntu              "/bin/bash"         5 minutes ago       Exited (0) 2 seconds ago                        test_ubuntu_container
11dab611cdcd        ubuntu              "/bin/bash"         18 minutes ago      Exited (0) 13 minutes ago                       sleepy_jepsen

容器的名称在docker平台全局唯一

重新使用docker

前面使用exit命令会退出docker容器,同时容器的状态会置为exited,如果我们想再次使用的话,需要首先启动docker容器,使用docker start命令。这样容器会启动,但是此时仅仅是看到容器开始运行了。如果我们需要再次进入到交互式会话,我们需要使用docker attach , 这样就会再次进入到交互命令

root@firephoenix-virtual-machine:~# docker start test_ubuntu_container
test_ubuntu_container
root@firephoenix-virtual-machine:~# docker attach test_ubuntu_container
root@2cb6824d5457:/#

创建守护式容器

前面的我们成为交互式运行容器 (interactive container),交互式容器在退出之后就会自动关闭,很多情况下是不可用的。

我们可以创建长期运行的守护式容器(daemonized container),它没有交互式会话,适合运行应用程序和服务。

root@firephoenix-virtual-machine:~# docker run --name daemon_container -d ubuntu /bin/sh -c "while true; do echo hello world;sleep 1; done"
270ffa9c294c9014a42bf7613d3b31203b516dcf93c1ea75304efd809c66e36f

可以查看容器状态

root@firephoenix-virtual-machine:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
270ffa9c294c        ubuntu              "/bin/sh -c 'while..."   2 minutes ago       Up 2 minutes                                    daemon_container
2cb6824d5457        ubuntu              "/bin/bash"              15 minutes ago      Exited (0) 3 minutes ago                        test_ubuntu_container
11dab611cdcd        ubuntu              "/bin/bash"              28 minutes ago      Exited (0) 23 minutes ago                       sleepy_jepsen

容器内部

使用docker logs 加上容器名称可以获取容器日志。

root@firephoenix-virtual-machine:~# docker logs daemon_container
hello world
hello world
###-f输出最新的日志信息
root@firephoenix-virtual-machine:~# docker logs -f daemon_container
hello world
hello world

docker logs —tail 10 daemon_container可以用来获取日志的最后10行内容
docker logs —tail 0 -f daemon_container可以跟踪容器的最新日志

加上-t 标识可以为每条日志加上时间戳

查看容器内的进程

使用 top命令可以查看容器里面的进程信息

root@firephoenix-virtual-machine:~# docker top daemon_container
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                12768               12741               0                   12:35               ?                   00:00:00            /bin/sh -c while true; do echo hello world;sleep 1; done
root                13739               12768               0                   12:46               ?                   00:00:00            sleep 1

容器内部运行进程

可以使用exec 在容器内部运行进行,也可以打开shell 式的交互任务。

root@firephoenix-virtual-machine:~# docker top daemon_container
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                12768               12741               0                   12:35               ?                   00:00:00            /bin/sh -c while true; do echo hello world;sleep 1; done
root                13739               12768               0                   12:46               ?                   00:00:00            sleep 1
root@firephoenix-virtual-machine:~# docker exec -d daemon_container touch /etc/new_config_file
root@firephoenix-virtual-machine:~# docker top daemon_container
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                12768               12741               0                   12:35               ?                   00:00:00            /bin/sh -c while true; do echo hello world;sleep 1; done
root                13938               12768               0                   12:47               ?                   00:00:00            sleep 1
root@firephoenix-virtual-machine:~# docker exec -t -i daemon_container /bin/bash
root@270ffa9c294c:/#
root@270ffa9c294c:/#

使用exec 增加的运行时bash的时候,此时使用exit退出会退出交互式进程,而不会将容器的状态变为exit。

root@270ffa9c294c:/# exit
exit

root@firephoenix-virtual-machine:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
270ffa9c294c        ubuntu              "/bin/sh -c 'while..."   15 minutes ago      Up 15 minutes                                   daemon_container
2cb6824d5457        ubuntu              "/bin/bash"              28 minutes ago      Exited (0) 16 minutes ago                       test_ubuntu_container
11dab611cdcd        ubuntu              "/bin/bash"              40 minutes ago      Exited (0) 35 minutes ago                       sleepy_jepsen

停止守护式容器

使用docker stop命令可以停止当前运行docker容器,使用ps命令可以查看停止的容器状态被职位exited

root@firephoenix-virtual-machine:~# docker stop daemon_container
daemon_container
root@firephoenix-virtual-machine:~#
root@firephoenix-virtual-machine:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
270ffa9c294c        ubuntu              "/bin/sh -c 'while..."   17 minutes ago      Exited (137) 3 seconds ago                       daemon_container
2cb6824d5457        ubuntu              "/bin/bash"              30 minutes ago      Exited (0) 18 minutes ago                        test_ubuntu_container
11dab611cdcd        ubuntu              "/bin/bash"              42 minutes ago      Exited (0) 38 minutes ago                        sleepy_jepsen

也可以使用docker kill 命令向容器发送SIGKILL 信号来停止服务。 这个可以更快的停止容器。

自动重启容器

$ docker run --restart=always --name daemon_container -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

restart 标识被置为always标识的时候,无论容器的退出代码是什么,Docker都会自动重启该容器。

也可以将restart的状态置为on-failure , 标识当容器的退出代码是非0时,docker会尝试自动重启。

—restart=on-failure:5

深入了解容器

docker inspect 命令可以比 docker ps 更深入的了解容器,获得更多的容器信息

root@firephoenix-virtual-machine:~# docker inspect daemon_container
[
    {
        "Id": "270ffa9c294c9014a42bf7613d3b31203b516dcf93c1ea75304efd809c66e36f",
        "Created": "2017-02-02T04:35:31.661730931Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true; do echo hello world;sleep 1; done"
        ],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 137,
            "Error": "",
            "StartedAt": "2017-02-02T04:35:31.9503424Z",
            "FinishedAt": "2017-02-02T04:53:00.431822428Z"
        },
        "Image": "sha256:f49eec89601e8484026a8ed97be00f14db75339925fad17b440976cffcbfb88a",
        "ResolvConfPath": "/var/lib/docker/containers/270ffa9c294c9014a42bf7613d3b31203b516dcf93c1ea75304efd809c66e36f/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/270ffa9c294c9014a42bf7613d3b31203b516dcf93c1ea75304efd809c66e36f/hostname",
        "HostsPath": "/var/lib/docker/containers/270ffa9c294c9014a42bf7613d3b31203b516dcf93c1ea75304efd809c66e36f/hosts",
        "LogPath": "/var/lib/docker/containers/270ffa9c294c9014a42bf7613d3b31203b516dcf93c1ea75304efd809c66e36f/270ffa9c294c9014a42bf7613d3b31203b516dcf93c1ea75304efd809c66e36f-json.log",
        "Name": "/daemon_container",
        "RestartCount": 0,
        "Driver": "aufs",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": null,
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DiskQuota": 0,
            "KernelMemory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": -1,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0
        },
        "GraphDriver": {
            "Name": "aufs",
            "Data": null
        },
        "Mounts": [],
        "Config": {
            "Hostname": "270ffa9c294c",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "while true; do echo hello world;sleep 1; done"
            ],
            "Image": "ubuntu",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "90c58dd0a89061f7a78284415e336621bdc34faa445490670c39e9c4d5058192",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": null,
            "SandboxKey": "/var/run/docker/netns/90c58dd0a890",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "44878f28c0179eae980d634628a80e1290cb41d2a5e68fe815299823bc630a9a",
                    "EndpointID": "",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": ""
                }
            }
        }
    }
]

同样可以使用 -f来查询部分结果,-f支持GO语言模型。

也可以通过浏览_var_lib/docker 目录来深入了解docker容器的管理。

删除容器

root@firephoenix-virtual-machine:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
270ffa9c294c        ubuntu              "/bin/sh -c 'while..."   27 minutes ago      Exited (137) 10 minutes ago                       daemon_container
2cb6824d5457        ubuntu              "/bin/bash"              41 minutes ago      Exited (0) 28 minutes ago                         test_ubuntu_container
11dab611cdcd        ubuntu              "/bin/bash"              53 minutes ago      Exited (0) 48 minutes ago                         sleepy_jepsen
root@firephoenix-virtual-machine:~# docker rm 11dab611cdcd
11dab611cdcd
root@firephoenix-virtual-machine:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
270ffa9c294c        ubuntu              "/bin/sh -c 'while..."   27 minutes ago      Exited (137) 10 minutes ago                       daemon_container
2cb6824d5457        ubuntu              "/bin/bash"              41 minutes ago      Exited (0) 29 minutes ago                         test_ubuntu_container

可以使用docker rm 加上 容器的container id来删除容器

同时也可以全部删除

root@firephoenix-virtual-machine:~# docker rm `docker ps -a -q`
270ffa9c294c
2cb6824d5457
root@firephoenix-virtual-machine:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

docker 镜像和仓库

docker镜像

Docker镜像是由文件系统叠加而成,最底层是一个引导文件系统,即bootfs,类似典型的Linux引导文件系统。

当一个容器启动后,它将被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存供initrd磁盘镜像使用。

Docker镜像的第二层是root文件系统rootfs,它位于引导文件系统之上。rootfs是一种或多种操作系统(如Ubuntu等)。在docker中,root文件系统永远只是只读状态,并且Docker利用联合加载(Union mount)技术又会在root文件系统层上加载更多的只读文件系统。联合加载会将各层文件系统叠加到一起,这样最终的文件系统会包含所有的底层文件和目录。

Docker将这些文件系统称为镜像,一个镜像可以放到另外一个镜像的顶部,位于下面的镜像称为父镜像 parent image。最底部的镜像称为基础镜像 Base image。

当从一个镜像启动容器时,Docker会在该镜像的最顶层加载一个读写文件系统。我们想在Docker中运行的程序就是在这个读写层中执行。

61271451-A076-4E2C-A37F-5641DBB46DAE

FF5B5D4B-C3D1-4920-BA48-8F5BFE4D66CB

写时复制机制: 当Docker第一次启动一个容器时,初始的读写层是空的。当文件系统发生变化时,这些变化都会应用到这一层上。每个只读镜像层都是只读的,并且以后永远不会变化。

列出镜像

通过docker images 可以查看docker镜像。

root@firephoenix-virtual-machine:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              f49eec89601e        12 days ago         129 MB

所有的本地镜像都保存在docker 宿主机的_var_lib/docker 目录下,每个镜像都保存在Docker所采用的存储驱动目录下面。

对于我们使用的docker中的ubuntu镜像,实际上它并不是一个完整的操作系统,它只是一个裁剪版,只包含最低限度的支持系统运行的组件。

带标签的镜像

$ sudo docker run -t -i --name new_container ubuntu:14.04 /bin/bash

Docker Hub中包含两种类型的仓库:用户仓库(user repository) 和 顶层仓库( top-level repository) 。

用户仓库的镜像是由Docker用户创建的,顶层仓库是有Docker 内部团队来管理。

用户仓库的命名: 用户名_仓库名 yourwilliam_puppet

查找镜像

可以使用docker search 来查找所有的Docker Hub上公共的可用镜像

root@firephoenix-virtual-machine:/opt# docker search nginx
NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                     Official build of Nginx.                        5210      [OK]
jwilder/nginx-proxy       Automated Nginx reverse proxy for docker c...   935                  [OK]
richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable ...   335                  [OK]
million12/nginx-php       Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS...   75                   [OK]
webdevops/php-nginx       Nginx with PHP-FPM                              69                   [OK]
maxexcloo/nginx-php       Framework container with nginx and PHP-FPM...   58                   [OK]
h3nrik/nginx-ldap         NGINX web server with LDAP/AD, SSL and pro...   34                   [OK]
bitnami/nginx             Bitnami nginx Docker Image                      22                   [OK]
evild/alpine-nginx        Minimalistic Docker image with Nginx            11                   [OK]
gists/nginx               Nginx on Alpine                                 8                    [OK]
webdevops/nginx           Nginx container                                 7                    [OK]
maxexcloo/nginx           Framework container with nginx installed.       7                    [OK]
1science/nginx            Nginx Docker images that include Consul Te...   4                    [OK]
blacklabelops/nginx       Dockerized Nginx Reverse Proxy Server.          4                    [OK]
ixbox/nginx               Nginx on Alpine Linux.                          3                    [OK]
servivum/nginx            Nginx Docker Image with Useful Tools            2                    [OK]
dock0/nginx               Arch container running nginx                    2                    [OK]
frekele/nginx             docker run --rm --name nginx -p 80:80 -p 4...   2                    [OK]
xataz/nginx               Light nginx image                               2                    [OK]
drupaldocker/nginx        NGINX for Drupal                                2                    [OK]
tozd/nginx                Dockerized nginx.                               1                    [OK]
unblibraries/nginx        Baseline non-PHP nginx container                0                    [OK]
watsco/nginx              nginx:1.11-alpine                               0                    [OK]
c4tech/nginx              Several nginx images for web applications.      0                    [OK]
funkygibbon/nginx         nginx + openssl automated build, customisa...   0                    [OK]

也可以在docker hub 网站上查找可用镜像,查找到以后可以使用docker pull 命令来拉去镜像到本地。最后使用docker run就可以执行镜像

构建镜像

docker可以使用两种方式构建镜像:

  1. 使用docker commit命令
  2. 使用docker build 命令和Dockerfile文件

推荐使用更强大的dockerfile 来构建docker镜像。

登陆docker 的 hub 平台

root@firephoenix-virtual-machine:/opt# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: yourwilliam
Password:
Login Succeeded

commit 创建镜像

$ docker run -i -t ubuntu /bin/bash
###更新apt-get
root@90082b9a66f3:/# apt-get update
###安装nginx
root@90082b9a66f3:/# apt-get install nginx
###exit 出来后再进行commit
root@firephoenix-virtual-machine:/opt# docker commit 90082b9a66f3 yourwilliam/nginx_test

###换源 
###换下面两个源都可以
sed -i 's/http:\/\/archive.ubuntu.com\/ubuntu\//http:\/\/cn.archive.ubuntu.com\/ubuntu\//g' /etc/apt/sources.list

sed -i 's/http:\/\/cn.archive.ubuntu.com\/ubuntu\//http:\/\/mirrors.aliyun.com\/ubuntu\//g' /etc/apt/sources.list

用Dockerfile 来构建镜像

推荐使用被称为Dockerfile的定义文件和docker build命令来构建镜像。


$ mkdir static_web
$ cd static_web
$ touch Dockerfile
$ vi Dockerfile

Dockerfile填充以下内容

# Version: 0.0.1
FROM ubuntu
MAINTAINER william "yourwilliam@gmail.com"
RUN sed -i 's/http:\/\/archive.ubuntu.com\/ubuntu\//http:\/\/cn.archive.ubuntu.com\/ubuntu\//g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hi, I am in you container' \
    > /usr/share/nginx/html/index.html
EXPOSE 80

其中第一个RUN是更换ubuntu的源,国内使用archive的源会很慢

完成之后

root@firephoenix-virtual-machine:/opt/docker/static_web# docker build -t="yourwilliam/static_web" .
Sending build context to Docker daemon 2.048 kB
Step 1/7 : FROM ubuntu
 ---> f49eec89601e
Step 2/7 : MAINTAINER william "yourwilliam@gmail.com"
 ---> Using cache
 ---> 20d54ff737f4
Step 3/7 : RUN sed -i 's/http:\/\/archive.ubuntu.com\/ubuntu\//http:\/\/cn.archive.ubuntu.com\/ubuntu\//g' /etc/apt/sources.list
 ---> Using cache
 ---> 340aaa0cbe30
Step 4/7 : RUN apt-get update
 ---> Using cache
 ---> 097b144abeda
Step 5/7 : RUN apt-get install -y nginx
 ---> Running in ec5a6d6d8bb1
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  fontconfig-config fonts-dejavu-core geoip-database libexpat1 libfontconfig1
  libfreetype6 libgd3 libgeoip1 libicu55 libjbig0 libjpeg-turbo8 libjpeg8
  libpng12-0 libssl1.0.0 libtiff5 libvpx3 libx11-6 libx11-data libxau6 libxcb1
  libxdmcp6 libxml2 libxpm4 libxslt1.1 nginx-common nginx-core sgml-base ucf
  xml-core
Suggested packages:
  libgd-tools geoip-bin fcgiwrap nginx-doc ssl-cert sgml-base-doc debhelper
The following NEW packages will be installed:
  fontconfig-config fonts-dejavu-core geoip-database libexpat1 libfontconfig1
  libfreetype6 libgd3 libgeoip1 libicu55 libjbig0 libjpeg-turbo8 libjpeg8
  libpng12-0 libssl1.0.0 libtiff5 libvpx3 libx11-6 libx11-data libxau6 libxcb1
  libxdmcp6 libxml2 libxpm4 libxslt1.1 nginx nginx-common nginx-core sgml-base
  ucf xml-core
0 upgraded, 30 newly installed, 0 to remove and 6 not upgraded.
Need to get 15.5 MB of archives.
After this operation, 57.3 MB of additional disk space will be used.
Get:1 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libxau6 amd64 1:1.0.8-1 [8376 B]
Get:2 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 sgml-base all 1.26+nmu4ubuntu1 [12.5 kB]
Get:3 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libjpeg-turbo8 amd64 1.4.2-0ubuntu3 [111 kB]
Get:4 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libjbig0 amd64 2.1-3.1 [26.6 kB]
Get:5 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libexpat1 amd64 2.1.0-7ubuntu0.16.04.2 [71.3 kB]
Get:6 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libpng12-0 amd64 1.2.54-1ubuntu1 [116 kB]
Get:7 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libssl1.0.0 amd64 1.0.2g-1ubuntu4.6 [1082 kB]
Get:8 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 ucf all 3.0036 [52.9 kB]
Get:9 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 geoip-database all 20160408-1 [1678 kB]
Get:10 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libgeoip1 amd64 1.6.9-1 [70.1 kB]
Get:11 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libicu55 amd64 55.1-7 [7643 kB]
Get:12 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libxdmcp6 amd64 1:1.1.2-1.1 [11.0 kB]
Get:13 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libxcb1 amd64 1.11.1-1ubuntu1 [40.0 kB]
Get:14 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libx11-data all 2:1.6.3-1ubuntu2 [113 kB]
Get:15 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libx11-6 amd64 2:1.6.3-1ubuntu2 [571 kB]
Get:16 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libxml2 amd64 2.9.3+dfsg1-1ubuntu0.1 [696 kB]
Get:17 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 xml-core all 0.13+nmu2 [23.3 kB]
Get:18 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 fonts-dejavu-core all 2.35-1 [1039 kB]
Get:19 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 fontconfig-config all 2.11.94-0ubuntu1.1 [49.9 kB]
Get:20 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libfreetype6 amd64 2.6.1-0.1ubuntu2 [316 kB]
Get:21 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libfontconfig1 amd64 2.11.94-0ubuntu1.1 [131 kB]
Get:22 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libjpeg8 amd64 8c-2ubuntu8 [2194 B]
Get:23 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libtiff5 amd64 4.0.6-1 [144 kB]
Get:24 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libvpx3 amd64 1.5.0-2ubuntu1 [732 kB]
Get:25 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libxpm4 amd64 1:3.5.11-1ubuntu0.16.04.1 [33.8 kB]
Get:26 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libgd3 amd64 2.1.1-4ubuntu0.16.04.5 [125 kB]
Get:27 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libxslt1.1 amd64 1.1.28-2.1 [145 kB]
Get:28 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 nginx-common all 1.10.0-0ubuntu0.16.04.4 [26.6 kB]
Get:29 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 nginx-core amd64 1.10.0-0ubuntu0.16.04.4 [428 kB]
Get:30 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 nginx all 1.10.0-0ubuntu0.16.04.4 [3498 B]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 15.5 MB in 32s (483 kB/s)
Selecting previously unselected package libxau6:amd64.
(Reading database ... 7256 files and directories currently installed.)
Preparing to unpack .../libxau6_1%3a1.0.8-1_amd64.deb ...
Unpacking libxau6:amd64 (1:1.0.8-1) ...
Selecting previously unselected package sgml-base.
Preparing to unpack .../sgml-base_1.26+nmu4ubuntu1_all.deb ...
Unpacking sgml-base (1.26+nmu4ubuntu1) ...
Selecting previously unselected package libjpeg-turbo8:amd64.
Preparing to unpack .../libjpeg-turbo8_1.4.2-0ubuntu3_amd64.deb ...
Unpacking libjpeg-turbo8:amd64 (1.4.2-0ubuntu3) ...
Selecting previously unselected package libjbig0:amd64.
Preparing to unpack .../libjbig0_2.1-3.1_amd64.deb ...
Unpacking libjbig0:amd64 (2.1-3.1) ...
Selecting previously unselected package libexpat1:amd64.
Preparing to unpack .../libexpat1_2.1.0-7ubuntu0.16.04.2_amd64.deb ...
Unpacking libexpat1:amd64 (2.1.0-7ubuntu0.16.04.2) ...
Selecting previously unselected package libpng12-0:amd64.
Preparing to unpack .../libpng12-0_1.2.54-1ubuntu1_amd64.deb ...
Unpacking libpng12-0:amd64 (1.2.54-1ubuntu1) ...
Selecting previously unselected package libssl1.0.0:amd64.
Preparing to unpack .../libssl1.0.0_1.0.2g-1ubuntu4.6_amd64.deb ...
Unpacking libssl1.0.0:amd64 (1.0.2g-1ubuntu4.6) ...
Selecting previously unselected package ucf.
Preparing to unpack .../archives/ucf_3.0036_all.deb ...
Moving old data out of the way
Unpacking ucf (3.0036) ...
Selecting previously unselected package geoip-database.
Preparing to unpack .../geoip-database_20160408-1_all.deb ...
Unpacking geoip-database (20160408-1) ...
Selecting previously unselected package libgeoip1:amd64.
Preparing to unpack .../libgeoip1_1.6.9-1_amd64.deb ...
Unpacking libgeoip1:amd64 (1.6.9-1) ...
Selecting previously unselected package libicu55:amd64.
Preparing to unpack .../libicu55_55.1-7_amd64.deb ...
Unpacking libicu55:amd64 (55.1-7) ...
Selecting previously unselected package libxdmcp6:amd64.
Preparing to unpack .../libxdmcp6_1%3a1.1.2-1.1_amd64.deb ...
Unpacking libxdmcp6:amd64 (1:1.1.2-1.1) ...
Selecting previously unselected package libxcb1:amd64.
Preparing to unpack .../libxcb1_1.11.1-1ubuntu1_amd64.deb ...
Unpacking libxcb1:amd64 (1.11.1-1ubuntu1) ...
Selecting previously unselected package libx11-data.
Preparing to unpack .../libx11-data_2%3a1.6.3-1ubuntu2_all.deb ...
Unpacking libx11-data (2:1.6.3-1ubuntu2) ...
Selecting previously unselected package libx11-6:amd64.
Preparing to unpack .../libx11-6_2%3a1.6.3-1ubuntu2_amd64.deb ...
Unpacking libx11-6:amd64 (2:1.6.3-1ubuntu2) ...
Selecting previously unselected package libxml2:amd64.
Preparing to unpack .../libxml2_2.9.3+dfsg1-1ubuntu0.1_amd64.deb ...
Unpacking libxml2:amd64 (2.9.3+dfsg1-1ubuntu0.1) ...
Selecting previously unselected package xml-core.
Preparing to unpack .../xml-core_0.13+nmu2_all.deb ...
Unpacking xml-core (0.13+nmu2) ...
Selecting previously unselected package fonts-dejavu-core.
Preparing to unpack .../fonts-dejavu-core_2.35-1_all.deb ...
Unpacking fonts-dejavu-core (2.35-1) ...
Selecting previously unselected package fontconfig-config.
Preparing to unpack .../fontconfig-config_2.11.94-0ubuntu1.1_all.deb ...
Unpacking fontconfig-config (2.11.94-0ubuntu1.1) ...
Selecting previously unselected package libfreetype6:amd64.
Preparing to unpack .../libfreetype6_2.6.1-0.1ubuntu2_amd64.deb ...
Unpacking libfreetype6:amd64 (2.6.1-0.1ubuntu2) ...
Selecting previously unselected package libfontconfig1:amd64.
Preparing to unpack .../libfontconfig1_2.11.94-0ubuntu1.1_amd64.deb ...
Unpacking libfontconfig1:amd64 (2.11.94-0ubuntu1.1) ...
Selecting previously unselected package libjpeg8:amd64.
Preparing to unpack .../libjpeg8_8c-2ubuntu8_amd64.deb ...
Unpacking libjpeg8:amd64 (8c-2ubuntu8) ...
Selecting previously unselected package libtiff5:amd64.
Preparing to unpack .../libtiff5_4.0.6-1_amd64.deb ...
Unpacking libtiff5:amd64 (4.0.6-1) ...
Selecting previously unselected package libvpx3:amd64.
Preparing to unpack .../libvpx3_1.5.0-2ubuntu1_amd64.deb ...
Unpacking libvpx3:amd64 (1.5.0-2ubuntu1) ...
Selecting previously unselected package libxpm4:amd64.
Preparing to unpack .../libxpm4_1%3a3.5.11-1ubuntu0.16.04.1_amd64.deb ...
Unpacking libxpm4:amd64 (1:3.5.11-1ubuntu0.16.04.1) ...
Selecting previously unselected package libgd3:amd64.
Preparing to unpack .../libgd3_2.1.1-4ubuntu0.16.04.5_amd64.deb ...
Unpacking libgd3:amd64 (2.1.1-4ubuntu0.16.04.5) ...
Selecting previously unselected package libxslt1.1:amd64.
Preparing to unpack .../libxslt1.1_1.1.28-2.1_amd64.deb ...
Unpacking libxslt1.1:amd64 (1.1.28-2.1) ...
Selecting previously unselected package nginx-common.
Preparing to unpack .../nginx-common_1.10.0-0ubuntu0.16.04.4_all.deb ...
Unpacking nginx-common (1.10.0-0ubuntu0.16.04.4) ...
Selecting previously unselected package nginx-core.
Preparing to unpack .../nginx-core_1.10.0-0ubuntu0.16.04.4_amd64.deb ...
Unpacking nginx-core (1.10.0-0ubuntu0.16.04.4) ...
Selecting previously unselected package nginx.
Preparing to unpack .../nginx_1.10.0-0ubuntu0.16.04.4_all.deb ...
Unpacking nginx (1.10.0-0ubuntu0.16.04.4) ...
Processing triggers for libc-bin (2.23-0ubuntu5) ...
Processing triggers for systemd (229-4ubuntu13) ...
Setting up libxau6:amd64 (1:1.0.8-1) ...
Setting up sgml-base (1.26+nmu4ubuntu1) ...
Setting up libjpeg-turbo8:amd64 (1.4.2-0ubuntu3) ...
Setting up libjbig0:amd64 (2.1-3.1) ...
Setting up libexpat1:amd64 (2.1.0-7ubuntu0.16.04.2) ...
Setting up libpng12-0:amd64 (1.2.54-1ubuntu1) ...
Setting up libssl1.0.0:amd64 (1.0.2g-1ubuntu4.6) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
debconf: falling back to frontend: Teletype
Setting up ucf (3.0036) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
debconf: falling back to frontend: Teletype
Setting up geoip-database (20160408-1) ...
Setting up libgeoip1:amd64 (1.6.9-1) ...
Setting up libicu55:amd64 (55.1-7) ...
Setting up libxdmcp6:amd64 (1:1.1.2-1.1) ...
Setting up libxcb1:amd64 (1.11.1-1ubuntu1) ...
Setting up libx11-data (2:1.6.3-1ubuntu2) ...

▽
Setting up libx11-6:amd64 (2:1.6.3-1ubuntu2) ...
Setting up libxml2:amd64 (2.9.3+dfsg1-1ubuntu0.1) ...
Setting up xml-core (0.13+nmu2) ...
Setting up fonts-dejavu-core (2.35-1) ...
Setting up fontconfig-config (2.11.94-0ubuntu1.1) ...
Setting up libfreetype6:amd64 (2.6.1-0.1ubuntu2) ...
Setting up libfontconfig1:amd64 (2.11.94-0ubuntu1.1) ...
Setting up libjpeg8:amd64 (8c-2ubuntu8) ...
Setting up libtiff5:amd64 (4.0.6-1) ...
Setting up libvpx3:amd64 (1.5.0-2ubuntu1) ...
Setting up libxpm4:amd64 (1:3.5.11-1ubuntu0.16.04.1) ...
Setting up libgd3:amd64 (2.1.1-4ubuntu0.16.04.5) ...
Setting up libxslt1.1:amd64 (1.1.28-2.1) ...
Setting up nginx-common (1.10.0-0ubuntu0.16.04.4) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
debconf: falling back to frontend: Teletype
Setting up nginx-core (1.10.0-0ubuntu0.16.04.4) ...
invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of start.
Setting up nginx (1.10.0-0ubuntu0.16.04.4) ...
Processing triggers for libc-bin (2.23-0ubuntu5) ...
Processing triggers for sgml-base (1.26+nmu4ubuntu1) ...
Processing triggers for systemd (229-4ubuntu13) ...
 ---> 48a67b1a5bff
Removing intermediate container ec5a6d6d8bb1
Step 6/7 : RUN echo 'Hi, I am in you container'     > /usr/share/nginx/html/index.html
 ---> Running in 417ec79c0fd4
 ---> 95b11de0f9d5
Removing intermediate container 417ec79c0fd4
Step 7/7 : EXPOSE 80
 ---> Running in cd5c887ff495
 ---> 3250588d0ab5
Removing intermediate container cd5c887ff495
Successfully built 3250588d0ab5

代表镜像创建成功

几种镜像创建方式:

###默认的镜像创建方式
root@firephoenix-virtual-machine:/opt/docker/static_web# docker build -t="yourwilliam/static_web" .

### 带标签的镜像创建方式
root@firephoenix-virtual-machine:/opt/docker/static_web# docker build -t="yourwilliam/static_web:v1" .

###从git仓库创建Docker镜像
root@firephoenix-virtual-machine:/opt/docker/static_web# docker build -t="yourwilliam/static_web:v1" git@github.com:yourwilliam/docker-static_web

如果构建上下文的根目录下存在.dockerignore 命名的文件的话,那么该文件会被按行进行分割,每一行都是一条文件过滤匹配模式。

查看镜像

其中可以看到第一行为创建的镜像,之前的失败的镜像也在里面

root@firephoenix-virtual-machine:/opt/docker/static_web# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
yourwilliam/static_web   latest              3250588d0ab5        13 minutes ago      226 MB
<none>                   <none>              718100872482        17 minutes ago      129 MB
yourwilliam/nginx_test   latest              0d0093feafc1        About an hour ago   226 MB
ubuntu                   latest              f49eec89601e        12 days ago         129 MB

使用docker history命令可以深入探究镜像是如何创建出来的

root@firephoenix-virtual-machine:/opt/docker/static_web# docker history 3250588d0ab5
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
3250588d0ab5        18 minutes ago      /bin/sh -c #(nop)  EXPOSE 80/tcp                0 B
95b11de0f9d5        18 minutes ago      /bin/sh -c echo 'Hi, I am in you container...   26 B
48a67b1a5bff        18 minutes ago      /bin/sh -c apt-get install -y nginx             56.8 MB
097b144abeda        20 minutes ago      /bin/sh -c apt-get update                       39.7 MB
340aaa0cbe30        21 minutes ago      /bin/sh -c sed -i 's/http:\/\/archive.ubun...   1.94 kB
20d54ff737f4        39 minutes ago      /bin/sh -c #(nop)  MAINTAINER william "you...   0 B
f49eec89601e        12 days ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B
<missing>           12 days ago         /bin/sh -c mkdir -p /run/systemd && echo '...   7 B
<missing>           12 days ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\...   1.9 kB
<missing>           12 days ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0 B
<missing>           12 days ago         /bin/sh -c set -xe   && echo '#!/bin/sh' >...   745 B
<missing>           12 days ago         /bin/sh -c #(nop) ADD file:68f83d996c38a09...   129 MB

从其中可以看到每一步是如何创建出来镜像的

从新镜像启动容器

使用docker run来启动镜像

root@firephoenix-virtual-machine:/opt/docker/static_web# docker run -d -p 80 --name static_web yourwilliam/static_web nginx -g "daemon off;"
ab42b43c74ea4217516d695399554228f07c18ceb046707591a994d742fbd00b
root@firephoenix-virtual-machine:/opt/docker/static_web# docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                         PORTS                   NAMES
ab42b43c74ea        yourwilliam/static_web   "nginx -g 'daemon ..."   13 seconds ago      Up 13 seconds                  0.0.0.0:32768->80/tcp   static_web
90082b9a66f3        ubuntu                   "/bin/bash"              About an hour ago   Exited (0) About an hour ago                           sleepy_northcutt

使用 -d命令告知docker以分离的方式在后台运行,指定需要在容器中运行的命令 nginx -g “daemon off;” 这将以前台运行的方式启动Nginx,来作为我们的Web服务器。

-p命令用来控制Docker在运行时应该公开哪些网络端口给外部主机。可以通过docker ps -a 来查看端口的分配情况。

也可以使用命令查看容器的端口和ip的绑定

root@firephoenix-virtual-machine:/opt/docker/static_web# docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                         PORTS                   NAMES
ab42b43c74ea        yourwilliam/static_web   "nginx -g 'daemon ..."   6 minutes ago       Up 6 minutes                   0.0.0.0:32768->80/tcp   static_web
90082b9a66f3        ubuntu                   "/bin/bash"              About an hour ago   Exited (0) About an hour ago                           sleepy_northcutt
root@firephoenix-virtual-machine:/opt/docker/static_web# docker port ab42b43c74ea
80/tcp -> 0.0.0.0:32768

也可以指定端口

docker run -d -p 80:80 --name static_web yourwilliam/static_web nginx -g "daemon off;"

##或者

docker run -d -p 8080:80 --name static_web yourwilliam/static_web nginx -g "daemon off;"

##或者带ip

docker run -d -p 127.0.0.1:80:80 --name static_web yourwilliam/static_web nginx -g "daemon off;"

##也可以指定ip的随机端口

docker run -d -p 127.0.0.1::80 --name static_web yourwilliam/static_web nginx -g "daemon off;"

##还可以制定-P 参数来对外公开在Dockerfile 中EXPOSE指令中设置的所有端口

docker run -d -P --name static_web yourwilliam/static_web nginx -g "daemon off;"

也可以在端口绑定时使用/udp后缀来制定UDP端口。

配置完成后访问该网站就可以看到自己修改的信息了。

Dockerfile 指令

CMD指令

CMD制定用于指定一个容器启动时要运行的命令。类似于 docker run -i -t ubuntu /bin/bash 里面最后的/bin/bash

CMD格式:

CMD [“/bin/true”]

CMD [“/bin/bash”, “-l”]

要运行的命令是放在一个数组结构中的,docker推荐一直使用以数组语法来设置要执行的命令

docker run 命令可以覆盖CMD 指令。

在Dockerfire中只能指定一条CMD指令,如果指定了多条CMD指令,也只有最后一条CMD指令会被使用。如果想在启动容器时运行多个进程或者多条命令,可以考虑使用类似supervisor这样的服务管理工具。

ENTRYPOINT

ENTRYPOINT指令提供的命令不容器在启动容器时被覆盖,docker run命令中指定的任何参数都会被当做参数再次传递给ENTRYPOINT指令中指定的命令。

ENTRYPOINT ["/usr/sbin/nginx"]

ENTRYPOINT ["/usr/sbin/nginx", "-g", "deamon off"]
WORKDIR

WORKDIR指令用于在从镜像创建一个新容器时,在容器内部设置一个工作目录,ENTRYPOINT和/或CMD指定的程序会在这个目录下执行

可以使用WORKDIR为Dockerfile中后续的一系列指令设置工作目录,也可以为最终的容器设置工作目录。

WORKDIR /opt/webapp/db
RUN bundle install
WORKDIR /opt/webapp
ENTRYPOINT [ “rackup” ]

也可以通过-w 来覆盖工作目录

$ sudo docker run -ti -w /var/log ubuntu pwd
/var/log
ENV

ENV 指令用来在镜像构建过程中设置环境变量,这个新环境变量可以和后续的任何RUN指令中使用。

ENV RVM_PATH /home/run

使用 RUN gem install unicorn的时候等同于使用了命令 RVM_PATH=/home/rvm gem install unicorn

也可以在其他指令中使用这些环境变量

ENV TARGET_DIR _opt_app
WORKDIR $TARGET_DIR

同时这些环境变量也会被持久保存到我们的镜像创建的任何容器中

在docker run命令中可以是哦用-e 来传递环境变量

USER

USER指令用于制定该镜像会用什么样的用户去运行

USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group

也可以在docker run命令中通过-u选项来覆盖该指令指定的值。

如果不通过USER指令指定用户,默认用户为root。

VOLUME

VOLUME指令用来向基于镜像创建的容器添加卷。一个卷是一个可以存在一个或者多个容器内的特定目录,这个目录可以绕过联合文件系统,并提供共享数据或者对数据进行持久化的功能。

卷功能让我们可以将数据(如源代码)、数据库或者其他内容添加到镜像中而不是将这些内容提交到镜像中。并且允许我们在多个容器间共享这些内容。

VOLUME ["/opt/project"]

VOLUME ["/opt/projetc","/data"]

这条指令将会为基于此镜像创建的任何容器创建一个名为_opt_project的挂载点
也可以通过数组的方式指定多个卷

ADD

ADD指令用来将构建环境下的文件和目录复制到镜像中

ADD software.lic /opt/application/software.lic

将构建目录下面的software.lic文件和目录复制到镜像中。

Docker通过目的地址参数末尾的字符来判断文件源是目录还是文件。

如果目标地址以/结尾,那么Docker认为源位置指向的是一个目录。

如果目的地址以/课文吗。那么Docker认为源位置指向的是一个目录。

如果目的地址不以/结尾,那么Docker认为源位置指向的是文件

如果将一个归档文件(gzip、bzip2、xz)指定为源文件时,Docker会自动将归档文件解开

如果目标位置不存在的话,Docker会为我们创建这个全路径,新创建文件模式为0755,UID和GID都为0

ADD文件会使得构建缓存变得无效,如果通过ADD指令想镜像添加一个文件或目录,那么这将使Dockerfile中的后续指令都不能继续使用之前的构建缓存。

CORY

COPY只关心在构建上下文中复制本地文件,不会去做文件提取和解压的工作。

ONBUILD

ONBUILD 指令能为镜像添加触发器(trigger),当一个镜像被用做其他镜像的基础镜像时,该镜像中的触发器将会被执行。

触发器会在构建过程中插入 新指令,我们可以认为这些指令是紧跟在FROM之后指定的。

ONBUILD ADD . /app/src
ONBUILD RUN cd /app/src && make

ONBUILD触发器会按照在父镜像中指定的顺序执行,并且只能被继承一次。也就是做只能存在于子镜像中执行,而不会在孙子镜像中执行。

将镜像推送到docker hub

docker push yourwilliam/static_web
2017/2/12 posted in  云计算和大数据

Gartner’s Top 10 Strategic Technology Trends for 2017

Today, a digital stethoscope has the ability to record and store heartbeat and respiratory sounds. Tomorrow, the stethoscope could function as an “intelligent thing” by collecting a massive amount of such data, relating the data to diagnostic and treatment information, and building an artificial intelligence (AI)-powered doctor assistance app to provide the physician with diagnostic support in real-time. AI and machine learning increasingly will be embedded into everyday things such as appliances, speakers and hospital equipment. This phenomenon is closely aligned with the emergence of conversational systems, the expansion of the IoT into a digital mesh and the trend toward digital twins.

Three themes — intelligent, digital, and mesh — form the basis for the Top 10 strategic technology trends for 2017, announced by David Cearley, vice president and Gartner Fellow, at Gartner Symposium/ITxpo 2016 in Orlando, Florida. These technologies are just beginning to break out of an emerging state and stand to have substantial disruptive potential across industries.

Intelligent

AI and machine learning have reached a critical tipping point and will increasingly augment and extend virtually every technology enabled service, thing or application.  Creating intelligent systems that learn, adapt and potentially act autonomously rather than simply execute predefined instructions is primary battleground for technology vendors through at least 2020.

Trend No. 1: AI & Advanced Machine Learning

AI and machine learning (ML), which include technologies such as deep learning, neural networks and natural-language processing, can also encompass more advanced systems that understand, learn, predict, adapt and potentially operate autonomously. Systems can learn and change future behavior, leading to the creation of more intelligent devices and programs.  The combination of extensive parallel processing power, advanced algorithms and massive data sets to feed the algorithms has unleashed this new era.

In banking, you could use AI and machine-learning techniques to model current real-time transactions, as well as predictive models of transactions based on their likelihood of being fraudulent. Organizations seeking to drive digital innovation with this trend should evaluate a number of business scenarios in which AI and machine learning could drive clear and specific business value and consider experimenting with one or two high-impact scenarios..

Trend No. 2: Intelligent Apps

Intelligent apps, which include technologies like virtual personal assistants (VPAs), have the potential to transform the workplace by making everyday tasks easier (prioritizing emails) and its users more effective (highlighting important content and interactions). However, intelligent apps are not limited to new digital assistants – every existing software category from security tooling to enterprise applications such as marketing or ERP will be infused with AI enabled capabilities.  Using AI, technology providers will focus on three areas — advanced analytics, AI-powered and increasingly autonomous business processes and AI-powered immersive, conversational and continuous interfaces. By 2018, Gartner expects most of the world’s largest 200 companies to exploit intelligent apps and utilize the full toolkit of big data and analytics tools to refine their offers and improve customer experience.

Trend No. 3: Intelligent Things

New intelligent things generally fall into three categories: robots, drones and autonomous vehicles. Each of these areas will evolve to impact a larger segment of the market and support a new phase of digital business but these represent only one facet of intelligent things.  Existing things including IoT devices will become intelligent things delivering the power of AI enabled systems everywhere including the home, office, factory floor, and medical facility.

As intelligent things evolve and become more popular, they will shift from a stand-alone to a collaborative model in which intelligent things communicate with one another and act in concert to accomplish tasks. However, nontechnical issues such as liability and privacy, along with the complexity of creating highly specialized assistants, will slow embedded intelligence in some scenarios.

Digital

The lines between the digital and physical world continue to blur creating new opportunities for digital businesses.  Look for the digital world to be an increasingly detailed reflection of the physical world and the digital world to appear as part of the physical world creating fertile ground for new business models and digitally enabled ecosystems.

Trend No. 4: Virtual & Augmented Reality

Virtual reality (VR) and augmented reality (AR) transform the way individuals interact with each other and with software systems creating an immersive environment.  For example, VR can be used for training scenarios and remote experiences. AR, which enables a blending of the real and virtual worlds, means businesses can overlay graphics onto real-world objects, such as hidden wires on the image of a wall.  Immersive experiences with AR and VR are reaching tipping points in terms of price and capability but will not replace other interface models.  Over time AR and VR expand beyond visual immersion to include all human senses.  Enterprises should look for targeted applications of VR and AR through 2020.

Trend No. 5: Digital Twin

Within three to five years, billions of things will be represented by digital twins, a dynamic software model of a physical thing or system. Using physics data on how the components of a thing operate and respond to the environment as well as data provided by sensors in the physical world, a digital twin can be used to analyze and simulate real world conditions, responds to changes, improve operations and add value. Digital twins function as proxies for the combination of skilled individuals (e.g., technicians) and traditional monitoring devices and controls (e.g., pressure gauges). Their proliferation will require a cultural change, as those who understand the maintenance of real-world things collaborate with data scientists and IT professionals.  Digital twins of physical assets combined with digital representations of facilities and environments as well as people, businesses and processes will enable an increasingly detailed digital representation of the real world for simulation, analysis and control.

Trend No. 6: Blockchain

Blockchain is a type of distributed ledger in which value exchange transactions (in bitcoin or other token) are sequentially grouped into blocks.  Blockchain and distributed-ledger concepts are gaining traction because they hold the promise of transforming industry operating models in industries such as music distribution, identify verification and title registry.  They promise a model to add trust to untrusted environments and reduce business friction by providing transparent access to the information in the chain.  While there is a great deal of interest the majority of blockchain initiatives are in alpha or beta phases and significant technology challenges exist.

Mesh

The mesh refers to the dynamic connection of people, processes, things and services supporting intelligent digital ecosystems.  As the mesh evolves, the user experience fundamentally changes and the supporting technology and security architectures and platforms must change as well.

Trend No. 7: Conversational Systems

Conversational systems can range from simple informal, bidirectional text or voice conversations such as an answer to “What time is it?” to more complex interactions such as collecting oral testimony from crime witnesses to generate a sketch of a suspect.  Conversational systems shift from a model where people adapt to computers to one where the computer “hears” and adapts to a person’s desired outcome.  Conversational systems do not use text/voice as the exclusive interface but enable people and machines to use multiple modalities (e.g., sight, sound, tactile, etc.) to communicate across the digital device mesh (e.g., sensors, appliances, IoT systems).

Trend No. 8: Mesh App and Service Architecture

The intelligent digital mesh will require changes to the architecture, technology and tools used to develop solutions. The mesh app and service architecture (MASA) is a multichannel solution architecture that leverages cloud and serverless computing, containers and microservices as well as APIs and events to deliver modular, flexible and dynamic solutions.  Solutions ultimately support multiple users in multiple roles using multiple devices and communicating over multiple networks. However, MASA is a long term architectural shift that requires significant changes to development tooling and best practices.

Trend No. 9: Digital Technology Platforms

Digital technology platforms are the building blocks for a digital business and are necessary to break into digital. Every organization will have some mix of five digital technology platforms: Information systems, customer experience, analytics and intelligence, the Internet of Things and business ecosystems. In particular new platforms and services for IoT, AI and conversational systems will be a key focus through 2020.   Companies should identify how industry platforms will evolve and plan ways to evolve their platforms to meet the challenges of digital business.

Trend No. 10: Adaptive Security Architecture

The evolution of the intelligent digital mesh and digital technology platforms and application architectures means that security has to become fluid and adaptive. Security in the IoT environment is particularly challenging. Security teams need to work with application, solution and enterprise architects to consider security early in the design of applications or IoT solutions.  Multilayered security and use of user and entity behavior analytics will become a requirement for virtually every enterprise.

David Cearley is vice president and Gartner Fellow in Gartner Research and is a leading authority on information technology. Mr. Cearley analyzes emerging and strategic business and technology trends and explores how these trends shape the way individuals and companies derive value from technology.

Get Smarter

Events on Demand
A video replay of this session will be available on Gartner Events on Demand.

Complimentary Research
Read the complimentary report, Top 10 Strategic Technology Trends for 2017.

Leadership eBook
Learn how to lead through digital disruption. Download the complimentary CIO Leadership eBook.

Gartner’s Top 10 Strategic Technology Trends for 2017

2017/2/2 posted in  云计算和大数据

What's the difference between SLO vs. SLA?

Measurement source

What's the difference between SLO vs. SLA?

The terms SLO and SLA are often confused, but as you’ll learn in this expert tip, there are key differences.

A service-level agreement (SLA) is a contract between an external service provider and its customers or between an IT department and the internal business units it serves. The agreement documents what services the provider or IT department will produce and what performance standards the provider or IT department is expected to meet. The performance metrics, or service levels, associated with an SLA are sometimes referred to as service-level objectives (SLOs). SLOs describe, usually in measurable terms, benchmarks or goals set by the parties involved around the services a provider furnishes a customer within a given time period. For example, when used as a call center metric, an SLO might be for the service provider's agents to answer 80% of incoming calls within one minute.

SLAs enable customers and internal business units (collectively referred to here as "customers") to measure service provider or IT department (collectively referred to here as "service provider") performance and confirm that it is delivering services per the contract. SLAs are typically established for each IT service area, such as call center, data center or application maintenance. Customers create SLAs for each service they buy from a service provider, each of which includes a subset of performance metrics.

Although there is no hard and fast rule governing how many SLOs may be included in each SLA, it only makes sense to measure what matters.

Each SLO corresponds with a single performance characteristic relevant to the delivery of an overall service. Some examples of SLOs would include: system availability, help desk incident resolution time and application response time.

Eight components of an SLA

SLAs typically include the following components:

  • Service-level title
  • Service-level metric definition
  • Measurement calculation (the mathematical formula used to calculate the performance)
  • Measurement type (unit-based or event-based)
  • Measurement source (the tools used to monitor or measure)
  • Measurement period (the period of time over which performance is measured)
  • Default triggers (the measurable metric that must be met by the service provider to avoid service-level credit; e.g., resolution time for high-severity incidents is two hours)
  • Service-level credit (financial amount associated with a performance metric, which the customer is entitled to if the service level is not achieved)

SLA methodology

The SLA methodology refers to how the SLAs function; if the service provider doesn't perform per the agreed-upon metrics, a credit results. The eighth component in the SLA methodology listed above also defines the maximum credit; for example, the contract methodology might state that no more than 15% of the monthly invoice will be credited due to performance failure. Another piece of the methodology describes the pool of points that the customer can allocate across the various service performance metrics to designate priorities among the metrics. This allows customers to increase the weight or importance associated with a performance failure of a particular SLA. Customers should be able to change the points over time, based on shifting priorities.

Examples of SLOs

Below are three IT functions and examples of SLOs associated with each function. The eight components of SLAs listed above can be applied to examples here:

Data center: Application availability; virtual instance provisioning; disaster recovery time (e.g., performance must be restored within two hours).
Help desk: First-call resolution (e.g., 60% of all problems should be resolved during the first call); live communication response time (e.g., 80% of calls should be answered within one minute); abandonment rate (e.g., no more than 3% of calls received should be abandoned by the caller).
Application maintenance: Regression error rates; patch implementations; application availability (e.g., 99.9% uptime).

Benchmarking SLO metrics for optimal results

Besides understanding how to establish and enforce SLAs, customers need to determine the appropriate SLA default triggers based on industry and customer-specific requirements. This may mean deciding between 99.9% or 99.999% application uptime, for example, or between 20% first-call resolution or 60% first-call resolution.

Establishing benchmarks is a key step in creating an SLA because without them, customers may be asking for too little or too much from their service providers. Oftentimes, customers don't have data on their current performance if they haven't outsourced that particular function before. Or, they may be dissatisfied with their current outsourced results, if they're using SLAs with subpar performance metrics. Customers who are most satisfied with the performance of their suppliers are those that understand what the market will bear regarding SLA performance.

About the author:

Steven Kirz is a managing director at Pace Harmon, a consultancy for Fortune 500 and select midmarket companies in support of their outsourcing, technology sourcing, and transformation programs.

2017/1/26 posted in  云计算和大数据

2016年人工智能技术进展大盘点 - 极客头条 - CSDN.NET

作者简介: 赵永科,笔名卜居,CSDN博主,坚持写技术博客8年。现就职于阿里云计算有限公司,从事异构平台上的人工智能算法优化与系统设计,热爱读书和NES游戏。著有《深度学习:21 天实战 Caffe》一书。

责编: 何永灿,欢迎人工智能领域技术投稿、约稿、给文章纠错,请发送邮件至
heyc@csdn.net

本文为《程序员》 原创文章,未经允许不得转载,更多精彩文章请 订阅2017年《程序员》

如果说2015年大家还在质疑深度学习、人工智能,认为这是又一轮泡沫的开始,那么2016年可以说是人工智能全面影响人们生活的一年。从AlphaGo到无人驾驶,从美国大选到量子计算机,从小Ai预测“我是歌手”到马斯克的太空计划,每个焦点事件背后都与人工智能有联系。 纵览2016年的人工智能技术,笔者的印象是实用化、智能化、芯片化、生态化,让所有人都触手可及。下面我们以时间为坐标,盘点这一年的技术进展。

AlphaGo

3月9-15日,棋坛新秀AlphaGo一战成名,以4:1成绩打败韩国职业棋手围棋九段李世石(围棋规则介绍:对弈双方在19x19棋盘网格的交叉点上交替放置黑色和白色的棋子,落子完毕后,棋子不能移动,对弈过程中围地吃子,以所围“地”的大小决定胜负)。

其实早在2015年10月,AlphaGo v13在与职业棋手、欧洲冠军樊麾二段的五番棋比赛中,以5:0获胜。在与李世石九段比赛中版本为v18,赛后,AlphaGo荣获韩国棋院授予的“第〇〇一号 名誉九段”证书。7月19日,AlphaGo在GoRantings世界围棋排名中超过柯洁,成为世界第一。

看到AlphaGo这一连串不可思议的成绩,我们不禁要问,是什么让AlphaGo在短短时间内就能以如此大的能量在古老的围棋这一竞技项目迅速击败数千年历史积累的人类?

图1 AlphaGo与李世石的对阵

AlphaGo由Google在2014年收购的英国人工智能公司DeepMind开发,背后是一套神经网络系统,由许多个数据中心作为节点相连,每个节点内有多台超级计算机。这个系统基于卷积神经网络(Convolutional Neural Network, CNN)——一种在大型图像处理上有着优秀表现的神经网络,常用于人工智能图像识别,比如Google的图片搜索、百度的识图、阿里巴巴拍立淘等都运用了卷积神经网络。AlphaGo背后的系统还借鉴了一种名为深度强化学习(Deep Q-Learning,DQN)的技巧。强化学习的灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。不仅如此,AlphaGo借鉴了蒙特卡洛树搜索算法(Monte Carlo Tree Search),在判断当前局面的效用函数(value function)和决定下一步的策略函数(policy function)上有着非常好的表现。作为一个基于卷积神经网络、采用了强化学习模型的人工智能,AlphaGo具有广泛适应性,学习能力很强,除了玩游戏、下围棋,最近的DeepMind Health项目将人工智能引入了疾病诊断和预测中,为人们的健康提供更好的保障。

AlphaGo系统和IBM在上个世纪打败国际象棋大师卡斯帕罗夫的深蓝超级计算机有什么不同?

国际象棋AI算法一般是枚举所有可能招法,给局面打分。AI能力主要分为两方面:一是局面打分算法是否合理,二是迭代的深度。国际象棋开局的时候可以动8个兵(2)和两个马(2)共20种招法,虽然开局到中期招法会多一点,但是总数也就是几十种,游戏判断局面也简单,将军的加分,攻击强子加分,被将军或者有强子被攻击减分,控制范围大的加分,国际象棋里即将升变的兵加分,粗略一算就可以有个相对不错的判断。

围棋棋盘上每一点,都有黑、白、空,三种情况,棋盘上共有19*19=361个点,所以可能产生的局数为3的361次方种(可以想象,从137亿年前宇宙初始下起,60亿人口每天下60亿盘,到目前为止,只下了不到亿亿亿万分之一)。

围棋可选招法非常多,在初期可以全盘落子,打劫的时候则要找“劫材”。围棋判断形势的复杂度也很高,因为所有棋子地位平等,不在于一子定胜负,但每一子对于全局又都是牵一发而动全身,所以需要的是整体协调和全局决策。AlphaGo不仅能很快计算围棋当前局面的效用函数和决定下一步的策略函数,还能结合蒙特卡洛树搜索算法进行纵深的分析,得到整局棋的“最优解”。无论从计算复杂度还是决策的深度上,AlphaGo都有质的飞跃。

小结: AlphaGo可能是Google公关塑造的一个AI形象,但这是一次十分成功的尝试,引起了世界性的关注。在这些华丽的成绩之外,技术铺垫仍然是一项不容小觑的工作,包括DQN算法模型与硬件平台。我们接下来会详细介绍。

深度增强学习DQN

增强学习是最近几年中机器学习领域的最新进展。

增强学习的目的是通过和环境交互学习到如何在相应的观测中采取最优行为。行为的好坏可以通过环境给的奖励来确定。不同的环境有不同的观测和奖励。

增强学习和传统机器学习的最大区别在于,增强学习是一个闭环学习的系统,算法选取的行为会直接影响到环境,进而影响到该算法之后从环境中得到的观测。

增强学习存在着很多传统机器学习所不具备的挑战。

首先,因为在增强学习中没有确定在每一时刻应该采取哪个行为的信息,算法必须通过探索各种可能才能判断出最优行为。如何有效地在可能行为数量较多的情况下有效探索,是增强学习的重要问题。

其次,在增强学习中一个行为不仅可能会影响当前时刻的奖励,而且还可能会影响之后所有时刻的奖励。

在最坏的情况下,一个好行为不会在当前时刻获得奖励,而会在很多步都执行正确后才能得到。在这种情况下,判断出奖励和很多步之前的行为有关非常难。

虽然增强学习存在很多挑战,它也能够解决很多传统机器学习不能解决的问题。首先,由于不需要标注的过程,增强学习可以更有效地解决环境中所存在着的特殊情况。比如,无人车环境中可能会出现行人和动物乱穿马路的特殊情况。只要模拟器能模拟出这些特殊情况,增强学习就可以学习到怎么在这些特殊情况中做出正确的行为。其次,增强学习可以把整个系统作为一个整体,从而对其中的一些模块更加鲁棒。例如,自动驾驶中的感知模块不可能做到完全可靠。前一段时间,特斯拉无人驾驶的事故就是因为在强光环境中感知模块失效导致的。增强学习可以做到,即使在某些模块失效的情况下也能做出稳妥的行为。最后,增强学习可以比较容易学习到一系列行为。

自动驾驶需要执行一系列正确的行为才能成功驾驶。如果只有标注数据,学习到的模型每个时刻偏移了一点,到最后可能就会偏移非常多,产生毁灭性的后果。而增强学习能够学会自动修正偏移。

DeepMind曾用五款雅达利(Atari)游戏Pong、打砖块、太空侵略者、海底救人、Beam Rider分别测试了自己开发的人工智能,结果发现:游戏后,神经网络的操控能力已经远超世界上任何一位已知的游戏高手。

DeepMind用同样的一套人工智能,测试各种各样的智力竞技项目,取得了优异的战绩,足以证明坐在李世石面前的AlphaGo,拥有多强的学习能力。

图2 Atari游戏画面

小结:如果说深度学习相当于嗷嗷待哺的婴儿,需要人们准备好大量有营养的数据亲手喂给它,那么增强学习就是拥有基本生活能力的青少年,叛逆而独立,充满激情,喜欢挑战,不断在对抗中学习成长。虽然与成熟的人工智能仍有较大差距,但可以肯定,这只是个时间问题。

Google TPU

Google在今年5月18日Google I/O大会上宣布了加速机器学习的定制ASIC方案:张量处理单元(TPU)。这款芯片由Google工程师设计,用于加速TensorFlow软件,在AlphaGo中TPU也大显神通。TPU已经在用户无感知的情况下在Google云语音、Gmail、Google Photos和Google搜索业务中使用了一年时间。相比目前商品级GPU和FPGA,TPU每瓦性能高出一个数量级。

在大多数企业和研究机构中,设计并构建应用专用处理器是十分奢侈的。开发芯片即使很小的设计也需要投入上百万美元。定制设计的优势相比通用处理器具备更好的性能以及能效。为了平衡收支,需要大规模使用案例和部署量,这样才能将成本摊薄。云服务厂商显然满足这个条件。

图3 Google TPU近照

图4 配备Google TPU的集群

图5 寒武纪深度神经网络处理器发布现场

Google认为机器学习的规模是不可预估的,因此有必要构建专用硬件。这个举动当然也给世界上两大芯片厂商——Intel和NVIDIA带来不小触动,两家在新产品的研发上不得不多了一个难缠的对手。

近两年国内的人工智能处理器也如火如荼,最为知名的寒武纪深度神经网络处理器架构采用硬件神经元和硬件突触作为运算器,并为神经网络的高速连接设计了存储结构,另外还专门设计了与通用处理器完全不同的指令集。最新推出的寒武纪-1A(Cambricon-1A)商用智能处理器IP产品,可集成至各类终端SoC芯片,每秒可处理160亿个虚拟神经元,每秒峰值运算能力达2万亿虚拟突触,性能比通用处理器高两个数量级,功耗降低了一个数量级。该处理器荣获第三届世界互联网大会“世界互联网领先科技成果”奖项。

小结:通用处理器的设计和制造一向由芯片巨头垄断,而在人工智能快速发展的这几年,新架构、新应用使得处理器设计的话语权逐步转移到更大体量的互联网公司,利用规模优势,按照日益增长的需求定制计算架构,在处理器历史上书写新的篇章。

智能驾驶

汽车关系到人们出行,几乎每天必备,而利用人工智能解决出行需求是一个大胆的尝试。从去年的“滴滴”、“快的”烧钱大战开始,到两家合并、今年滴滴完成了对Uber中国并购,国内打车软件实现大一统。技术上,目前主要是利用大数据指导车辆调度,利用更少的成本满足乘客的需求。而各地曝光的打车乱象也成为平台痼疾。如何利用技术克服人性的弱点,是个自然而然的问题。一种思路是使用机器代替人担任司机。

无人驾驶、人工智能等已成为世界性的前沿科技,Google、微软、特斯拉等科技巨头新贵等纷纷布局于此,足见无人车极高的研发价值和广阔的市场。

除了商业价值,无人驾驶所能带来的社会价值更加让人浮想联翩。

首先可以想到,未来无人驾驶技术成熟,可以解放人们的双手。开车出行时,可以有更多的时间做自己的事情。而对于残障人士来说,则意义更大,可以有效提高出行效率,过上更加便捷快速的交通生活。

其次,无人车一定程度上会革新现代交通模式,解决交通道路安全问题。百度高级副总裁、自动驾驶事业部总经理王劲曾表示,人工智能用大量的服务器和数据来拟合成人类的驾驶能力,这个系统会比人类所有驾驶员甚至赛车手的水平都更高,这样才能保障驾驶的安全性。安全性之外,智能化的无人车同时也是大数据集散中心,可以时时将交通状况、行驶情况回传,政府交通指挥中心根据大数据进行交通调度,势必可以更好解决拥堵问题。此外,无人车还能推动汽车工业更环保,同时激活更多新兴产业,带动新的产业升级和行业转型,促进更多就业,高精尖人才的发展。

特斯拉(Tesla)

今年10月20日,马斯克宣布所有特斯拉新车将装备具有全自动驾驶功能的硬件系统——Autopilot 2.0,这套系统包括了8个摄像机、12个超声波传感器以及一个前向探测雷达。摄像机将提供360度的视角,最大识别距离250米,其中三个将观察前方,提供冗余以确保安全;超声波传感器能够探测软性和硬性的物体;而雷达则可以确保在雨天、雾天、沙尘和雾霾天气中正常工作。

图6 Tesla汽车内景

此外升级的还有车载电脑——新系统的大脑“Tesla Neural Net”(特斯拉神经网)基于nVIDIA的Titan GPU——每秒钟能进行12万亿次计算,比上一代车载电脑快了40倍。马斯克表示,这次的硬件升级将会即时实行,成为未来特斯拉汽车的标配。换句话说,从今天起,每辆新产出的特斯拉都会具有完全自动驾驶的能力。

百度无人车

在11月16日开幕的第三届世界互联网大会上,百度无人车再次亮相。大会期间,18辆百度无人车在桐乡市子夜路智能汽车和智慧交通示范区内首次进行开放城市道路运营。此次百度无人车在乌镇运营体验,是百度首次在开放城市道路情况下,实现全程无人工干预的L4级无人驾驶技术。

在去年12月的乌镇世界互联网大会上,习近平主席视察互联网之光博览会时,百度CEO李彦宏向习近平介绍了百度无人驾驶车。

早在2013年,百度就已经开启了前沿领域的项目布局,无人车由百度研究院主导历时两年研发,2015年12月,更是专门成立自动驾驶事业部,足见百度对无人车项目的重视。凭借LBS、图像识别、大数据等领域深厚的技术积累和人工智能技术的领先,目前百度无人车的研发已经达到世界领先地位。

百度无人驾驶是国内唯一一家通过功能安全ISO26262国际标准的全自动驾驶研究项目。去年12月,百度无人车实现了在北京五环上的上路测试,最高时速100公里,并首次实现城市、环路及高速道路混合路况下全自动驾驶,标志着中国无人驾驶车的发展进入里程碑的新阶段。

对于无人车来说,人工智能、深度学习的技术发展至关重要。无人车在行驶过程中,摄像头、感应器等原件会收集大量数据,而这些数据需要实时处理和分析,通过高性能的计算能力、先进的算法及深度学习系统,来实时适应周围的路面情况自动驾驶汽车。

而据了解,百度在国内拥有首家自主研发的三维高精度地图技术,已达到较高精度,同时具备国内领先的高精度地图采集与自动化处理技术,具备完整的高精度地图采集与自动化处理系统,可支持高精度地图的规模化生产。另外,百度也已经掌握了国内领先的实时高精度定位技术,实现厘米级的定位精度,相比于GPS定位精度提升了两个数量级。在关键技术上“领跑”世界。

小结:智能驾驶是一项复杂的工程,涵盖了汽车制造、自动控制、传感器、人工智能、地理信息、云计算、交通法规、社会伦理等多个领域,需要极强的技术水准和高尚的职业操守。

Intel人工智能布局

Intel收购Nervana

8月9日,Intel宣布收购创业公司Nervana Systems。Nervana的IP和加速深度学习算法经验可帮助Intel在人工智能领域获得一席之地。

Nervana提供基于云的服务用于深度学习,使用独立开发的、使用汇编级别优化的、支持多GPU的Neon软件,在卷积计算时采用了Winograd算法,数据载入也做了很多优化。该公司宣称,训练模型时,Neon比使用最普遍的Caffe快2倍。不仅如此,Nervana准备推出深度学习定制芯片Nervana Engine,相比GPU在训练方面可以提升10倍性能。与Tesla P100类似,该芯片也利用16-bit半精度浮点计算单元和大容量高带宽内存(HBM,计划为32GB,是竞品P100的两倍),摒弃了大量深度学习不需要的通用计算单元。

在硬件基础上,Nervana于11月份推出了Intel Nervana Graph平台(简称ngraph)。该框架由三部分组成:一个用于创建计算图的API、用于处理常见深度学习工作流的前端API(目前支持TensorFlow和Neon)、用于在 CPU_GPU_Nervana Engine上编译执行计算图的转换器API。

与此同时宣布成立Intel Nervana人工智能委员会,加拿大蒙特利尔大学Yoshua Bengio教授担任创始会员。

图7 Nervana Engine芯片架构

8月17日,在Intel开发者峰会(IDF)上,Intel透露了面向深度学习应用的新Xeon Phi处理器,名为Knights Mill(缩写为 KNM)。它不是Knights Landing和Knights Hill的竞品,而是定位在神经网络云服务中与NVIDIA Tesla GPU一较高下。

图8 ngraph框架

9月6日,Intel收购计算机视觉创业公司Movidius。

Movidius是人工智能芯片厂商,提供低能耗计算机视觉芯片组。Google眼镜内配置了Movidius计算机视觉芯片。Movidius芯片可以应用在可穿戴设备、无人机和机器人中,完成目标识别和深度测量等任务。除了Google之外Movidius与国内联想和大疆等公司签订了协议。Movidius的Myriad 2系列图形处理器已经被联想用来开发下一代虚拟现实产品。

9月8日,Intel FPGA技术大会(IFTD)杭州站宣布了Xeon-FPGA集成芯片项目。这是Intel并购Altera后最大的整合举动,Intel将推出CPU+FPGA架构的硬件平台,该平台预计于2017年量产,届时,一片Skylake架构的Xeon CPU和一片Stratix10的FPGA将“合二为一”,通过QPI Cache一致性互联使FPGA获得高带宽、低延迟的数据通路。在这种形态中,FPGA本身就成为了CPU的一部分,甚至CPU上的软件无需“感知”到FPGA的存在,直接调用mkl库就可以利用 FPGA来加速某些计算密集的任务。

Xeon-FPGA样机已经在世界七大云厂商(Amazon、Google、微软、Facebook、百度、阿里、腾讯)试用,用于加速各自业务热点和基础设施,包括机器学习、搜索算法、数据库、存储、压缩、加密、高速网络互连等。

除了上面CPU+FPGA集成的解决方案,Altera也有基于PCIe加速卡的解决方案。

图9 Xeon-FPGA集成芯片架构

11月8日ISDF大会上宣布,预计明年将销售深度学习预测加速器(DLIA,Deep Learning Inference Accelerator)。该加速器为软硬件集成的解决方案,用于加速卷积神经网络的预测(即前向计算)。软件基于Intel MKL-DNN软件库和Caffe框架,便于二次开发,基于PCIe的FPGA加速卡提供硬件加速。该产品将直接同Google TPU、NVIDIA Tesla P4/M4展开竞争。

小结:Intel在人工智能领域的动作之大(All in AI),品类之全(面向训练、预测,面向服务器、嵌入式),涉猎之广(Xeon Phi,FPGA,ASIC)令人为之一振。冰冻三尺非一日之寒,AI硬件和上层软件的推广与普及还有很长一段路要走。

NVIDIA人工智能布局

NVIDIA财报显示,深度学习用户目前占据数据中心销售额一半,而HPC占三分之一,剩下的为虚拟化(例如虚拟桌面)。这也驱动NVIDIA在硬件架构和软件库方面不断加强深度学习性能,典型例子是在Maxwell处理器中最大化单精度性能,而在Pascal架构中增加了半精度运算单元。与HPC不同,深度学习软件能够利用较低精度实现较高吞吐。

Pascal架构

在4月5日GTC(GPU Technology Conference)2016大会上,NVIDIA发布了16nm FinFET制程超级核弹帕斯卡(Pascal)显卡,最让人惊叹的还是一款定位于深度学习的超级计算机DGX-1。DGX-1拥有8颗帕斯卡架构GP100核心的Tesla P100 GPU,以及7TB的SSD,两颗16核心的Xeon E5-2698 v3以及512GB的DDR4内存,半精度浮点处理能力170TFLOPS,功耗3.2kW。售价129000美元,现已面市。

9月13日,NVIDIA在GTC中国北京站发布了Tesla P4和P40。这两个处理器也基于最新的Pascal架构,是去年发布的M4和M40的升级版,包括了面向深度学习预测计算的功能单元,丢掉了64位双精度浮点计算单元,取而代之的是8-bit整数算法单元。详细参数如下。

图10 DGX-1外观

Tesla P4为半高半长卡,功耗只有50~75W,便于安装到已有的Web Server提供高效的预测服务。同时,P4包括一个视频解码引擎和两个视频编码引擎,对基于视频的预测服务更为适合。

Tesla P40与P4用途稍有不同,绝对性能高,适合训练+预测,使用GoogLeNet评估时相比上一代M40有8倍性能提升。

图11 Tesla P4/P40参数对比

Tesla P100仍然是最合适训练的GPU,自带NVLink多GPU快速互联接口和HBM2。这些特性是P40和P4不具备的,因为面向预测的GPU不需要这些。

Pascal家族从P100到P4,相对三年前的Kepler架构提速达到40~60倍。

在硬件之外,NVIDIA软件方面也不遗余力。

图12 NVIDIA Pascal架构软硬件加速情况

cuDNN

NVIDIA CUDA深度神经网络库(cuDNN)是一个GPU上的深度神经网络原语加速库。cuDNN提供高度优化的标准功能(例如卷积、下采样、归一化、激活层、LSTM的前向和后向计算)实现。目前cuDNN支持绝大多数广泛使用的深度学习框架如Caffe、TensorFlow、Theano、Torch和CNTK等。对使用频率高的计算,如VGG模型中的3x3卷积做了特别优化。支持Windows_Linux_MacOS系统,支持Pascal_Maxwell_Kepler硬件架构,支持嵌入式平台Tegra K1/X1。在Pascal架构上使用FP16实现,以减少内存占用并提升计算性能。

TensorRT

TensorRT是一个提供更快响应时间的神经网络预测引擎,适合深度学习应用产品上线部署。开发者可以使用TensorRT实现高效预测,利用INT8或FP16优化过的低精度计算,可以显著降低延迟。

图13 TensorRT的使用方式

DeepStream SDK支持深度学习视频分析,在送入预测引擎之前做解码、预处理。
这两个软件库都是与Pascal GPU一起使用的。

小结:NVIDIA是最早在AI发力的硬件厂商,但从未停止在软件上的开发和探索,不断向上发展,蚕食、扩充自己在AI的地盘,目前已经涵盖服务器/嵌入式平台,面向多个专用领域(自动驾驶、医疗健康、超算),具备极强的爆发力(从今年NVIDIA股票也能看出这一点)。

FPGA 崛起

FPGA(Field-Programmable Gate Array)是现场可编程门阵列的英文缩写。简单来说,FPGA就像是一块空白的数字电路,开发者可以通过编写硬件代码的方式来设计一个数字电路,代码编写完成后,类似软件代码中的编译过程,FPGA的综合器会对代码进行综合、布局布线,之后会生成一个二进制文件,将这个二进制文件烧写到FPGA后,原本空白的FPGA就变成了开发者设计的电路,这就是“现场”和“可编程”的含义。同时,FPGA可以反复擦写,通过烧写不同的二进制文件来实现不同的功能。因此,FPGA是介于专用集成电路(ASIC)和通用处理器(CPU)之间的一种硬件。

Xilinx和Altera是世界上最大的两家FPGA厂商,共同占据了将近90%的市场份额。在2015年,Intel以167亿美元完成了对Altera的并购,并购后的Altera成为Intel可编程技术事业部。此次并购足以见得Intel非常看重FPGA在其生态体系中的作用,可以从中看到Intel携手FPGA进军数据中心的决心。图14为Altera的FPGA芯片。

历史上的FPGA作为“胶合”逻辑广泛应用于信号处理、ASIC验证等领域。所谓胶合逻辑即两个硬件模块进行互联时常常发现硬件接口、通信协议不匹配,这时在中间增加一级FPGA作为协议转换器,就能实现两个模块之间通信和资源共享,而不需要修改原有模块的软硬件设计。iPhone 7里面集成的Lattice FPGA(ICE5LP4K)就是这样的角色。

图14 Altera FPGA近照

随着工艺提升,集成度不断加大,FPGA内部的DSP资源也逐渐变多、变强,甚至超过了普通的CPU、GPU,这时利用FPGA做计算加速也顺理成章。FPGA具有高度可定制性、细粒度并行性,低功耗等特点,吸引了互联网企业的关注,越来越多的人在研究如何在数据中心中发挥FPGA的优势。受硬件资源限制,FPGA主要使用低精度(8-bit和16-bit)定点计算,所以一般都是面向神经网络预测而非训练。

值得注意的是,NVIDIA的低功耗GPU Tesla P4也专门面向预测,与FPGA形成了针锋相对的形势,在多种性能指标中P4也一骑绝尘碾压大多数FPGA器件。使用FPGA而非GPU的一个理由是,FPGA硬件连线可以定制,GPU架构是死的,升级硬件时需要重复投入资金,不像FPGA那样可以更新硬件连线来实现硬件升级。

FPGA编程绝非普通软件开发人员可以胜任。它涉及指定芯片门级布局。最近OpenCL和其他编译器技术引入,使得FPGA设计难度大大降低。

微软Azure

微软在Azure上采用FPGA加速机器学习和其他需要大量吞吐的应用和服务已有五年多时间。最早在2011年发起了Catapult项目。第一次FPGA落地项目为Bing搜索排序算法,将吞吐提升了两倍同时功耗降低至10%。利用云的巨大体量摊低成本,利用FPGA任意定制特性满足各种各样的应用场景,硬件可以实时升级。

最初的Catapult服务器是双路16核Xeon处理器+64GB RAM和一块Altera Stratix V FPGA板卡,2 TB SATA磁盘和两块480GB美光SSD。

8月份,微软发布了Catapult v2,特点是FPGA连接到CPU、主存和网络。这样,FPGA可以直接与另一块FPGA通信,而不需要经过CPU中转。该设计更适合水平扩展。除了加速AI应用,FPGA也用于加速Azure的25G网络设施,根据微软报告,FPGA可以实现1/10延迟。由于可动态配置,FPGA可以同时加速网络和机器学习应用。

9月27日,微软CEO Satya Nadella与工程师Doug Burger在亚特兰大Ignite会议上联合宣布每个Azure云服务器都安装了Altera FPGA(Catapult 2)。在演示环节,一个装备4块FPGA的服务器仅需2.6秒就能把1440页著名的俄语小说《战争与和平》翻译为英语,而一个24核CPU服务器完成相同任务需要19.9秒,功耗高60W。展示用的FPGA服务器使用10核CPU和4块基于Altera Stratix V D5 FPGA加速卡,其功耗为30W,峰值处理性能为7.9TOPS。使用同样的4块FPGA服务器将英文版Wikipedia全部30亿文本翻译为另一种语言需要4个小时,而Azure整个云都配备了FPGA,当Burger将几乎全部Azure计算能力(差不多1 EOPS)投入计算时,耗时不到0.1秒。

图15 Azure FPGA加速文本翻译展示

Xilinx收购Auviz Systems

Xilinx于9月宣布收购在卷积神经网络(CNN)领域有独到研究的Auviz Systems公司,这家成立仅三年的公司,专注于数据中心和嵌入式系统的加速应用,擅长机器学习、视觉算法和FPGA实现。

Auviz Systems提供基于FPGA的中间件IP,以减少应用程序的功耗。对于需要以低功耗实现高性能的应用,他们提供了FPGA库如AuvizCV, AuvizLA,AuvizDNN以及定制加速器和服务。而针对FPGA,Auviz库支持用C/C++或者OpenCL平台进行编程。

实际上,最近在人工智能领域热门的本土新创公司深鉴科技也采用赛灵思的FPGA完成卷积处理,深鉴科技的创始人汪玉在Xilinx大学计划年会上发言时特别强调了FPGA在卷积神经网络实现上的优势。深鉴成立于2016年3月,DeePhi提供软硬件协同设计方案,实现从模型到硬件的完整工作流。

图16 AuvizDNN加速CNN

小结:如果说只有大公司才有足够的财力、人力、物力去设计专用人工智能芯片,那么对于大多数中小企业而言,FPGA是更好的选择,设计相对灵活,成本投入更低,投放市场时间(Time-to-Market)更短。在人工智能硬件的舞台上,无论Hot Chips、 SC16还是ISSCC,我们看到越来越多的FPGA解决方案,呈现百花齐放百家争鸣的盛景。

嵌入式人工智能崛起

前面论述的绝大多数软硬件都是在服务器端的,无论Google TPU还是Azure上的FPGA,更不用说NVIDIA DGX-1这样的庞然大物。这些“高大上”的概念让普通人敬而远之。而与我们生活息息相关的大多数场景都与移动设备、嵌入式设备相连。值得注意的是,今年嵌入式设备上的人工智能也成为一道亮丽的风景。众多初创企业投入了这股热潮,努力将人工智能与具体用户需求结合,创造更具性价比的智能产品。今年ILSVRC比赛冠军商汤科技和海康威视,主要产品都是嵌入式设备,从而也为人工智能真正扎根到广大人民群众中间做好了准备,相信不出几年我们身边将会出现越来越多智能设备像智能手环、智能家居、智能健康设备、智能自行车、智能汽车、智能秘书帮我们完成细致而琐碎的工作。

TensorFlow

AlphaGo的灵魂就是TensorFlow。一年前,Google就将TensorFlow完全开源。半年前,Google发布了专门加速TensorFlow的硬件TPU。在短短的一年内,它的提交就超过了10000次,Google大脑部门做了许多性能改进:增加了对分布式培训的支持,支持从iOS到树莓派(Raspberry Pi)平台,与广泛使用的Hadoop/Spark大数据基础设施集成;发布了领先的图像分类模型Inception;目前是最流行的机器学习项目,广泛用于语音识别、图像识别、自然语言处理等多项机器学习和深度学习领域。

TensorFlow是第一个可以在iOS、Android设备和树莓派等移动设备/嵌入式设备上面运行的机器学习框架。这样可以在有摄像头的手机上运行TensorFlow的Inception分类器或自定义的分类器,只要把摄像头对准你希望做分类的东西,TensorFlow就会告诉你它认为这是什么。

Cartographer

Google在10月8日宣布开源Cartographer,这是一个ROS系统支持的2D和3D同步定位与制图技术(SLAM,simultaneous localization and mapping)库。SLAM是众多自动驾驶平台的重要组件,比如自动驾驶汽车、仓库中的自动叉车、扫地机器人、UAVs等。在产业界和学术界常见的传感器配置上,Cartographer能实时建立全局一致的地图。Google在官方声明中提到,SLAM算法结合了来自多个传感器的数据,比如LiDAR激光雷达传感器、IMU惯性测量单元,还有来自多个摄像头的数据。综合这些庞杂的数据,得以计算传感器及传感器周围的环境。Cartographer现已经支持Toyota HSR、TurtleBots、PR2、Revo LDS这几个机器人平台。

Caffe2Go

Facebook于11月8日宣布将深度学习系统Caffe2Go开源,可以完全运行在智能手机上,目的是让开发者更容易接触到人工智能。相比TensorFlow,晚了整整一年。
为了可以在iOS和Android设备上高效地运行各种深度神经网络,Facebook将用于图像和视频处理的AI模型压缩了100倍。最终实现在某些手机上用不到二十分之一秒的时间完成AI预测过程。

嵌入式设备并不总是独立作战,一些计算复杂度较高的任务会采用“云+端”的处理架构,一个例子是10月18日锤子手机新品发布会上演示的科大讯飞输入法,通过语音输入转换为文字,准确率达97%,其背后是基于深度学习的语音识别系统,单纯依靠移动端是难以实现的,即使实现了也会有诸如手机发烫、电池不够用等问题,将任务合理分工,“云+端”协作完成复杂任务,可以大幅提升用户体验。

小结:可以预见,将来会有更多具备人工智能功能的嵌入式设备和移动App,进一步拉近我们与人工智能距离,成为密不可分的知心朋友。或许有一天你几乎无法分辨你的微信好友究竟是人,还是AI。

总结

2016年是“智能驾驶元年”、“人工智能硬件元年”、“增强学习元年”、“嵌入式人工智能元年”。算法和模型创新、硬件提速、应用创新这三驾马车,将带领我们高速奔向更加智能的时代。

【CSDN_AI】热衷分享 扫码关注获得更多业内领先案例

2016年人工智能技术进展大盘点 - 极客头条 - CSDN.NET

2017/1/20 posted in  云计算和大数据

ZABBIX 3.2 windows操作系统Agent监控

  • release

下载Agent

Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution

下载Zabbix pre-compiled agents 下面的 Zabbix 3.2 里面的
Windows (All) i386,amd64 c975565c2395575bf929582e52a8f31d Download

下载后存储到本地

然后解压

安装windows-aget

6D4EEEB5-645F-4ACD-ADA3-F815C15F1F04

将解压后的文件按照这个目录结构拷贝到ZABBIX目录

修改如下配置:

Server=ss.ss.ss.ss(你自己zabbix server的ip地址)
 ServerActive=ss.ss.ss.ss
 Hostname=xx.xx.xx.xx (一般都用本机的ip地址,注意需要保持与监控添加的host保持一致)
 LogFile=c:\zabbix\log\zabbix_agentd.log
 Timeout=3 ####简单的几个地方要修改其他的可以保持不
##安装zabbix_agent服务
c:\zabbix\zabbix_agentd.exe -c c:\zabbix\zabbix_agentd.win.conf -i 
##启动zabbix_agent服务
c:\zabbix>zabbix_agentd.exe -c c:\zabbix\zabbix_agentd.win.conf -s 

卸载ZABBIX

c:\zabbix\zabbix_agentd.exe -c c:\zabbix\zabbix_agentd.win.conf -d
zabbix_agentd.exe [5072]: service [Zabbix Agent] uninstalled successfully
zabbix_agentd.exe [5072]: event source [Zabbix Agent] uninstalled successfully

在ZABBIX中配置监控

在主机中添加配置

58A37228-7EF3-452A-A6AC-D89AEFE9F9B5

在模板中添加windows os模板

5735B4FB-34D4-4C90-8208-9F57EA44C73E

完成后添加,等待2分钟后就可以开始监控了。

3.2 版本的监控项比2.2版本添加了比较多。

2016/12/20 posted in  云计算和大数据

zabbix 3.2 中文版本支持

  • release

解决整体版本中文

5F9A9B11-51AC-4944-AF69-C8F9D71FF512

默认的ubuntu不会安装中文语言包,需要在操作系统中先安装中文语言包,才能选择。

# locale-gen zh_CN.UTF-8

解决图表中的中文

前面解决了外面的中文,但是图标中的中文还是会有乱码,需要单独处理。

3.2版本有些改变了,修改中文的办法。

首先在windows中找到相应的中文字体,这里我们使用微软雅黑,在windows中下载,下载后放到 /usr/shared/zabbix/fonts 路径中。 记得把这里的文件名 MSYH.TTF 修改为小写msyh.ttf 。

然后修改文件

vi /usr/share/zabbix/include/defines.inc.php
#修改第93行
define('ZBX_FONT_NAME', 'msyh'); 
#修改第45行改为 
define('ZBX_GRAPH_FONT_NAME', 'msyh')

修改完成之后,登陆系统就改变过来了。

2016/12/20 posted in  云计算和大数据