分布式、微服务、集群

2019/04/03 Distributed 共 1456 字,约 5 分钟
山川尽美

分布式

一个在线购物网站有如下几个功能:商品管理、订单管理、用户管理、支付管理、购物车等等模块,每个模块部署到独立的云服务主机。分布式系统:

1

分布式锁

分布式锁是控制分布式系统之间同步访问共享资源的一种方式。

为什么使用

Java 高并发的情况下,单机部署处理方式一般使用ReentrantLcoksynchronized进行互斥控制;在分布式系统中,由于多线程、多进程并且程序分部在不同的机器上,使用单机处理的方式已失效,为了解决这个问题就需要一种跨 JVM 的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题。

三种实现

分布式锁具备的条件

  1. 在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;
  2. 高可用的获取锁与释放锁;
  3. 高性能的获取锁与释放锁;
  4. 具备可重入特性;
  5. 具备锁失效机制,防止死锁;
  6. 具备阻塞锁特性,即没有获取到锁将继续等待获取锁;
  7. 具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败。

基于数据库的实现

优点

借助数据库,方案简单

缺点

依赖数据库需要一定的资源开销,性能问题需要考虑

基于 Redis 的实现

基于 ZooKeeper 的实现

集群

负载均衡集群

把各个业务功能模块复制部署多份,每个相同功能的模块,构成了一个组,并以单一系统的模式加以管理,组成一个集群组,集群组有自己的调度算法,确保每次访问只调用组中的一个模块。

2

负载策略

不同的公司,根据自身实力使用不同的负载均衡器:

  • 财大气粗的用硬件 F5
  • 不差钱的使用 DNS 负载均衡
  • 技术牛逼的用 LVS
  • 苦逼的创业型小公司只能使用 Nginx

当然不止这些。

七层网络模型图

​ 七层网络模型图

TCP/IP五层模型

​ TCP/IP 五层模型

不差钱的国企使用的 F5 工作在 4-7 层,一般互联网企业使用的 LVS 工作在传输层,使用最广泛的 Nginx 工作在应用层。

DNS 负载均衡的控制权在域名服务商手里。

高可用集群

集群的话,就不能够出现单点故障,,“双机热备”,“两地三中心”。

双击热备是高可用的一种体现形式,如上图所示,生产环境中我们存在两个负载均衡节点,主节点处于激活状态,另一个节点处于备用状态,当主节点意外宕机,可以通过 keepalived 检测并迅速切换到备用服务,保障业务正常运转。

两地三中心:

故障转移

服务器统一存储用户状态(基于 Redis 的 Session 共享)

微服务

在分布式系统中,微服务更加强调单一职责、轻量级通信(HTTP)、独立性并且进程隔离。

集群与分布式区别

单台服务器扛不住请求压力时,部署多台,这就是集群,集群主要的使用场景是为了分担请求的压力,也就是在几个服务器上部署相同的应用程序,来分担客户端请求,当压力进一步增大的时候,在数据存储的部分,如 MySQL 无法应对很多写的压力,因为在 mysql 做成集群之后,主要的写压力还是在 master 的机器上面,其他 slave 机器无法分担写压力,从而这个时候,也就引出来分布式。

分布式的使用场景是单台机器无法满足性能需求,必须融合多个节点,节点之间有交互,在写 MySQL 的时候,每个节点存储部分数据,这就是分布式的由来。

再存储一些非结构化数据,例如静态文件,图片,pdf,小视频,这些就是分布式文件系统的由来。

集群和分布式都是由多个节点组成,集群之间的通信协调基本不需要,但分布式各个节点的通信协调必不可少。

集群主要是为了应对请求压力的分担,从而有了 LB,负载均衡集群;为了应对可用性,从而有了 HA,高可用性集群;为了更强的性能,从而有了 HP,高性能集群;为了高并发大规模性能,从而有分布式系统集群

参考:

三分钟读懂 TT 猫分布式、微服务和集群之路

文档信息

Search

    Table of Contents