什么是微服务

什么是微服务

简而言之 : 微服务架构风格这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的.其中每个小型服务都运行在自己的进行中,并经常采用HTTP资源API

这样轻量的机制来相互通信.这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署.这些微服务可以使用不同的语言来编写,并且可以使用不同的数据

存储技术.对这些微服务我们仅做最低限度的集中管理.

微服务具备的特性

1. 每个微服务可独立运行在自己的进程里;

2. 一系列独立运行的微服务共同构建起了整个系统;

3. 每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如 : 订单管理,用户管理等.

4. 微服务之间通过一些轻量的通信机制进行通信,例如通过REST API或者RPC的方式进行调用.

5. 全自动部署机制.

微服务优点

1. 易于开发和维护;

一个微服务只关注一个特定的业务功能,所以它的业务清晰,代码量较少.开发和维护单个微服务相对是比较简单的.而整个应用是由着若干个微服务构建而成的.所以

整个应用也会维持在可控状态.

2. 启动较快;

单个微服务代码量较少,所以启动会比较快.

3. 局部修改容易部署;

单体应用只要修改,就得重新部署整个应用,微服务解决了这样的问题.一般来说,对某个微服务进行修改,只需要 重新部署这个服务即可.

4. 技术栈不受限;

在微服务中,我们可以结合项目业务及团队的特点,合理的选择技术栈.例如某些服务可使用 关系型数据库MySQL;某些微服务有图形计算的需求,我们可以使用Neo4j;甚至可以

根据需要,部分微服务使用java开发,部分微服务使用NodeJS进行开发.

5. DevOps

微服务带来的挑战

1. 运维要求较高;

更多的服务意味着更多的运维投入.在单体架构中,只需要保证一个应用的正常运行;而在微服务中,需要保证几十甚至几百个服务的正常运行与协作,这给项目的运维带来了很大挑战.

2. 分布式的复杂性;

使用微服务构建的是分布式系统.对于一个分布式系统,系统容错,网络延迟,分布式事务等都给我们带来了很大的挑战.

3. 接口调整成本高;

微服务之间通过接口进行通信.如果修改某一个微服务的API,可能所有使用了该接口的微服务都需要做调整.

4. 重复劳动.

很多服务可能会使用到相同的功能,而这个功能并没有达到分解为一个微服务的程度,这个时候,可能各个服务都会开发这一功能,从而导致代码重复.

微服务设计原则

1. 单一职责原则;

2. 服务自治原则;

3. 轻量级通信原则;

4. 接口明确原则.

雪崩效验:

当一台服务器请求发送到另一台服务器,另一台服务器由于宕机无法响应,这样请求的服务器会一直发送请求,会堆积大量的线程和进程,当堆积到一定程度以后系统资源被

消耗殆尽,这样这台服务器也就宕机了,如果其他服务器访问这台服务器也会以此类推的出现无法响应,导致请求服务器等待响应,无法获取结果,这样一台服务器接着一台服务器

宕机,形成雪崩效验.

微服务容错处理方案 :

1. 为请求设置超时

通过网络请求其他服务时,都必须设置超时。正常情况下,一个远程调用一般在几十毫秒内就能得到响应了。如果依赖的服务不可用,或者网络有问题,响应时间将会变得很长(几十秒)。

通常情况下,一次远程调用对应着一个线程/进程。如果响应太慢,这个线程/进程就得不到释放。而线程/进程又对应着系统资源,如果得不到释放的线程/进程越积越多,服务资源就会被耗尽,从而导致服务不可用。

因此,必须为每个请求设置超时,让资源尽快地得到释放。


2. 使用断路器

试想一下,如果家庭里没有断路器,电流过载了(例如功率过大、短路等),电路不断开,电路就会升温,甚至是烧断电路、起火。有了断路器之后,当电流过载时,会自动切断电路(跳闸),从而保护了整条电路与家庭的安全。当电流过载的问题被解决后,只要将关闭断路器,电路就又可以工作了。

同样的道理,当依赖的服务有大量超时时,再让新的请求去访问已经没有太大意义,只会无谓的消耗现有资源。譬如我们设置了超时时间为1秒,如果短时间内有大量的请求(譬如50个)在1秒内都得不到响应,就往往意味着异常。此时就没有必要让更多的请求去访问这个依赖了,我们应该使用断路器避免资源浪费。

断路器可以实现快速失败,如果它在一段时间内侦测到许多类似的错误(譬如超时),就会强迫其以后的多个调用快速失败,不再请求所依赖的服务,从而防止应用程序不断地尝试执行可能会失败的操作,这样应用程序可以继续执行而不用等待修正错误,或者浪费CPU时间去等待长时间的超时。断路器也可以使应用程序能够诊断错误是否已经修正,如果已经修正,应用程序会再次尝试调用操作。

断路器模式就像是那些容易导致错误的操作的一种代理。这种代理能够记录最近调用发生错误的次数,然后决定使用允许操作继续,或者立即返回错误。

Spirng Clound为开发人员提供了快速构建分布式系统中的一些通用模式,是基于SpringBoot的一整套实现微服务的框架.他提供了微服务开发所需的配置管理 ,服务发现,短路器,

智能路由,微代理,控制总线,全局锁,决策竞选,分布式会话和集群状态管理等组件.

子项目:

Spring Cloud Config就是我们通常意义上的配置中心.Spring Cloud Config把应用原本放在本地文件的配置抽取出来放在中心服务器,本质是配置信息从本地迁移到云端.

从而能够提供更好的管理,发布能力.

Spring Cloud Config分服务端和客户端,服务端负责将git(svn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置.但客户端并不能主动感知到配置

的变化,从而主动去获取新的配置,这需要每个客户端通过POST方法触发各自的/refresh.

Spring Cloud Eurka提供在分布式环境下的服务发现,服务注册的功能.

Spring Clound Netflix,该项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合.

通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统.它主要提供的模块包括 : 服务发现 (Eureka), 断路器(Hystrix), 智能路由(Zuul)

,客户端负载均衡(Ribbon)等.

Netflix Eureka : 云端负载均衡,一个基于REST的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移.

Netflix Hystrix : 容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力.

Netflix Zuul : 边缘服务工具,是提供动态路由,监控,弹性,安全等边缘服务.

Netflix Archaius : 配置管理API,包含一系列配置管理API,提供动态类型化属性,线程安全配置操作,轮询框架,回调机制等功能.

Spring  cloud Hystrix熔断器

断路器(Cricuit Breaker)是一种能够在远程服务不可用时自动熔断(打卡开关),并在远程服务恢复时自动恢复(闭合开关)的设施.

断路器(Cricuit Breaker)是一种能够在远程服务不可用时自动熔断(打开开关),并在远程服务恢复时自动恢复(闭合开关)的设施,Spring Cloud通过Netflix组件

的Hystrix组件提供断路器,资源隔离与自我修复功能.

Spring Cloud Zuul 服务网关

Spring Cloud Bus : 事件,消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署;

Spring Cloud for Cloud Foundry : 通过Oauth2协议帮到服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS平台.

Spring Cloud Sleuth : 日志收集工具包,冯总了Dapper,Zipkin和HTrace操作.

Spring Cloud Data Flow : 大数据操作工具,通过命令行方式操作数据流.

Spring Cloud Security : 安全工具包,为你的应用程序添加安全控制,主要是指OAuth2.

Spring Cloud Consul : 封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成.

Spring Cloud Zookeeper : 操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现.

Spring Cloud Stream : 数据流操作开发包,封装了与Redis,Rabbit,Kafka等发送接收消息.

Spring Cloud CLI : 基于SpringBoot CLI,可以让你命令行方式快速建立云组件.

Spring Cloud特点 :

1 : 约定优于配置;

2 : 开箱既用,快速启动;

3 : 适用于各种环境

4 : 轻量级组件;

5 : 组件支持丰富,功能齐全.

6 : 选型中立.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容

  • Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系...
    Mr_Elliot阅读 1,734评论 1 15
  • 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥...
    java菜阅读 2,949评论 0 6
  • 温度降得太迅速,上班路上的那只流浪猫,已经藏进了老旧居民楼的地下室。我经过的时候,总能看见它严肃地蹲着,高高扬起的...
    咩咩杂阅读 289评论 1 3
  • 新年又到了,风和日丽的阳光明媚的照射在整个江南江北,暖烘烘的。近两天,五湖四海之内皆兄弟,也没有一丝春的雨意,...
    米澜盛若阅读 233评论 6 1