什么是微服务架构?
“微服务”源于 Martin Fowler 的博文 Microservices。
Martin 说:微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆成多
个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于 HTTP 的 RESTful
API 进行通信协作。被拆分成的每一个小型服务都围绕着系统中的某一项或者某些耦合度较
高的业务功能进行构建,并且每个服务都维护着自身的数据存储、业务开发、自动化测试案
例以及独立部署机制。由于有了轻量级的通信协作基础,所以这些微服务可以使用不同的语
言来编写。
核心功能
⚫ configuration management 配置中心
⚫ service discovery 服务发现
⚫ circuit breakers 断路器
⚫ intelligent routing 智能路由
⚫ micro-proxy 微代理
⚫ control bus 控制总线
⚫ one-time tokens 一次性令牌
⚫ global locks 全局锁
⚫ leadership election 选举算法
⚫ distributed sessions 分布式会话
⚫ cluster state 集群状态
微服务设计引发新的问题
微服务的设计,服务分散在多个服务器上,服务之间互相调用,要调用的服务由于跨网络跨
服务器调用,响应速度明显比传统项目单机调用慢很多,甚至由于网络涌动的不稳定的现象
发生导致调用超时;还有类似级联失败、雪崩效应(依赖的基础服务宕机,关联的服务导致
失败甚至宕机,就像滚雪球一样层层失败。)
如何解决这类新的问题呢?传统的机制就是超时机制。
熔断机制
家里电表都有个断路器(俗称电闸),当使用的电器很多,用电巨大(例如功率过大、短路
等),当电流过载时,电路就会升温,甚至烧断电路,引起火灾。有了这个断路器,我们及
时拉闸,就不会造成严重后果了。
断路器可以实现快速失败,如果它在一段时间内检测到许多失败,如超时,就会强迫其以后
的多个调用快速失败,不再请求所依赖的服务,从而防止应用程序不断地尝试执行可能会失
败的操作,这样应用程序可以继续执行而不用等待修正错误,或者浪费 CPU 时间去等待长
时间的超时。断路器也可以使应用程序能够诊断错误是否已经修正,如果已经修正,应用程
序会再次尝试调用操作。
断路器模式像是那些容易导致错误的操作的一种代理。这种代理能够记录最近调用发生错误
的次数,然后决定使用允许操作继续,或者立即返回错误。