SOA 全称为 Service Oriented Architecture,即面向服务架构。SOA 是一种架构理念。它的提出主要是解决服务之间的耦合问题。
SOA 对服务之间的解耦是一种比较粗粒度的划分,比如我们的电商网站按服务可以拆分为:用户模块,订单模块,商品模块等。SOA 其本质上是服务的集合,然后服务间一般会通过 ESB 总线来进行通信。比如之前比较常用的 webservice 就是一种 SOA 架构的实现。
微服务架构
微服务架构在 SOA 架构的基础上做了进一步的细化,微服务架构和 SOA 架构并没有本质上的区别,都是为了服务的解耦,只不过微服务架构更加关注服务的粒度,比如上面提到的用户模块我们还可以进一步拆分成更细粒度的服务。
随着微服务架构的普及,原本一个单体应用可能会被拆分成几十个甚至更多的服务,从应用的压力上来说,我们把压力进行了分流,但是原本一个服务变成了多个服务对开发者和运维者来说也带来了极大的挑战,这也就随之衍生了一些技术组件,比如服务与与服务之间如何通信?单个服务如果是集群如何实现负载均衡?配置如何进行统一管理?适合实现分流?如何实现监控等。
注册中心
各个微服务相互之间需要进行调用,那么服务与服务之间又是如何知道对方的调用信息(如 ip,端口,路由等),最简单最直接的办法就是每个服务都维护一个其他需要调用的服务地址信息,但是这样会给开发和运维带来相当大的工作量,当我们有某一个服务 A 的地址信息发生变更,那么只要调用了 A 服务的其他所有服务都要随之修改。而且假如 A 服务宕机了,其他服务也无法发现,当然,也可以做大发现,但是这会相当麻烦,而且每个服务都要重复实现这个功能,这会导致非常繁琐和重复的工作,所以微服务常用组件中就有了注册中心。
注册中心是微服务架构中一个核心的基础服务,主要用来管理所有的微服务,并且注册中心需要实现服务上线和下线的感知。
也就是说我们所有的微服务都将自己的地址信息注册到注册中心,然后其他调用者只需要维护注册中心的地址即可,当一个服务下线的时候,注册中心也会及时将该服务剔除。
引入微服务我们的目的就是为了让每一个微服务都成为一个独立的单元,我们可以对每一个服务进行独立扩展,实现高可用,假如现在有一个服务 A 因为一下子并发量过高导致请求堆积,那么就会造成越来越多的请求阻塞,最终造成雪崩效应导致服务 A 宕机,最终可能会导致整个微服务架构不可用,所以为了保证高可用用,微服务需要提供一种降级和熔断措施。
降级也可以分为主动降级和被动降级,主动降级就是在高峰期比如我关闭一些非核心功能,如:评论,留言等功能。
而熔断一般指的是某一个方法或者接口负载过高,或者说因为网络都动等原因造成响应超时或者失败等,那么这时候应该主动触发熔断,也就是对后续请求不再处理而是直接返回,当然这也要视具体业务来决定采用何种熔断措施。