gulimall-002 分布式基础概念

1、微服务概念

微服务是一种非常流行的架构风格。

拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行。

  • 每个服务运行在自己的单个进程
  • 使用轻量级机制通信
  • 可以使用不同的编程语言编写以及不同的数据存储技术

2、集群&分布式&节点

2.1 集群概念

集群是个物理形态,只要是一堆机器就可以叫集群。它们是不是一起协作干活,还是各自干各自的,这个谁也不知道。

2.2 分布式概念

分布式是个工作方式 ,分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统,比如京东商城。

  • 分布式是指将不同的业务分布在不同的地方
  • 集群是指将几台服务器集中在一起,实现同一业务

通俗来说,可以将分布式和集群比作一群人在搬家的例子:

  • 集群:一群人在一起搬家,他们可以共同完成同一个任务。如果其中一个人出了问题,其他人可以继续完成这个任务,所以整个任务可以更快地完成。同样,如果需要搬到更大的房子,只需增加更多的人即可。这里每个人扮演的角色是相同的,即每个人都是负责搬家的工人。
  • 分布式:一群人分成几组,分别搬不同的东西,例如有一组负责家具,一组负责装饰品等。每个组都有自己的领导,并且他们必须同步完成各自的任务,以便整个搬家过程能够成功。同样,如果需要搬到更大的房子,可能需要增加更多的组,而不是增加更多的人。这里每个人扮演的角色是不同的,即每个人都有自己的职责和任务。

因此,集群通常用于处理同一任务的场景,例如 Web 服务器集群,而分布式则更适用于处理不同任务的场景,例如大规模的数据处理。

总之,尽管分布式和集群都可以提高系统的可靠性、扩展性和性能,但它们之间有一些细微的区别,需要根据具体的情况来选择最合适的技术。

总结:

节点:集群中的一个服务器

  • 分布式中的每一个节点都可以做集群
  • 而集群不一定就是分布式的

3、远程调用

在分布式系统中,各个服务可能分布在不同的主机,但是服务之间不可避免地要需要互相调用,我们称为远程调用。

比如 订单模块 去 商品模块 查询商品信息。

4、负载均衡

分布式系统中,A服务需要调用B服务(如订单模块调用商品模块),B服务在多台机器中都存在,A服务调用任意一台B服务都可以完成功能。

  • 负载均衡的思想:不让某个机器太忙,也不要让某个机器太闲。
  • 负载均衡的好处:提高系统的健壮性和性能。

常用的负载均衡算法:

  • 轮询
    • 按顺序往后依次选择,直到选择最后一个,依次循环。
  • 最小连接
    • 优先选择连接数最小的机器,也就是压力最小的后端服务器(在会话较长的情况下,优先考虑这种情况)

5、服务注册/发现&注册中心

A服务调用B服务,A服务并不知道B服务在哪几台机器上面,哪些是正常的,哪些服务已经下线,解决这些问题可以引入服务注册。避免调用不可用的服务。

6、配置中心

每个服务最终都有大量的配置,并且每个服务都可能部署在多个机器上面,我们经常需要变更某个服务的配置,设想一下假如我们有几百台服务器,难道要进入每一台进行改动配置并重新部署吗?显然不合理。所以就有了配置中心的存在了。

配置中心用于集中管理微服务的配置信息,一处配置,改动都会改。

7、服务熔断&服务降级

在微服务架构中,微服务之间通过网络进行通信,存在相互依赖,当1台服务器不可用,有可能造成雪崩效应,要避免这种情况,必须要有容错机制保护服务。

  • 服务熔断

设置服务超时,当调用的服务达到某个阀值,我们可以开启断路保护机制,后来的服务不再调用这个服务,而是本地直接返回默认的数据。

  • 服务降级

当系统处于资源紧张时期,我们可以让非核心业务降级运行,降级:某些服务不处理,或则简单处理(返回异常,返回null,调用Mock数据)

8、API网关

APIGateway可以理解成生活中的安检系统。

在微服务架构中,API Gateway作为整体架构的重要组件,它抽象了微服务中都需要的公共功能,同时提供了:

  • 客户端的负载均衡
  • 服务自动熔断
  • 灰度发布
  • 统一认证
  • 限流流控
  • 日志统计

等功能。帮我们解决了很多API管理难题。

相关推荐
CoderYanger8 分钟前
优选算法-字符串:63.二进制求和
java·开发语言·算法·leetcode·职场和发展·1024程序员节
3***31219 分钟前
java进阶1——JVM
java·开发语言·jvm
FeiHuo5651521 分钟前
微信个人号开发中如何高效实现API二次开发
java·开发语言·python·微信
源码技术栈29 分钟前
什么是云门诊系统、云诊所系统?
java·vue.js·spring boot·源码·门诊·云门诊
拾忆,想起37 分钟前
Dubbo动态配置实时生效全攻略:零停机实现配置热更新
分布式·微服务·性能优化·架构·dubbo
Coder-coco38 分钟前
游戏助手|游戏攻略|基于SprinBoot+vue的游戏攻略系统小程序(源码+数据库+文档)
java·vue.js·spring boot·游戏·小程序·论文·游戏助手
Qiuner40 分钟前
Spring Boot 机制二:配置属性绑定 Binder 源码解析(ConfigurationProperties 全链路)
java·spring boot·后端·spring·binder
D***77652 小时前
适用于IntelliJ IDEA 2024.1.2部署Tomcat的完整方法,以及笔者踩的坑,避免高血压,保姆级教程
java·tomcat·intellij-idea
20岁30年经验的码农2 小时前
Spring Security 6.x 安全实践指南
java
胖咕噜的稞达鸭3 小时前
自定义shell命令行解释器自制
java·开发语言