初识微服务

http://www.jianshu.com/p/9805545db4ad#
再谈Docker-微服务的场景化应用
144 做者 yongfeng 关注
2015.03.18 00:34* 字数 3367 阅读 7294评论 7喜欢 19
个人名字是滨田宏,我发明了一些自认为很神奇的东西,但愿大家能喜欢.这是一个微型机器人,它看起来微不足道,但当它和其余小伙伴们团结起来时,就变得有趣多了。它们由这个神经发射器控制,我想让它们作什么,它们就照作。这项创造的应用是无止境的。建筑物,曾经须要大队人马,人工建造数月或数年,如今只要一我的就能够完成。这仅仅是九牛一毛,可不能够用在交通运输上,微型机器人能够轻松移动任何物体至任何地方,只有想不到,没有作不到。你的思惟局限是它惟一的限制。
看过《超能陆战队》的朋友可能仍然对于电影中的男主角介绍和演示本身发明的微型机器人的场景记忆犹新。“它”看起来只是一跟带有磁性的小小的金属部件。可是它是一个独立的个体,本身可以独立的大脑,同时,和同伴之间有相互的接口你行连接。可以通信。可以随意的组合成任意功能的物体。经过类比,咱们很容易由硬件领域想到软件领域。譬如软件系统的架构,一直都是伴随着几种主流的模式,集中式,分布式以及最近才开始流行起来的”微服务“。滨田宏发明的微型机器人,其实和微服务的思想很相似。一个微小的服务实体,有对外的接口与外部通信。彼此之间可以快速组合成新的服务。其架构松散耦合。接下来的内容,会和你们一块儿分享微服务的特色以及所拥有的一些神奇的魔法。web

什么是微服务?数据库

微服务,至少我目前也没有找到一个很精确的标准化解释。因此咱们首先从字面上来理解。既然是服务,那必定是一个可以实现某个功能的实体。光有功能,是不能成为一下服务的,由于还须要有途径和外部交互。让外部的实体可以获取服务。譬如web服务,经过http协议和浏览器或者app进行交互。因此微服务,通常来讲,是有一套和外部通信的标准接口的,譬如REST API。 名字带了一个”微“字,说明提供的功能很小,或者很弱。可是一个很是小,或者很是弱的功能,是没法构成一个系统的,所以,他们之间,必须是可以相互组合的。在软件领域,通常把它理解成一种新的架构设计模式。能够和咱们一般所熟知的软件架构作类比,譬如集中式架构,分布式架构。既然是一个很抽象的概念,那我这里也用一幅很抽象的图来表示。设计模式

微服务的特色浏览器

彼此独立:既然是一个独立的服务,那必然是一个完整的自治系统,不依赖外部的东西就可以提供服务。有本身一整套的完整的运行机制,有和外部通信的标准化接口。就像《超能特工队》里面滨田宏发明的微型机器人,它就是一个独立的小机器人。能够和其余的机器人经过磁性相互吸引,能够探测到彼此的存在。离开了其余个体,同样可以运转,只是功能比较单一。markdown

原子化:做为一个微服务,必定是一个原子化的服务。也就是说服务不能再划分红更小的服务了。世界上的一些事物都是有原子构成的。它为何能构成全部的物体,正是因为它足够的基础。若是一个服务还能划分红几个小的服务,那咱们就不能称之为一个微服务,它其实能够经过几个微服务组合成的一个系统。架构

组合和重构:若是是最原子的服务,那必定是没有任何用处的。微服务之因此神奇,在于它能快速的组合和重构。彼此组合成一个系统。系统里面全部的实体在概念上是对等的。所以它的结构相对简单化。是一种松散耦合的结构,这样的系统,每每具备更强的可扩展性和鲁棒性。app

微服务之于实践负载均衡

前面谈了这么多,可能大部分人仍是没有明白微服务是个什么东西。咱们试着能够经过一些的东西来描述。例如,咱们使用ghost搭建了一套我的博客的系统。若是使用传统的架构,咱们可能以模块的视角来划分,譬如能够分为”用户管理”,”文章编辑“,”页面显示“,”图片存储“,”文章分享“ 等几个模块,抽象成的架构图以下所示:分布式

换一个视角,咱们能够从服务的角度来思考。将来简单起见,咱们先考虑单租户的场景。:微服务

Markdown Service
Web Service
UGC Service
MySQL Service
基于微服务的架构,多是下面这样一个图:

咱们再想一想,若是要提供多租户的服务呢?咱们把数据库变大,存储多个用户的信息?这的确是一种思路,可是其思想有点和咱们的微服务的思想背道而驰了。咱们为何不为每一个用户配备这样一套服务呢,只要每一个服务足够的微小,实际上是没有太多的浪费的。上面图里构成的一套系统咱们能够做为单独服务一个用户的自治系统。当用户增多时,就呈现出了一套去中心化的云服务的雏形。

Docker在微服务系统中所扮演的角色

在Docker出现以前,虽然咱们谈论微服务架构,可是实际上是很难实现的。微服务要运行,首先须要一套执行的环境。这套环境不能对外部有依赖性。同时,执行环境的粒度又必须足够的小,这样才能称之为”微“,不然必然是对资源的巨大浪费。一个微服务能够跑在一台虚拟机上面,可是虚拟机粒度太大,即便最小的虚拟机,也至少也有1个核。正如咱们上面的ghost博客的例子,服务一个用户的服务,显然用不了一个核。同时,虚拟机有没有一套方便的管理机制,可以快速的让这些服务之间可以组合和重构。Docker出现之后,咱们看到了微服务的一个很是完美的运行环境。

独立性:一个容器就是一个完整的执行环境,不依赖外部任何的东西。
细粒度: 一台物理机器能够同时运行成百上千个容器。其计算粒度足够的小。
快速建立和销毁: 容器能够在秒级进行建立和销毁,很是适合服务的快速构建和重组。
完善的管理工具: 数量众多的容器编排管理工具,可以快速的实现 服务的组合和调度。
除了Docker生态系统以内的一些工具,包括Serf之类的服务自发现技术的发展,可让微服务可以自动化的感知其关联的其余服务,实现系统的自我构建。我记得2014年早些时候,centurylinklabs里面有一篇文章,讲述了如何经过FIG,Serf,HAProxy构建一个自动负载均衡的Docker应用。其实,这篇文章所蕴含的思想,就是一种微服务架构的概念。

AUTO-LOADBALANCING DOCKER WITH FIG, HAPROXY AND SERF WITH DOCKER

去中心化的云服务

最近一段时间,”场景化“是一个频繁出现的词汇。在这里,我也套用一下这个词,”什么是微服务的场景化应用?”。去中心化的云服务,是一个很是典型的应用场景。什么是去中心化的云服务呢?这里作一个类比,譬如家里的供暖,能够采用集中化的供暖方式。由电厂或者钢铁厂统一提供供暖服务。固然,也有的家庭本身会建设一套中央空调系统进行供暖。云服务,也会有相似的趋势。目前云计算的发展比较低级。主要是以托管为主,所以大部分仍是中心化的云服务。随着云计算的应用愈来愈垂直化,必然也会出现愈来愈多的去中心化的应用场景。去年iCloud爆出了被黑客攻击。黑客攻破一家服务商,就直接窃取了全部用户的资料。这就是一种中心化的云服务带来的一些不利的因素。既然咱们能够由统一的服务商来提供云服务。咱们可否实现一套去中心化的服务呢?就拿我的云存储来举例。每一个人都有一套我的的云的存储系统。这套系统运行在任意的提供“水和电”的基础云服务商的系统之上。而且能够任意在不一样的服务商之间迁移和部署。不一样的用户,可能位于不一样的服务商之上。彻底由本身控制的一套系统。每一套系统,都是一系列微小的服务组合而成。虽然底层也依赖基础云服务商,可是他们的做用更像水和电同样。

国内内以微服务为基础的去中心化的云服务也已经有一些实践的例子,譬如terminal.com, dianCloud.com等,逐渐呈现出一部分这样的思想。借助于这样的服务,用户可以快速的构建一套属于本身的ghost博客系统,或者采用开源软件ownCloud搭建的我的云存储系统。选购他们,就像在商店里面选购商品同样,拿回家,插上电就能够用了。这种模式,也给开源软件找到了一个很是好的商业化的机制。我相信这种机制将来会愈来愈流行。

一个游戏架构的应用场景

游戏是一个比较特殊的行业。在国内,应该是比较早拥抱云计算的一个行业,可是也是架构相对保守的行业。大部分的游戏架构很是简单。分布式的架构使用并非太广泛,大部分是单区单服,一台强大的机器,运行若干个游戏服(游戏世界)。这并非游戏架构落后,而是游戏自己的特色决定的。游戏通常以游戏服来划分,每一个游戏服是一个独立的游戏世界。里面有必定数量的玩家。不能太多,也不能太少(总用户量必定的状况下,单服人数和总服的数量决定了游戏收入的最大化),两个游戏世界之间,数据不须要互通。所以一般都是一个进程搞定一个游戏服。其实这种模式下,微服务也是一个很是好的应用场景。咱们知道,游戏其实有很是复杂的逻辑,譬若有控制人物移动的逻辑,控制道具,控制战斗,同时,游戏中还有成百上千的电脑控制的角色,每一个角色都须要有本身智能。为何咱们不将这些细小的功能经过微服务来实现呢?譬如游戏中的一个单独的怪兽,能够由本身微服务构成的小的自治系统来控制。它能够彻底独立,接收外部信息,作出反应。将来游戏公司能够复用这些单独的小系统。换上不一样的皮肤,就能够用于不一样的游戏。同时游戏其余的逻辑,均可以经过一些独立的微服务来构成。这些微服务能够借助Docker之类的系统,运行在容器中。可以快速的自动化的构建出一个完整的游戏世界。

后记

最近,基于Docker的创业公司不停的涌现,你们一晚上之间彷佛都在谈论Docker。可是我想说的是,Docker只是一项新的技术,消费者只会为服务买单,不会为技术买单。况且,对于圈子以外的大部分的消费者,云已是其能理解的技术极限了,再来一个Docker,基本是没法理解的。所以若是想在Docker领域创业。中止谈论Docker,思考Docker技术之上的丰富的场景化的应用,才是关键。一样,微服务也只是一种架构思想。基于这种架构所带来的神奇的应用场景才是将来。

相关文章
相关标签/搜索