Docker之技术架构【八大架构演进之路】

Docker之技术架构

  • [1. 八大架构演进之路](#1. 八大架构演进之路)
    • [1.1 单机架构](#1.1 单机架构)
    • [1.2 应用数据分离架构](#1.2 应用数据分离架构)
    • [1.3 应用服务集群架构](#1.3 应用服务集群架构)
    • [1.4 读写分离架构](#1.4 读写分离架构)
    • [1.5 冷热分离架构](#1.5 冷热分离架构)
    • [1.6 垂直分库架构](#1.6 垂直分库架构)
    • [1.7 微服务架构](#1.7 微服务架构)
    • [1.8 容器编排架构(docker出现)](#1.8 容器编排架构(docker出现))
  • [2. 一个互联网实战架构](#2. 一个互联网实战架构)

本章意在让大家了解Docker出现的历史原因,从宏观上认识Docker以及Docker在架构中起到的作用。


1. 八大架构演进之路


1.1 单机架构


1. 简介

  • 应用服务和数据库服务共用一台服务器。

2. 出现原因

  • 出现在互联网早期,访问量比较小,单机足以满足需求。

3. 架构工作原理

4. 技术案例

  • 用户通过浏览器或app,访问对应服务器。先输入网址www.taobao.com,之后通过DNS解析,找到服务器ip地址。之后请求通过Tomcat客户端,转发给数据库端MySQL。拿到数据后,原路返回给用户,返回的时候不用再经过DNS了。


5. 优缺点

  • 优点:
    • 部署简单,成本低。
  • 缺点:
    • 存在严重的性能瓶颈;
    • 数据库和应用互相竞争资源。

1.2 应用数据分离架构


1. 简介

  • 应用服务和数据库服务使用不同的服务器。

2. 出现原因

  • 单机存在严重的资源竞争,导致站点变慢。

3. 架构工作原理

4. 技术案例

5. 优缺点

  • 优点:
    • 成本相对可控;
    • 性能比单机有提升;
    • 数据库单独隔离,不会因为应用把数据库搞坏,有一定的容灾能力。
  • 缺点:
    • 硬件成本变高;
    • 性能有瓶颈,无法应对海量并发。

1.3 应用服务集群架构


1. 简介

  • 引入了负载均衡,应用以集群方式运行。

2. 出现原因

  • 单个应用不足以支持海量的并发请求,高并发的时候站点响应变慢。

3. 架构工作原理

  • 通过调整软件架构,增加应用层硬件,将用户流量分担到不同的应用层服务器上,来提升系统的承载能力。

4. 技术案例

  • 本例中,负载均衡层一共有三层,分别是DNS,LVS/F5,Nginx。Nginx是软件实现的,最高支持万级左右的高并发。LVVS/F5则是硬件实现的,性能更高,最高支持百万级左右的高并发。DNS本身也有并发功能,可以达到亿万级。
  • 如果并发量高到连DNS层的并发都无法满足了,还可以向上找到浏览器、APP,让用户在本地就配置好分配的ip,绕过DNS直接访问服务器。

软件设计哲学:

  • 一个人搞不定,喊兄弟过来(横向扩展Tomcat);
  • 没有什么是加一层解决不了的。

5. 优缺点

  • 优点:
    • 应用服务高可用,不会一个服务出问题,整个站点挂掉;
    • 应用服务具备一定高性能,如果不访问数据库,应用相关处理通过扩展可以支持海量请求快速响应;
    • 应用服务有一定扩展能力,支持横向扩展。
  • 缺点:
    • 数据库成为性能瓶颈,无法应对数据库的海量查询;
    • 数据库只有一个,一旦挂掉整个系统就挂掉了,容错率低;
    • 运维工作增多,扩展后部署运维工作增多,需要开发对应的工具应对快速部署;
    • 硬件成本较高。

1.4 读写分离架构


1. 简介

  • 将数据库读写操作分散到不同的节点上,数据库服务器搭建主从集群,一主一从、一主多从都可以。数据库主机负责写操作,从机只负责读操作。

2. 出现原因

  • 数据库成为瓶颈,而互联网应用一般读多写少,数据库承载压力大,主要是由这些读的请求造成的,那么我们可以把读操作和写操作分开。

3. 架构工作原理

4. 技术案例

  • 对于写入操作,由主数据库先执行,之后再通过主数据库同步到从数据库。读取操作直接由从数据库执行即可。
  • 主从数据库的分配,以及从数据库的并发调度,由mycat, tddl中间层实现。

5. 优缺点

  • 优点:
    • 数据库的读取性能提升;
    • 读取被其他服务器分担,写的性能间接提升;
    • 数据库有从库,数据库的可用性提高了。
  • 缺点:
    • 热点数据的频繁读取导致数据库负载很高;
    • 当同步挂掉,或者同步延迟比较大时,写库和读库的数据不一致;
    • 服务器成本需要进一步增加。

1.5 冷热分离架构


1. 简介

  • 引入缓存,实行冷热分离,将热点数据放到缓存中快速响应。

2. 出现原因

  • 海量的请求导致数据库负载过高,站点响应再度变慢。

3. 架构工作原理

4. 技术案例

  • 缓冲区可以采用Redis实现;
  • 用户发送写入请求,经过一层一层转化,先访问到了Redis,向缓冲区写入。之后再由缓冲区向数据库写入;
  • 用户发送读取请求,经过一层一层转化,先访问Redis,如果请求的数据在缓冲区中,则直接从缓冲区读走数据,返回给用户;如果缓冲区中没有请求的数据,则要去数据库查找数据,返回。

5. 优缺点

  • 优点:
    • 大幅降低对数据库的访问请求,性能提升非常明显。
  • 缺点:
    • 带来了缓存一致性,缓存击穿,缓存失效,缓存雪崩等问题;
    • 服务器成本需要进一步增加;
    • 业务体量支持变大后,数据不断增加,数据库单库太大,单个表体量也太大,数据查询会很慢,导致数据库再度成为系统瓶颈。

1.6 垂直分库架构


1. 简介

  • 数据库的数据被拆分,数据库数据分布式存储,分布式处理,分布式查询,也可以理解为分布式数据库架构。

2. 出现原因

  • 单机的写库会逐渐会达到性能瓶颈,需要拆分数据库,数据表的数据量太大,处理压力太大,需要进行分表,为降低运维难度,业界逐渐研发了分布式数据库,库表天然支持分布式。

3. 架构工作原理

4. 技术案例

  • 采用分库分表的方式,实现该架构:
  • 直接使用分布式数据库,实现该架构:
    • 使用Redis Cluster缓存集群;
    • 使用现成的分布式数据库Greenplum、TiDB、Postgresql XC、HAWQ 等。

5. 优缺点

  • 优点:
    • 数据库吞吐量大幅提升,不再是瓶颈。
  • 缺点:
    • 数据库和缓存结合目前能够抗住海量的请求,但是应用的代码整体耦合在一起,修改一行代码需要整体重新发布。

1.7 微服务架构


1. 简介

  • 微服务是一种架构风格,按照业务板块来划分应用代码,使单个应用的职责更清晰,相互之间可以做到独立升级迭代。

2. 出现原因

  • 扩展性差:应用程序无法轻松扩展,因为每次需要更新应用程序时,都必须重新构建整个系统;
  • 持续开发困难:一个很小的代码改动,也需要重新部署整个应用,无法频繁并轻松的发布版本;
  • 不可靠:即使系统的一个功能不起作用,可能导致整个系统无法工作;
  • 不灵活:无法使用不同的技术构建单体应用程序;
  • 代码维护难:所有功能耦合在一起,新人不知道何从下手。

3. 架构工作原理

4. 技术案例

  • 常见的服务治理框架有SpringCloudDubbo

5. 优缺点

  • 优点:
    • 灵活性高:服务独立测试、部署、升级、发布;
    • 独立扩展:每个服务可以各自进行扩展;
    • 提高容错性:一个服务问题并不会让整个系统瘫痪;
    • 新技术的应用容易:支持多种编程语言。
  • 缺点:
    • 运维复杂度高:业务不断发展,应用和服务都会不断变多,应用和服务的部署变得复杂,同一台服务器上部署多个服务还要解决运行环境冲突的问题,此外,对于如大促这类需要动态扩缩容的场景,需要水平扩展服务的性能,就需要在新增的服务上准备运行环境,部署服务等,运维将变得十分困难;
    • 处理故障困难:一个请求跨多个服务调用,需要查看不同服务的日志完成问题定位。

1.8 容器编排架构(docker出现)


1. 简介

  • 借助容器化技术(如docker)将应用/服务可以打包为镜像,通过容器编排工具(如k8s)来动态分发和部署镜像,服务以容器化方式运行。

2. 出现原因

  • 微服务拆分细,服务多部署工作量大,而且配置复杂,容易出错;
  • 微服务数量多扩缩容麻烦,而且容易出错,每次缩容后再扩容又需要重新配置服务对应的环境参数信息;
  • 微服务之间运行环境可能冲突,需要更多的资源来进行部署或者通过修改配置来解决冲突。

3. 架构工作原理

4. 技术案例

  • 在一个大公司中,可能存在很多部门。比如公共服务层是一个部门,该部门有自己的k8s集群,管理旗下的多个容器化微服务。应用服务层分出两个部门,一个商城部,一个直播部,每个部门都有自己的k8s集群。

2. 一个互联网实战架构



相关推荐
勇-子1 小时前
K8s DaemonSet的介绍
云原生·容器·kubernetes
孟里啥都有.1 小时前
12.24 k8s yaml文件类型和介绍
云原生·容器·kubernetes
花晓木1 小时前
最新版本 - 二进制安装k8s1.29.2 集群
云原生·容器·kubernetes
休耕1 小时前
kubeadm搭建k8s集群
云原生·容器·kubernetes
小李不想输啦3 小时前
什么是微服务、微服务如何实现Eureka,网关是什么,nacos是什么
java·spring boot·微服务·eureka·架构
梁萌4 小时前
Linux安装Docker
linux·运维·docker·helloworld·容器化部署
翱翔-蓝天4 小时前
在 CentOS 系统上安装 ClickHouse
运维·docker·容器
SRExianxian5 小时前
kubernetes存储架构之PV controller源码解读
容器·架构·kubernetes
XianxinMao5 小时前
Transformer 架构对比:Dense、MoE 与 Hybrid-MoE 的优劣分析
深度学习·架构·transformer
cdg==吃蛋糕7 小时前
docker代理配置
docker·容器·eureka