分布式、集群、微服务、SOA相关概念
分布式、集群、微服务、SOA相关概念
1. 简介
分布式:一个业务分拆多个子业务,部署在不同的服务器上,解决高并发的问题
集群:同一个业务,部署在多个服务器上,提高系统可用性
分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。
分布式:不同模块部署在不同服务器上
作用:分布式解决网站高并发带来问题
集群:多台服务器部署相同应用构成一个集群
作用:通过负载均衡设备共同对外提供服务
SOA:业务系统分解为多个组件,让每个组件都独立提供离散,自治,可复用的服务能力,通过服务的组合和编排来实现上层的业务流程
作用:简化维护,降低整体风险,伸缩灵活
微服务:架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合)其它特性(单一职责,边界,异步通信,独立部署)是分布式概念的更严格执行SOA到微服务架构的演进过程
作用:各服务可独立应用,组合服务也可系统应用
1.1 大白话讲分布式/集群
小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。
为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群。
2. 分布式架构
2.1 只有web server 是分布式(集群)
对于一般小型的网站其实足够用了,web server 集群,数据库db 主从读写分离
分布式可繁可简,最简单的分布式就是大家最常用的,在负载均衡服务器后加一堆web服务器,然后在上面搞一个缓存服务器来保存临时状态,后面共享一个数据库,其实很多号称分布式专家的人也就停留于此,大致结构如下图所示:
这种环境下真正进行分布式的只是web server而已,并且web server之间没有任何联系,所以结构和实现都非常简单。
2.2 复杂分布式服务
有些情况下,对分布式的需求就没这么简单,在每个环节上都有分布式的需求,比如Load Balance、DB、Cache和文件等等,并且当分布式节点之间有关联时,还得考虑之间的通讯,另外,节点非常多的时候,得有监控和管理来支撑。
这样看起来,分布式是一个非常庞大的体系,只不过你可以根据具体需求进行适当地裁剪。按照最完备的分布式体系来看,可以由以下模块组成:
- **分布式任务处理服务:**负责具体的业务逻辑处理
- **分布式节点注册和查询:**负责管理所有分布式节点的命名和物理信息的注册与查询,是节点之间联系的桥梁
- **分布式DB:**分布式结构化数据存取
- **分布式Cache:**分布式缓存数据(非持久化)存取
- **分布式文件:**分布式文件存取
- **网络通信:**节点之间的网络数据通信
- **监控管理:**搜集、监控和诊断所有节点运行状态
- **分布式编程语言:**用于分布式环境下的专有编程语言,比如Elang、Scala
- **分布式算法:**为解决分布式环境下一些特有问题的算法,比如解决一致性问题的Paxos算法
因此,若要深入研究云计算和分布式,就得深入研究以上领域,而这些领域每一块的水都很深,都需要很底层的知识和技术来支撑,所以说,对于想提升技术的开发者来说,以分布式来作为切入点是非常好的,可以以此为线索,探索计算机世界的各个角落。
3. 自己对分布式的理解
分布式可以有两种表现形式,
一种是拆分业务的分布式SOA , 以微服务为代表
但不限于微服务。只要拆分了子系统就算
一种是不拆分业务的分布式集群,只是将服务部署在多个节点
这两种都属于分布式,只是划分得不一样。
3.1 若依前后端分离算分布式吗?
这跟前后端分离没有直接关系,就看部署的形式
- 单体:一个业务服务+一个db+一个redis
- 集群:多个业务服务+db主从分离+主从分离redis
- 分布式:多个业务服务+多个任务调度服务+监控服务+缓存服务+多个文件服务+多个数据库服务