面试不会微服务没关系,跟着我 4 天学会微服务!
如今微服务倍受关注:文章、博客、社交媒体和会议演讲都在讨论微服务。微服务正在迅速朝着加德纳技术成熟度曲线(Gartner Hype cycle)的高峰前进。与此同时,也有持怀疑态度的软件社区人员认为微服务没什么新鲜可言。反对者声称它的思想只是面向服务架构(SOA)的重塑。然而,无论是炒作还是怀疑,不可否认,微服务架构模式有非常明显的优势 —— 特别是在实施敏捷开发和复杂的企业应用交付方面。
而Martin Fowler大师《重构》一书中有说过一句话,大概意思就是,“每次对原有系统进行修改调整的时候是一个非常好的重构契机。
用两张图给大家看一下
单体的时候系统架构是这样的

相信不用我多说太多,每一个做过大型网站项目的老铁,都应该知道这种系统架构的蛋疼
所以在系统演化下,我们来看这个

同样的系统实现,但是不同的组织架构,却让系统的可用性更加高,也方便后期的开发工作
所以微服务在我看来,这是一个契机,无论怎么样,最终随着主体业务的复杂化,终会以各种不同的形式靠拢其中
那无论是出于面试还是知识点的学习,我想,对于微服务,学习一下,对你后期一定会有一些帮助
day1
随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及微服务架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

微服务基础知识

Eureka

Ribbon

day2
这一次主要介绍Feign和Hystrix两个知识点
Feign
Feign是Netflix开发的声明式,模板化的HTTP客户端,其灵感来自RetrofitJAXRS-2.0以及WebSocket.Feign可帮助我们更加便捷,优雅的调用HTTP API。在SpringCloud中,使用Feign非常简单—―创建一个接口,并在接口上添加一些注解,代码就完成了。
Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。SpringCloud对Feign进行了增强,使Feign支持了SpringMVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
Hystrix
Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要通过以下几点实现延迟和容错。
包裹请求∶使用HystrixCommand包裹对依赖的调用逻辑,每个命令在独立线程中执行。这使用了设计模式中的“命令模式"。
跳闸机制︰当某服务的错误率超过一定的阈值时,Hystrix可以自动或手动跳闸,停止请求该服务一段时间。
资源隔离:Hystrix为每个依赖都维护了一个小型的线程池(或者信号量)。如果该线程池已满,发往该依赖的请求就被立即拒绝,而不是排队等待,从而加速失败判定。
监控:Hystrix可以近乎实时地监控运行指标和配置的变化,例如成功、失败、超时、以及被拒绝的请求等。
回退机制︰当请求失败、超时、被拒绝,或当断路器打开时,执行回退逻辑。回退逻辑由开发人员自行提供,例如返回一个缺省值。
自我修复∶断路器打开一段时间后,会自动进入“半开"状态。

Feign

Hystrix

day3
在学习完前面的知识后,微服务架构已经初具雏形。但还有一些问题∶不同的微服务一般会有不同的网络地址,客户端在访问这些微服务时必须记住几十甚至几百个地址,这对于客户端方来说太复杂也难以维护。如下图:

如果让客户端直接与各个微服务通讯,可能会有很多问题∶
·客户端会请求多个不同的服务,需要维护不同的请求地址,增加开发难度
·在某些场景下存在跨域请求的问题
·加大身份认证的难度,每个微服务需要独立认证
因此,我们需要一个微服务网关,介于客户端与服务器之间的中间层,所有的外部请求都会先经过微服务网关。客户端只需要与网关交互,只知道一个网关地址即可

网关概述

zuul

Gateway

day4

springcloud Stream

springcloud config

Apollo

评论