为什么容器技术将主宰魔兽世界主宰的回响

酷勤网 C 程序员的那点事!
当前位置: >
浏览次数:次
请允许我先做一个大胆的预测:容器将统治世界。本文不讨论容器技术细节,而是从更高的格局:容器对互联网的变革,它的经济成本和效益上娓娓道来。
让我们先从集装箱说起,最近刚读了一本书,《集装箱改变世界》,里面洋洋洒洒20万字讲了一个20世纪全球运输业和世界经济被集装箱彻底颠覆的故事。
在香港、上海、深圳或者荷兰的鹿特丹货运港口,停靠在码头的巨大的集装箱船和岸边堆场里叠起来的数万个金属集装箱;旁边数十米高的大型起重机臂不停地吊起这些几十吨的集装箱,在几分钟内安放到集装箱船上;几小时后巨轮拔锚启航,上面承载了数千个集装箱。如果你曾见识过此情此景,一定会赞叹现代航运的高效率和大容量,以及依托它而建立的广泛的全球贸易。
上世纪60年代以前,集装箱运输还未被认可,几乎所有的货物都是以散件方式运输。
以&勇士号&为例,在一次从布鲁克林到不来梅的运输中,货物装卸都是由普通的码头工人来完成的,它装载了5015英吨的货物,主要是食品、日用品、邮件、机器和车辆的零部件以及53辆车。这批货物的数量达到了惊人的194582件,而且大小和种类各不相同。
所有的货物都是码头工人一件一件放到货盘上,再把货盘降到船舱中一件一件搬下来堆好。他们装完这艘船总共用了6天时间,其中还有一天是因为罢工而浪费掉了。横跨大西洋的航行用了10天半的时间;在不来梅港,码头工人是昼夜不停地干活儿,他们卸船用了4天时间。总而言之,这次航行有一半时间都花在码头上。这船货物中的最后一批到达其最终目的地的时间,是&勇士号&停靠不来梅港之后的第33天,是它从纽约港起航后的第44天,是其中最早起运欧洲的货物从美国的来源地上路后的第95天。95天!!!重要的事说3遍。
运送这批货物的总成本达到了237577美元,还没有算上&勇士号&返回纽约的成本以及运输过程中暂时存放货物的支出。在这个总额当中,海上航行本身的支出仅占11.5%,而在航行起点和终点的两个码头上,货物处理的费用占到了总支出的36.8%。这比轮船公司的主管常常说的50%要低,但是,这仅仅是因为德国的&经济奇迹&还没有把码头工人的工资推上去。研究者注意到,如果不是因为德国码头工人的工资比美国的码头工人低1/5,港口成本肯定还会高出很多。研究者最后得出的结论是,要降低总的运输成本,最好的办法是降低在美国各港口接收、储运、装载离岗货物的成本。他们还进一步提出忠告说,政府和企业应该提高码头工人的劳动生产率,消除低效率的工作惯例,尽早彻底地反思整个流程。他们在研究报告中写道:&或许,补救的方法就在于找到可以避免散件处理的包装、搬运和装载货物的方法。&
为什么非要装载、卸载、转移和再装载那么多的散件货物?为什么不把货物装进大箱子里,然后就只装卸和搬运这些箱子?
运输业大量采用集装箱后,由咖啡制造商发出的一只35吨的集装箱,可以在马来西亚离开工厂,装上一艘货轮,经过16天的航行到达9000营里之外的洛杉矶。一天之后,这个集装箱被一列火车运到芝加哥,并被随机转移到了一辆开往辛辛那提的卡车上。从离开马来西亚的工厂到抵达俄亥俄州的仓库,这次11000营里的行程可能只需要花费22天的时间,其速度是每天500英里,而费用比一张单程的头等舱机票还低。另外,在这一路上,很可能没有人碰过集装箱里的东西,甚至根本没有人打开过它。同传统的货轮相比,集装箱船的装卸只需要大约1/6的时间和1/3的劳动力。
集装箱最大的成功在于其产品的标准化以及由此建立的一整套运输体系。无论货物的体积、形状差异有多大,最终都被装载进集装箱里。由于要实现标准尺寸集装箱的运输,堆场、码头、起吊、船舶、汽车乃至公路桥梁、隧道等,都必须适应它在全球范围内的应用而逐渐加以标准化,形成影响国际贸易的全球物流系统。由此带来的是系统效率大幅度提升,运输费大幅度下降,地球上任何一个地方生产的产品都可以快速而低廉地运送到有需求的地方。
两种货运方式的对比:
集装箱运输
货物装卸时间
几天到一个星期,分拣、合并、装卸过程繁琐
货物装卸时间占整个运输过程的比例
所需劳动力
大量的码头工人
少数的码头工人和起重机操作员
自动化程度
低,装卸时常有物品损毁和盗窃
高,货物被隔离在封闭的集装箱内
总体运输时间
货物装卸时间+实际运输时间
在总距离和运输工具的运输速度不变的前提下,可节约一半以上的时间
货物越多,成本越高,耗时越长
前期固定成本投入较高,随着集装箱规模、运货量的增加,分摊到运送每个集装箱的成本极低,总成本几乎不变
假设运价是P
这本书的英文名称是&The Box:How the shippingcontainermade the world smaller and the world economy bigger&
阅读此书的过程中,我已经联想到了现今逐渐流行也备受质疑的以Docker为首的容器技术;当留意到container一词出现在书名中时,我已经迫不及待地把我的观点分享给你,帮助你从一个技术圈从未提及的角度来理解容器技术。
Docker近两年成了容器技术的代言,我们做一个集装箱与容器的类比:
应用的发布者,现实中多为应用的生产方,即开发者
使用应用的互联网用户
构成应用的代码、组件、依赖等
Docker容器
应用的发布、撤销
实际操作应用发布过程的人,现实中多为运维人员
散件装卸、运输方式
应用发布过程中逐个安装部署代码、组件、依赖、配置环境等
集装箱装卸、运输方式
把应用运行所需的外部环境、内部代码、组件、依赖打包放进容器,应用发布以容器为单位
港口的码头、起重机、集装箱堆场
应用发布所需的基础设施与工具
轮船/轮船公司
容器运行平台,如可以运行容器的云计算平台
我开始怀疑,Docker公司的创始人读过此书或研究过货运业的发展历史,并从其中汲取了灵感,其公司的Logo即是大鲸鱼上拖着集装箱。Docker的创始人堪称当代互联网界的麦克莱恩[见注释1]。
容器技术正在快速改变着公司和用户创建,发布,运行分布式应用的方式,在未来5年将给云计算行业带来它应有的价值,其诱人之处包括:
资源独立、隔离
资源隔离是云计算平台的最基本需求。Docker通过linux namespace, cgroup限制了硬件资源与软件运行环境,与宿主机上的其他应用实现了隔离,做到了互不影响。不同应用或服务以&集装箱&(container)为单位装&船&或卸&船&,&集装箱船&(运行container的宿主机或集群 )上,数千数万个&集装箱&排列整齐,不同公司、不同种类的&货物&(运行应用所需的程序,组件,运行环境,依赖)保持独立。
环境的一致性
开发工程师完成应用开发后build一个docker image,基于这个image创建的container像是一个集装箱,里面打包了各种&散件货物&(运行应用所需的程序,组件,运行环境,依赖)。无论这个集装箱在哪里:开发环境、测试环境、生产环境,都可以确保集装箱里面的&货物&种类与个数完全相同,软件包不会在测试环境缺失,环境变量不会在生产环境忘记配置,开发环境与生产环境不会因为安装了不同版本的依赖导致应用运行异常。这样的一致性得益于&发货&(build docker image)时已经密封到&集装箱&中,而每一个环节都是在运输这个完整的、不需要拆分合并的&集装箱&。
相比传统的虚拟化技术(VM),使用docker在cpu, memory, disk IO, network IO上的性能损耗都有同样水平甚至更优的表现。Container的快速创建、启动、销毁受到很多赞誉。
Build Once, Run Everywhere
这个特性着实吸引了我,&货物&(应用)在&汽车&,&火车&,&轮船&(私有云、公有云等服务)之间迁移交换时,只需要迁移符合标准规格和装卸方式的&集装箱&(docker container),削减了耗时费力的人工&装卸&(上线、下线应用),带来的是巨大的时间人力成本节约。这使未来仅有少数几个运维人员运维超大规模装载线上应用的容器集群成本可能,如同60年代后少数几个机器操作员即可在几小时内连装带卸完一艘万级集装箱船。
我相信以上4点是容器能够定义未来应用发布的几个原力,现在正值原力的觉醒。
我在日常工作中遇到的一个有趣的例子是:我所在的部门有人希望使用或为其他人提供大数据技术栈中的某些软件服务,如:Elasticsearch(ES), Kibana, Spark, Kafka, Redis, MongoDB。一些人甚至只是想做些简单的功能验证,而他们却要先花一上午甚至一天去依次完成下载软件本身、修改ulimit、设置环境变量、下载JAVA运行环境、编译某些组件、安装其他依赖包、创建目录、进行若干次容易出错的配置、经历3次以上程序启动失败。可悲的是,下次如果想在其他服务器上提供类似的服务仍要重复前面的经历,更别提把这个任务交给一个新人负责完成需要多长时间。他们就像50年前可怜的码头工人一样,四肢发达,头脑简单,重复着旧式散货装卸模式,抱怨着活多钱少。我们现在正着手用Docker做一个类似Google Cloud Engine一键创建服务(one click)的Setup ELK (ES + Logstash + Kibana) in One Click。
正如集装箱对全球运输业及经济的变革不应仅仅归因于集装箱本身而是全社会系统协同创新一样,Docker也将是全系统的变革,除了拥有运行容器的基础技术工具,还需要构建整个生态系统。如 &Build, Ship, and Run
Any App, Anywhere&需要依赖应用所有的宿主在基础架构上搭建好docker container的运行环境才可以;而要实现现在容器行业大力宣扬的&大规模应用弹性伸缩&,如果没有大规模的容器和资源管理方案(如Mesos, Kubernetes)是绝不可能实现的。Docker公司在这方面还是比较有远见的,自己开发或收购了不少产品布局整个生态,如Docker hub, Docker swarm, Docker compose, Tutum。
实际的货运中,发货商只关注货物从出发到到达客户手中的总运价和时间,他们希望减少总成本和时间,运输公司负责并且能够处理好公路铁路航海运输中的一切细节。没有发货人会去关注运输的路线、顺序以及集装箱轮船停靠在哪个港口。目前提供容器服务的产品还远未达到真正帮助应用发布者节省时间和成本的目的,享受容器优势的同时,应用发布者总是不得不亲自处理各种细节甚至亲自实现其中缺失的功能,开发者在Docker及周边产品的源码中发现了很多坑,由此导致的额外成本埋没了容器服务潜在的巨大价值。随着容器技术及其生态系统的发展,相信以上问题会逐渐得到改善,Docker版本的迭代速度一直很快。
我们在这里预测一下容器技术接下来的发展:
容器技术本身及生态系统的发展
容器是一项伟大的变革,但它还不能在短时间内产生巨大效益
我们中国人何不尽早加入容器行列,与美国佬一起完善的容器生态系统呢,还那么钟爱Copy to China?
随着云计算和容器的普及,互联网行业自动化程度将进一步提高,运维人员由劳动密集型逐渐转向技术知识密集型。
容器技术标准
容器相关的技术标准的诞生将促进整个大系统的各方更好的协调和兼容。
云计算平台的支持
现有云计算平台要么尽快支持容器技术,要么被新的支持容器的云计算平台超越。中国香港、上海、深圳、青岛、天津在上世纪60~80年代抓住了集装箱发展的机遇,成为全球供应链上的主要枢纽港,2014年仍处在全球10个最大吞吐量集装箱港之列。
使用容器的习惯逐渐形成
培养应用发布者使用容器发布应用的习惯是非技术问题,也需要时间去沉淀。全球运输业花了近15年培养出了发货商使用集装箱的习惯,在互联网行业不需要这么慢。
Mesos, Kubernetes等容器管理方案将助力 &巴拿马级&,&马六甲级&[见注释2]的容器&轮船&。Mesos, Kubernetes等成熟通用的集群管理方案将为你做好大规模分布式容器的启停、调度、编排、高可用。与现有的大部分互联网服务类似,容器依赖于规模,云计算平台服务的客户越多,运行的容器规模越大,构建整套容器运行体系的固定成本就被分摊得越薄,客户使用云计算服务的资费就能降下来。
应用在云计算平台间的无缝迁移
未来的应用在不同的云计算平台(支持容器)间迁移成本更低。如同集装箱在汽车、火车、集装箱船之间的无缝迁移。
在未来世界,云计算不止是互联网的公共基础服务,也是被互联网渗透的所有行业的公共基础服务,公有云也好,私有云也罢,几乎所有的信息服务都将在云上。从集装箱诞生到运输业广泛采用集装箱,大宗货物运输成本普遍减少50%以上,耗费了约60年。我相信在互联网领域,容器的普及都用不了6年,希望在这个互联网基础服务里掘金的企业,请跑步入场!
麦克莱恩是历史上第一个用纯集装箱船运输装在集装箱里的大宗货物的企业家,他极大推动了集装箱运输方式在运输业(公路、铁路、航海)的发展和普及。
巴拿马级,马六甲级的轮船指的是巴拿马运河、马六甲海峡允许通过的最大尺寸的轮船,意指集装箱船体量大,运载能力强。如《集装箱改变世界》一书中提到&马六甲级集装箱船的长度将达到1320英尺,宽地达到190英尺,它的运载能力将是18000只标准箱。&
References
《集装箱改变世界》
ISBN: 6 机械工业出版社 出版年: 2014-1
百度百科&集装箱&词条
Ranking of Container Ports of the World
The largest container ports worldwide in 2014, based on throughput
Competitiveness of the port of Hong Kong
Docker官方网站
Docker VP Marianna Tessel:下一步容器技术的热点
IBM Research Report:An Updated Performance Comparison of Virtual Machines and Linux Containers
酷壳的Docker基础技术系列
Kubernetes Official Website
Learn DCOS
& 相关主题:热门游戏:
当前位置: >
> 主宰世界哪个职业强 全职业介绍
主宰世界哪个职业强 全职业介绍
所属游戏: 来源: 发表时间:
  哪个职业强是9K9K小编为大家带来的,主宰世界哪个职业强9k9k小编主要分享给大家的内容,同时主宰世界哪个职业强小编也为玩家朋友们带来了,一起来看下吧。很多玩家纠结如何才能选到适合自己或者说选择到心仪的职业,下面说下个人对以下几个职业的简单粗暴的评价以供参考。
  1.圣武堂:肉盾坦克型,输出不强,但绝对够肉,能扛得住输出。这个职业竟然还有控制,近身拉人,简直就是变态。唯一的缺点是输出太弱,对输出装备的需求大。
  2.蓬莱阁:大奶妈,在游戏内是唯一救命的职业,在大多数活动任务中必不可少,竞技需要,剧情需要,抓鬼需要。辅助职业里面的抢手货。单打还可以召唤帮手,并不缺少输出。
  3.灵虚宫:这个门派的技能就是群秒,各种群攻法术,法术输出量大,群PK和刷怪升级必组。但本身脆和到后期输出跟不上,需求打造强大的装备和宠物支持。
  4.蜀山派:暴力中的暴力,物理输出绝对爆表,单P中的圣手。唯一的缺点是法防太低,很容易被法术秒掉。
  5.天弓营:这个职业玩的是后期,前期输出算低,秒不了人。后期输出会慢慢跟上,而且是群攻,后期PK暴力。
  每个职业都有各自的特点,看了介绍也确实难以快速决定。不过职业的选择是看个人爱好,不喜欢打打杀杀的,尤其是女孩玩家,可以选择蓬莱阁和圣武堂,慢慢玩,混人品,争取让大家带带。男孩玩家大部分都喜欢输出,灵虚宫、蜀山派成为他们的首选。天宫院和圣武堂玩家需要的是耐心,不鸣则已一鸣惊人,玩出个性,没有最强只有更强。
  以上就是主宰世界哪个职业强的说明了,希望本篇攻略对大家有所帮助,如果你喜欢主宰世界游戏,可以查看浏览更多信息。
将此文分享给好友
相关新闻攻略
名称:主宰世界
类型:角色扮演
状态:正式运营
开发:广州四三九九
方式:即时制
题材:仙侠
大家都在关注的游戏
火爆开服推荐
主宰世界游戏截图
扫描二维码
关注微信,获取最新超值礼包在10个鸡蛋上坐了3星期后,终于成功孵化出第一颗鸡蛋。
但礼仪小姐、导购小姐依然是场内的一道风景线。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
  关注ITValue,查看企业级市场最新鲜、最具价值的报道!
  ITValue注
  梁启鸿,现任广发证券信息技术部副总经理,热衷于运用互联网开源技术到证券业应用中、打造新型金融科技研发组织。加入广发证券前分别在雅虎研究院、Sun及Morgan Stanley等公司任职。
  2016年,容器化技术如火如荼,诞生于2013年的Docker成了行业的宠儿。容器技术也已经在广发证券规模化使用。
  容器技术虽然有点过火现象,虽然很多IT人(尤其是在传统垂直行业的信息技术部门)依然怀疑容器与虚拟机的差别,但总体来说,当今企业互联网+大潮,容器化算得上是软件开发领域的又一次“运动”。抱着开放的心态看,虽然Docker技术本身尚欠缺成熟,但是容器技术对未来的软件架构会产生重大影响,有可能成为传统企业IT拥抱互联网技术、升级架构体系的一个转型契机。
  容器技术带来的三大改变
  “软件开发”也遵循“合久必分”(Divide-and-conquer)、“分久必合”(Combine-and-conquer)的规律,例如:从Mainframe向Client-Server到Web/3-tiered架构的发展,可以算是一个分层分治的过程;Client-Server架构下的系统多了就造成服务器端资源的浪费,然后以IBM、Sun、HP为首的厂商,在本世纪初开始推销所谓Server Consolidation的解决方案。随着虚拟化技术的成熟,物理服务器逐渐变成虚拟服务器,世界又回归一个逻辑上分布、物理上集中的“超级Mainframe”。有些技术,往往是“似曾相识”,是新技术世代下用新技术手段对旧的理念的回归。例如SOA架构+RIA,是对C/S架构某种程度上的回归、虽然技术载体大不一样。同理,Micro Services也体现SOA的理念(虽然两者是巨大的不一样,见后文)。
  容器化,可以说是近年来最重要的一次“运动“,很快就会成为一种潮流。无论有无必要,开发工程师的代码都以容器交付,否则就像Web 1.0时代还在开发Client-Server甚至Mainframe的应用,都不好意思出去跟人说。在这股潮流下,有厂商的推波助澜,有一窝蜂的赶潮流,也有切实的业务场景驱动。
  无论如何,容器化将为软件业带来以下变化。(1)常态化,尤其是当ISV也把它们的产品容器化之后;(2)促进分布式架构在传统企业IT里的采用(此前,大部分垂直行业IT并不擅长互联网企业所擅长的分布式架构,现在只要接受了容器概念,显然就走向分布式);(3)促进已经讲了8年以上的DevOps落地、可操作。
  容器化与“去IOE”、微服务
  说到传统企业IT的技术架构,就不得不提一下“去IOE”,因为尤其在金融机构,IOE是无可辩驳的存在。
  乍一听,“容器化可以帮助‘去IOE’”的说法有点哗众取宠。但仔细想想,其实还真可以拉扯点关系。
  如果我们不带偏见的把IOE看成一些象征性的符号而不是具体的某些公司的话,IOE一定程度上代表了上一个世代的技术,对于只生存在开源技术世界里的互联网企业的年轻工程师尤其如此。IOE甚至在一定程度上是Client-Server架构思潮下的产物,代表了以关系型数据库为中心、以中央存储阵列为主导、以品牌服务器硬件为载体的技术架构风格,这类技术的存在依然有充分必要的业务应用场景,盲目的“去”,只能是自找麻烦和浪费资源。
  但换一个角度看,“去IOE思维”却又是有意义的,因为在实践中我们已经发现:关系型数据库被企业里的应用开发者们过度滥用。事无大小,都被存入数据库,包括一些配置信息。事务型操作往往也没有控制好粒度,开发者为了“稳妥”起见囫囵吞枣的把CRUD操作都丢到事务里,期望由数据库来解决自己的不求甚解和懒惰。实际上,很多问题,其实是可以不用关系型数据库解决的。互联网时代尤其是Web 2.0开启后,从3-tiered向分布式架构演进,RDBMS为中心、高端硬件为依托的架构已经力不从心;就算不向互联网转型,传统业务系统在当今这个时代沿用旧的技术架构依然扛不住,比如,在2015年疯狂的股市下,高频、高并发、海量的交易就是股票交易系统的梦魇。
  “去IOE”最难的是观念的改变,传统企业IT的工程师,非常习惯于用关系型数据库的语义、概念作为对业务领域(businessdomain)的建模工具,一言不合就开始设计表结构、画ER(EntityRelationship)图。开发过程中,可能大部分时间消耗在ORM(Object-Relationsal Mapping)上,即从数据模型出发封装一些对象以便于数据持久层和内存之间关联起来。这导致传统IT系统的升级动辄涉及数据库迁移,功能扩展通常导致表结构改变。
  实际上用关系型数据库的理念对世界进行建模(modeling),具有很多局限性。一是无法对业务逻辑进行抽象,二是无法对业务数据进行封装。这样做的缺点,是所建立的模型无法低成本扩展、重构,以快速应对持续变化的业务场景,在当今这个“只有变化才是唯一的不变”,并且变化频率本身是指数级改变(《奇点临近》作者Ray Kurzweil所言)的世界,这样的设计导致的显然是一个变更成本非常高的“脆弱系统”,无法拥抱改变,应对黑天鹅(关于脆弱系统,见塔勒布《反脆弱》)。
  “世界观决定方法论”,中医和西医对人体的建模差别,决定治病的方法截然不同。例如前者用经络、寒热、干湿、虚实、阴阳来描述病理,后者用细胞、基因、细菌、病毒来看待问题,导致同一个疾病的不同处理手段。有些问题用这种模型来看容易解决,有些问题则用另一种模型描述更有效。盲目的用关系型数据库看待一切,是很多问题的根源。
  以关系型数据库为中心的应用,一般都是单体应用(monolithic),虽然它们可能也会融合一些分布式的技术元素,扩容、扩展、弹性伸缩、响应变更等等这些非功能性需求,依然是它们所难以满足的。在看到这类架构的问题后,技术界开始出现混合编程(polyglot programming)、混合存储(polyglotpersistence)和混合处理(polyglot processing,例如大数据里的zeta架构)的潮流,微服务(Micro Services)的架构风格与理念也逐渐形成。
  微服务实施的具体问题在于,停留在“理念”、“最佳实践”层面的东西,很难在一般垂直行业的IT内部落地,因为面向业务的工程师们,关注点不在底层技术细节,无法投入资源去研究自己的平台,凡是能在垂直行业推广的技术,必须是具体有形的工具、API、框架。
  容器技术作为看得见摸得着的、同时被运维人员和开发人员使用的工具链,对微服务的开发和运维,提供了巨大的推动力。虽然微服务本质上不依赖于容器,但是没有容器技术的支持,微服务在一般企业IT里的落地是不乐观的。
  这就产生一个非常有趣的副作用:一旦技术人员习惯了容器化的观念,他们很可能不知不觉就走上了分布式架构的道路、潜移默化接受了微服务的思维,我们知道技术人员是很容易“心为物役”的,他们的抽象思考往往需要寄托在有型的工具上。例如Heroku的12-Factors(12律),总结了12项在云上开发分布式应用的最佳实践,可以看到,采用容器化的架构,很自然的就吻合这些实践。
总而言之,“去IOE”从它最开始的起源来看其实是去单体应用架构、去“数据库中心主义”,是分布式架构对传统企业技术套路的颠覆,而容器化一旦成为主流,分布式架构就会不知不觉中成为企业IT架构的主流。
  微服务与容器化不能本末倒置
  容器化既然被说的这么玄乎,那么是不是就该一窝蜂地引入企业IT呢?个人认为,
  如果企业环境并无特别适合“微服务化” 的应用,那么也并无采用容器技术的必要,即便是已经采用了SOA的技术架构与技术治理,千万别以为就顺理成章可以换一个时髦点的名字“微服务”。
  一个微服务通常很可能是通过从现有服务fork(开分支)、clone(直接复制)、mutate(变种)出来,这很有可能违反软件工程中一个所谓DRY(Don't Repeat Yourself)的原则。我们已经习惯于认为,剪贴代码是糟糕的、粗暴复制功能不好的。然而,我们必须接受一个现实,粘贴代码、复制部署服务可能就是大部分以业务功能为终极目标、以快速上线为首要任务的普通工程师的本能,quick-n-dirty是任何团队绕不开的取舍。微服务,通过结合容器技术,一定程度上接受了普通程序员克隆服务、克隆代码的“陋习”。
  比如,在系统升级方面,在条件允许的情况下,运维工程师最喜欢的可能是部署一套新的,旧的不碰。新的没问题,把旧的关闭;新的有问题,把旧的切换回来。微服务天然是考虑支持同一个服务的多个版本并存的,而容器则是实现“不可变基础设施”(Immutableinfrastructure)的最佳套路,它们两个一拍即合。对于快速敏捷支持不同的业务线、产品线,也许复制代码克隆服务是一个更高效的做法。
  一位曾任职私募股权交易机构的架构师Michael Nygard,在他的“新常态”系列技术文章中,举了一个例子:他的公司有四十多个不同的交易席位(tradingdesk),分别在不同的市场采用不同的策略进行交易。每个交易席位都有自己的技术团队负责交易应用开发。如果他们像很多大企业一样采用一套单一的、集中式的交易系统,则任何交易组对系统的变更均会对其他组产生潜在的损害。因为变更影响他人、bug产生系统性风险、测试需要更繁复覆盖更充分、变更发布周期需要更长、升级需更复杂慎重、交易系统受影响面更,他把这些潜在能导致失败的影响称之为“失败域”(failure domain)。Michael的雇主选择让每个交易组独立维护自己的小型、单一、功能聚焦的交易应用,开发工程师和交易员坐在一起工作、小团队作战、快速迭代,以此来最大程度缩小各交易组被动关联产生的“失败域”。这个场景,对于从事证券交易系统开发的工程师,是非常熟悉的。在这里我们看到两个以下极端的取舍。
  1. 交易系统从架构和基本功能的角度上看都是大同小异的,以一套理想的、大而全的、集中式的系统服务各条业务线、各个交易市场、各种交易产品,其好处也许是集中运维统一监控,服务归一、数据完备,消灭了信息孤岛,公司能获得跨市场、跨产品、跨业务线的最完整的经营数据,轻易实现合规监管、统一风控。但是这种中心化系统,本身的任何变更都是牵一发动全身,任何缺陷都导致公司级风险,是一个典型的“脆弱系统”,也不利于任何业务线的单独敏捷运作。
  2. 类似上述私募股权公司的做法,完全去中心化,多套交易系统冗余建设,在一定规模的证券公司里,几十套交易系统是常见的,确实产生很多问题。例如一个合规要求或交易市场的新业务,必须在几十套系统里变更升级,硬件资源得不到充分的共享利用,不同交易系统往往是异构技术形成一个个竖井(Silo),信息孤岛的形成给统一风控统一经营造成巨大困难等。然而,这个去中心化的做法,却是符合“反脆弱”精神,它把失败域变小。每条业务线有自己的交易员、业务专家、工程师以及系统,响应市场竞争的效率最高。
  微服务架构很可能对上述情形的解决是有帮助的。首先,在实际操作中,去中心化基本上是共识。避免全局、系统性风险比什么都重要,所以功能相同相似的服务在不同业务线、不同约束条件、不同目标用户环境下冗余部署是必须的;其次,越复杂、越大块头、越黑箱型的代码模块,越难弄明白,越怕被触碰,也就隐含越高风险,微服务化使之增加透明度;其三,一些服务例如交易引擎,架构大同小异但是细节很不一样,与其反复抽象、重构、支持一切交易市场、交易产品、资产类型,还不如克隆一下,把相互依赖以及对某些共同设施的依赖均降到最低,各自迭代发展,让每条业务线获得最不相互掣肘的、最高效率的技术支持。
  在微服务架构的思维下,服务们通过克隆、变异、分叉而诞生,然后迭代发展、存活、消亡。这种架构,可以称之为进化式架构(evolutionary architecture)。进化式架构有一个有趣的作用,就是代码“去库存”。这里说的“代码库存”,不是指代码的技术载体,如Git、SVN等代码库,而是一家企业多年开发积累下来的代码。世界的变化总是快于软件的进化的,而积累了十年的几百万甚至几千万行代码,总体来说是很难对变更友好的。这个时候,代码库就变成了库存、技术债、阻碍业务创新的惯性。金融行业的应用系统,有很多这样的东西,庞大而沉重,日益成为厌恶害怕变更的“脆弱系统”,面对这样的技术库存,我们很无奈。
  微服务架构风格之下,也许更符合草根习惯的开发平台终于有机会出现:高度碎片化,大家都在写小组件小程序,除个别关键服务外一般难以对整个系统产生坍塌风险,任何小程序可以被丢弃被重写等。当然,前提是我们指望容器编排技术结合监控技术和cloud-native的各种架构模式把服务底层的运行平台搞定,所以一个强的平台团队依然是需要的。当我们有非常好的工具如容器技术,以支持我们在短时间内快速开发出代码、极大程度释放生产力的时候,我们才敢于丢弃过时代码,让服务派生与进化、用完即扔。
  微服务架构带来更多的碎片化,对架构设计、开发运维挑战更大,对开发者技能要求更高。例如需要掌握一系列Cloud-native patterns(原生云架构设计模式诸如throttling、circuit-breaker、bulkhead等等)。容器技术作为一种工具链和微服务载体,则在此时发生了很大的促进作用,甚至是微服务化实际落地的可行性的一个重大保障。
  采用微服务类架构,也需要调整一些“传统”的观念,例如关系型数据的高度归一性(Normalization)、代码的可重用性(Re-usability)和系统的精益化(Lean),可能不再是无可辩驳的“美德”。事实上,随着大数据技术发展应运而生的NoSQL运动,一定程度可以说是对高度强调归一性的传统关系型数据库理论的“反动”。在微服务的思潮下,我们的服务首先是不共享任何东西(share nothing),每个服务可能都有自己的持久化存储(backing store),形成所谓的混合存储(polyglotpersistence);其次,基于领域建模的开发(Domain Driven Development -DDD),对于实现微服务更加重要,以完整业务逻辑为中心,并解耦了对开发语言、数据存储技术等假设。
  微服务、分布式架构是比单体架构更复杂的,技术团队需要掌握此前不需要的知识。例如上述的Cloud-native patterns、Heroku 12要素、Reactive技术风格与技术工具等。一个企业如果没有具备这些知识与能力的技术团队,都不应该去考虑做微服务。幸运的是,容器工具链的发展,也许正在成为这么一系列工具,会促进微服务在传统企业IT的落地。
  正如写UNIX小工具的人需要直接了解操作系统,写微服务的人需要直接了解一点容器与容器编排、原生云架构模式。容器技术让开发者真正第一次介入云计算,此前基于虚拟机的云计算只对运维有意义,对开发者透明,但是,试问此前有多少开发工程师在自己的应用系统里调用过虚拟机的API,基于业务需求控制云计算资源?又有多少人在意自己的代码跑在物理机还是虚拟机里?
  容器技术挑战传统IT组织架构
  容器只是又一种开发工具而已。然而,鸟枪换炮不仅需要相应的新操作技能与观念,还需要与之相适应的组织结构,工具使用者之间的协作方式、运作流程、管理模式都需要作相应变更――从“二炮”变成“火箭军”。
  从组织结构方面来讲,容器技术给IT部门带来的一个最大的好处就是促进开发、运维一体化的部门文化。过去,开发和运维是割裂的,两者使用的工具也是不同的。尤其是开发上的一个变更,可能会带来整个金融系统的“黑天鹅事件”。而容器化IT系统之后,开发和运维一体化,二者采用同一套工具,通过容器技术能够更快地部署IT系统,更方便地维护IT系统,系统变更也更加友好。可以说,容易技术的最大得益者是运维部门。
  自从微服务开始流行的这两年来,网上越来越多架构师在讨论“康威定律”,这不是偶然现象,是大家不约而同意识到,服务的切分、模块的解偶、技术系统的最终形态,很大程度取决于开发者所在组织的交流沟通形态。
  过去,单体架构应用开发的团队,很可能是这么一个silo团队:一到多个界面及交互设计师、几个前端开发(Web 1.0时代,是HTML及模板编写者; Client-server时代,是MFC、JFC/Swing甚至X/Motif开发者)、几个服务器端开发(EJB/JSP的、更古老一点是CORBA/IIOP或者DCOM的)、一两个数据库的DBA。这种团队虽然有多个角色对应多个技术层,但严格来说不算“跨职能”,因为他们基本上既不运营也不运维自己的应用,业务人员和运维人员并不在团队内。为什么称之为silo团队呢?因为多个这样的团队之间,信息不透明、不流动。
  微服务架构下的组织结构,具有如下特点:
  1 有Gartner所谓的“外架构”与“内架构”之分,内架构主要围绕微服务的标准化设计,例如每个服务必须是实现单一责任(singleresponsibility)、服务边界(scope)清晰、接口约定(contract)明确稳定。外架构主要是平台,聚焦于系统性解决基于内架构的微服务实例的注册发现、编排、资源伸缩、生命周期管理、监控、高可用等等,解决服务碎片化带来的各种共性问题。
  2 平台团队负责平台的构建、优化、维护,持续整合新技术、持续向服务开发团队提供工具与公共设施便利,例如利用Kubernetes、Swarm或者Mesos之类的技术构建容器云,支持多租户,基于行业(例如金融业)特有环境与要求定制网络与安全解决方案,用符合自身企业环境的技术解决docker的网络问题,诸如此类。微服务团队则由业务专家和工程师组成,联合维护和保障一个服务的功能、有用性(没人用的服务就没有生命力)、运维,其中工程师很可能是全栈的、开发自运维的;虽然系统层面的高可用由平台团队支持,可是服务运行中的业务逻辑故障显然只有负责开发的人自己直接搞定。
  3 平台团队主动向企业各业务线的团队布道、宣传自己的工具与平台,争取更多的租户。而微服务的团队,同样需要向其他部门、团队布道、宣讲自己的服务,找到更多的应用场景和使用方。最后,各业务线的应用开发项目,则是在产品开发过程中组合、集成各种服务(同时也可能提供自己的微服务)以服务终极客户。所以,这是一个服务型的、“人人为我、我为人人”的组织。衡量这些团队的表现也好办,看看平台团队争取了多少租户、微服务团队支持了多少应用。
  结合容器技术,基于微服务架构的组织,都可以成为DevOps型组织,因为容器工具链也许是迄今为止真正让开发与运维共同使用的同一套工具,把开发、测试与运维工程师通过CI/CD串在了一条协作生产线上; 此前虽然有Puppet、Chef、其他所谓实现“infrastructureas code”的工具,实际上不同角色的工程师依然是没有标准化的工具分享的。别小看了共用一套工具的厉害之处,工具所附带的整套技术语言、概念、词汇表,往往成为工程师们交流沟通、描述问题的标准语言,否则他们往往是“鸡同鸭讲”,同一个词汇说的完全不是一回事。
  掌握新技术新工具,需要传统企业IT的组织思维与时俱进,作相应调整、重构。否则,生产组织基因不对,无法有效使用科技生产工具。
  在这个开发技术快速更迭的时代,只能通过构建有科技基因的、对技术友好的组织,让团队和新技术共同成长,保持精益的技术文化和理念,才能稍稍具备一点独角兽的特质:Swift(迅捷)、Nimble(灵巧)。
  &&&&推荐阅读:点击标题即可阅读
ITValue2016年度CIO大选已开始啦~~
今年都有哪些大胆创新的CIO/CTO,利用互联网工具帮助企业顺利转型?
关注ITValue,发送“转型先锋”,即可下载报名申请表~
更多详情及报名请点【阅读原文】~
  ITValue
中国最大的技术高管实名社区,提供互联网时代最全面权威、也最前沿有趣的B2B市场信息解读。
点击【阅读原文】,进入ITValue社区,与CIO们一起脑力激荡!
  我们只提供有价值的干货!
  长按二维码
  关注ITValue
欢迎举报抄袭、转载、暴力色情及含有欺诈和虚假信息的不良文章。
请先登录再操作
请先登录再操作
微信扫一扫分享至朋友圈
搜狐公众平台官方账号
生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者
搜狐网教育频道官方账号
全球最大华文占星网站-专业研究星座命理及测算服务机构
主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓
主演:尚格?云顿/乔?弗拉尼甘/Bianca Bree
主演:艾斯?库珀/ 查宁?塔图姆/ 乔纳?希尔
baby14岁写真曝光
李冰冰向成龙撒娇争宠
李湘遭闺蜜曝光旧爱
美女模特教老板走秀
曝搬砖男神奇葩择偶观
柳岩被迫成赚钱工具
大屁小P虐心恋
匆匆那年大结局
乔杉遭粉丝骚扰
男闺蜜的尴尬初夜
客服热线:86-10-
客服邮箱:

我要回帖

更多关于 伊多 破碎世界的主宰 的文章

 

随机推荐