一种架构风格,专注于把一个单独的应用程序开发成一套小服务(裂土分封),每个小服务运行在自己的进程中(区域自治),通过轻量级的http API机制进行通行(外交使臣),简而言之,把大型单体应用基于业务边界进行服务微化拆分,各个服务独立部署。
集群,一堆物理机搁一块就可以叫集群,但不限定是否实现同一业务。是个物理形态。 分布式,指将不同业务分布在不同机器上。这个是个工作方式。 例如,京东就是一个分布式系统,因为它将众多业务运行在了不同机器上,所有业务组合成一个大型业务集群;而其中的某一个业务如用户系统,618访问大的时候,一台服务器铁定扛不住,此时可以叫几个兄弟服务器帮他分担访问压力,也就是单独做集群化。 分布式中的每一个节点都可以做集群,而集群不一定是分布式的。 节点,就是集群中的一个服务器。
因分布式系统中各服务可能处在不同主机,但他们之前不可避免的要互相调用,这就是远程调用。Spring cloud中使用http+json方式(跨平台)。
分布式系统中,A调用B服务,且B服务在多台机器上都存在,A调用任意一个服务器均可完成功能(皇上翻后宫牌子)。为了使每个服务器都有适当的访问压力(雨露均沾),可以轮询,最小链接,散列。
A服务调用B服务,A服务并不知道B服务当前在哪几台服务器有,哪些是正常的,哪些服务已经下线,所以引入注册中心(哪些小主此时可侍寝,提前去当班公公那登记哈,皇上翻牌子时就在那个登记册上选),服务发现时可避免调用不可用的服务。
每一个服务最终都由大量的配置,并且可能部署在多台机器上,需要经常变更配置,设置配置中心统一管理各个服务配置信息
微服务架构中,微服务之间通过网络进行通信,可能形成一个通信链,当链条上的某个调用不成功时,可能造成连锁反应,为防止这种情况,可以用容错机制来保护服务。 1、服务熔断 设置服务超时阈值,开启断路保护,后面请求就不再调用这个服务,本地直接返回默认数据 2、服务降级 运维高峰期,系统资源紧张,停用或降级运行非核心业务,如不处理、简单处理(抛个异常啦,返回null啦,调用mock数据啦,调用法拉利back处理逻辑啦之类的)。
重要组件API gateway,抽象了微服务中都需要的公共功能,同时提供了负载均衡,服务自动熔断,灰度发布,统一认证,限流流控,日志统计等丰富的功能(南天门的哮天犬,哈哈)。