什么是微服务

什么是微服务

架构的发展史

单体架构 → 集群架构 → 垂直架构 → SOA架构 → 微服务架构

单体架构

当业务不复杂或用户体量较小时的最优选择

单体架构

集群架构

相比于单体架构,对服务器做了一个水平的扩容(线性扩容),也有可能会增加一些功能,例如:Nginx负载均衡,DNS链路解析、CDN加速、云盾防护等。

每个节点平均分配处理请求,这种架构相比于单体架构可以承载更多的吞吐量。但是由单体架构变更为集群架构后意味着运维难度的增大,原先只需要部署一台服务器,而现在需要每台服务器都部署一遍。

集群架构

垂直架构

基于服务 进行模块的拆分,与单体架构大致相同,例如通过分配二级域名来进行服务的访问。

缺点是 服务之间不能互相访问,只能访问当前服务下的相关功能,若想访问需要编写重复代码,会造成代码的大量冗余与信息孤岛的问题。

垂直架构

SOA架构

SOA架构是一个面向服务的架构,相比于垂直架构又多拆分了一层,将某个领域相关的逻辑抽离出来形成一个服务进行解耦,其他子系统想要使用其他领域的逻辑时可直接进行服务的调用,解决了垂直架构中服务不能互相访问而造成的信息孤岛和服务可重用的问题。

SOA架构

微服务架构

微服务架构相比于SOA架构来说,进行了一个更深程度的解耦,提供了更细粒度的服务,它的核心思想是任务划分制,是将某个任务抽离出来形成一个单独的服务。当想要扩展一个服务或者想更换一个服务的时候可以单独更换该服务而不对其他的服务造成影响。

它的特点是耦合度低,可扩展性高。缺点是部署运维难度极大

微服务架构

Nginx可以做网关,为什么还要单独做应用网关?

做流量入口时做应用网关时可以完成一些全局的操作,例如:服务聚合、安全控制、认证授权、异常处理、黑白名单等操作

RPC与TCP

RPC与TCP

服务的状态化

如何判断服务有无状态:来自两个相同发起者在同服务器的情况下,是否具有上下文关系

用户在访问服务时,可能会将用户的一些信息缓存起来,而存放这个信息的服务就叫做有状态的服务,对有状态的服务进行线性扩容时会出现问题。

例如:如果做了对有状态的服务进行了线性扩容,那么用户在访问时请求会分发到该服务的不同节点上,那么缓存的信息也会分发到不同的服务器上,但这些信息是无法同步的

服务治理都有哪些功能

共有8大功能,如下所示:

  1. 服务注册
  2. 服务续约/健康检查
  3. 服务获取
  4. 服务下线
  5. 服务同步
  6. 服务调用
  7. 失效剔除
  8. 自我保护