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. 一个互联网实战架构



相关推荐
Sheffield12 小时前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
Lee川12 小时前
深度拆解:基于面向对象思维的“就地编辑”组件全模块解析
javascript·架构
勤劳打代码12 小时前
Flutter 架构日记 — 状态管理
flutter·架构·前端框架
子兮曰17 小时前
后端字段又改了?我撸了一个 BFF 数据适配器,从此再也不怕接口“屎山”!
前端·javascript·架构
Sheffield20 小时前
Alpine是什么,为什么是Docker首选?
linux·docker·容器
卓卓不是桌桌20 小时前
如何优雅地处理 iframe 跨域通信?这是我的开源方案
javascript·架构
Qlly20 小时前
DDD 架构为什么适合 MCP Server 开发?
人工智能·后端·架构
马艳泽20 小时前
win10下运行Start Broker and Proxy报错解决
docker
用户881586910912 天前
AI Agent 协作系统架构设计与实践
架构
鹏北海2 天前
Qiankun 微前端实战踩坑历程
前端·架构