Java分布式、微服务概念

时间:2024-10-20 17:23:19

1. 分布式

1.1 分布式是什么

分布式系统在《分布式系统原理与范型》一书中有如下定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”。
分布式系统是建立在网络之上的软件系统,是一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。
分布式系统总结来说是将数据存储能力和计算能力分布到不同的服务器上,作为一个整体对外服务。

1.2 什么情况用分布式

当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(提升CPU、加内存、加硬盘等)高昂到一定程度,且应用程序也不能进一步优化的时候,我们考虑使用分布式系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。
因此,分布式系统要解决的问题本身和单机系统是一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。

1.3 分布式架构

分布式采用集群部署,通过计算机之间的相互协作处理复杂任务。
分布式系统通过网络协议来通信,所以在空间上没有任何限制,分布式服务器可以部署在不同的地区。
分布式是指一个业务拆成多个子业务,部署在不同的服务器上,而集群是指同一个业务,部署在多个服务器上。分布式的每一个节点,都可以做集群。

1.4 分布式优点

  1. 系统可用性提升
    传统的集中式计算或集中式存储在遇见单点故障时容易造成整个服务不可用。分布式下单点机器有故障不会造成整个服务不可用。

  2. 系统并发能力提升
    请求通过Nginx负载均衡发送到不同的服务器上,这样的服务器可以有1~N台,这样我们可以根据实际用户访问量增加机器。无论是数据库还是服务,都可以做到随时水平扩展。
    比如淘宝在平时用50台服务器就够了,到了双十一,订单量剧增,服务器增加到100台,每台服务器之间相互独立,互不影响。

  3. 系统容错能力提升
    上面说过分布式服务器可以部署在不同的地区,那么如果一个地方的服务器突然断电或者宕机,那么这个地方的流量会被自动分发到其他地方,不会影响用户的使用。
    在这里插入图片描述

  4. 低延迟
    参考上面这张图,服务器会根据用户的ip自动选择距离自己最近的机房,例如河北的就会选到北京,苏州的就会选到上海,这样可以降低网络延迟。

1.4 分布式不足

  1. 依赖网络
    服务器间通讯依赖网络,不可靠网络包括网络延时,丢包、中断、异步。一个完整的服务请求依赖一连串服务调用,任意一个服务节点网络出现问题,都可能造成本次请求失败,并且容易造成线程阻塞,导致整个服务不可用,形成“雪崩效应”。

  2. 维护成本高
    单体服务只需要维护一个站点就可以了,但是分布式服务可能被拆分成几十上百个服务,增加运维的成本。

  3. CAP问题
    一致性( C )、可用性( A )、分区容错性( P )无法同时满足,一般只能满足CP或AP,需要根据实际情况决定牺牲掉哪个。

2. 微服务

2.1 微服务概念

微服务不是一个框架,而是一种架构思想。
微服务将一个大的应用,拆分成多个小模块,每个模块有自己功能和职责,模块间可以进行交互。服务间通过http协议进行通信。微服务模块可以用不同的编程语言。
微服务的出现就是因为原来单体应用架构无法满足当前互联网产品的技术需求,解决的问题就是不因为某个模块的升级和bug影响现有的整体系统业务。
微服务架构核心就是为了解决应用微服务之后的服务治理问题。
微服务必须使用集中化管理,SpringCloud就是管理微服务的工具。

2.2 微服务特征

  1. 单一职责:一个微服务应该是单一职责的,这才是“微”的体现,一个微服务解决一个业务问题。
  2. 面向服务:将自己的业务能力封装,对外提供服务。一个微服务本身也可能使用到其他微服务的特点。

2.3 微服务架构

微服务需要通过服务注册中心解决服务发现问题、通过配置中心服务配置管理问题、还需要服务网关提供统一的服务入口。
微服务
这就是一个典型的微服务架构。

微服务的自动化部署(CI/CD)
单体架构项目只需要部署一次,而微服务架构有多少个服务就需要部署多少次。我们使用自动化部署工具(例如Jenkins)对项目进行自动部署。

2.4 微服务优势

  1. 拆分服务,复杂业务简单化。
  2. 轻耦合,横向扩展能力很强。
  3. 单独的服务模块可以用适合的语言与技术开发。
  4. 对微服务的重构比较简单。
  5. 单独一个微服务的修改和部署对其他服务无影响。

2.5 微服务不足

  1. 项目复杂度提高
  2. 服务的划分方法
  3. 服务的部署难度

3. 概念区别

3.1 分布式:分散压力

不同功能模块部署在不同服务器上。
作用:分布式解决网站高并发带来的问题。

3.2 集群:相同的服务

多台服务器部署相同应用构成一个集群。
通常通过Nginx完成负载均衡。
作用:通过负载均衡设备共同对外提供服务。

3.3 微服务:分散能力

是分布式概念更加严格的执行。
各服务间隔离、自治、其它特性(单一职责,边界,异步通信,独立部署)

3.4 其他区别

分布式不一定是微服务:微服务需要满足单一职责原则,一个微服务模块解决一个业务问题,而分布式没有这方面的要求。
微服务不一定是分布式:微服务可以部署在同一个服务器上,也可以部署在多个服务器上,而分布式都是部署到多台服务器上的。

相关文章