什么是微服务?
在单体架构中,我们把所有的业务和服务都放到一起,于是当业务越来越复杂,代码的耦合度也会越来越高,不利于升级和维护。
而微服务就是把这些以前复杂的服务按照业务拆分成一个个独立微小的服务。这些微小的服务在一起完成一个复杂的业务并且对外提供服务。
springcloud是实现分布式系统架构技术的集合。
一、注册中心
多个独立微小的服务在一起对外提供服务,而且服务与服务之间会相互调用。当业务复杂时,服务之间的关系错综复杂,管理难度大。而注册中心可以对服务进行管理。注册中心记录每个服务对应的IP地址、端口、服务名。服务和服务之间的调用,先在注册中心找到要调用的微服务名,再根据微服务名进行调用。
当微服务启动的时候,会将服务的通讯信息以别名的方式注册到注册中心。
注意任何一个RPC远程调用框架的核心思想在于注册中心,因为注册中心管理服务和服务之间的依赖关系(服务治理)。如何一个RPC远程调用框架都有一个注册中心。
二、配置中心
由于每个微服务都有一个配置文件,当微服务集群时,配置文件多,不方便管理。而配置中心就可以对微服务的配置进行管理。当我们对配置中心的微服务配置修改完成并且发布之后,对应的微服务的配置也会修改完成。这样就为各个不同的微服务应用提供了一个中心化的外部配置。
修改的文件之后,如何让微服务主动更新配置,实现动态刷新,一次通知,处处生效?
消息中间件就可以处理这个问题。
三、网关
网关又叫协议转换器,就是一个网络到另一个网络的关口。
微服务的网关可以是内部一个或者多个API对外提供的统一入口,即为消费者提供一个统一暴露的入口,于内部的微服务的数量无关。
网关避免了对外暴露微服务的API,同时也避免了恶意攻击。由于网关将外部API和内部微服务API分开,这样可以在不对外部客户端产生负面影响的情况下,对微服务进行重构。
对于请求的权限验证和过滤可以由网关实现,减少代码的冗余。
四、负载均衡
负载均衡可以提高系统的性能,用户的请求响应时间。
负载均衡可以让每个节点以最好的状态提供服务,避免对于某个微服务的大量请求被该服务的一个节点处理,将这些请求分配到该服务的所有节点减少压力。
五、服务调用产生的问题
复杂的分布式服务调用时不可避免的会有服务调用失败。这是分布式相同面临的问题。由此以下几个概念。
服务雪崩
微服务之间的调用,如何某个链路上的某个微服务的调用时间过长或者不可用,那么对该服务调用占用的资源会越来越多,进而引起服务器服务去崩溃,这就是服务雪崩。也就是某个微服务模块发生故障之后,还可以接受流量,然后这个有问题的模块依然调用了其他模块,这样就发生了联级故障,也叫雪崩。