您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

服务架构:分层架构

时间:2023-07-15 12:43:24  来源:今日头条  作者:赵帅虎
分层是一种职责分离和依赖管理的方式:每层都有自己特定的职能;高层的服务可以调用低层的服务,但是反过来不行。

一个分层架构设计的应用通常包含很多个逻辑层(Logical Layer)和物理层(Physical Tier)。分层架构这个名字里的层(Tier),特指“物理层”(Tier),每个物理层是由很多台机器构成,可以是部署在局域网下一个子网的虚拟机或裸金属机器。

分层是一种职责分离和依赖管理的方式:每层都有自己特定的职能;高层的服务可以调用低层的服务,但是反过来不行。

物理层运行在不同的机器上,一层可以直接调用另一层,或者通过消息队列进行通信。尽管每个逻辑层都可以被部署在独立的物理层,但不是必须的。为了节省资源,一个物理层可以部署多个逻辑层。通过物理层的隔离,架构的扩展性和容错性会更强,负面作用是会导致额外的网络通信延迟。

传统的三层应用(物理层)分别包含展示层、中间层、数据库层。中间层是可选的,较为复杂的应用通常会超过三层。上面的架构图中就包含了两个中间层,分别实现了不同的功能。

一个分层架构的应用,从逻辑层的视角来看,可以分为两类:

  1. 封闭架构:每个逻辑层只能调用它的直接下层。
  2. 开放架构:每个逻辑层都可以调用它下面的任何‬层。

封闭架构严格限制了逻辑层之间的依赖关系,架构更为清晰。缺点是一些中间层只可能只对请求进行转发,导致不必要的网络交互。

应用场景

分层架构常见于IaaS系统,这类系统中每个物理层都运行在一组独立的物理机上。不过IaaS系统也不必采用纯粹的分层架构,毕竟架构中的某些部分使用现成的服务优势更大,比如缓存系统、消息队列和数据存储服务。

在以下场景中可以考虑分层架构:

  • 简单的网络应用。
  • 将本地部署的应用迁移上云。
  • 本地部署应用与云服务应用混合开发的场景。

传统公司里本地部署(自家机房)的系统通常采用分层架构,各家云服务商也提供了裸金属服务器供传统企业上云。

架构优势

  • 云服务和本地部署的可移植性高。
  • 对于大多数开发者而言学习门槛低。
  • 从传统架构模型演进过来的。
  • 支持多种多样的部署环境,比如win/linux

有哪些挑战

  • 开发过程中,中间层很容易沦为对数据库的CRUD,只是增加了网络延迟。
  • 按照单体架构的方式设计导致功能无法独立发布。
  • 在IaaS管理整个系统比使用现成的服务维护成本高。
  • 在大型系统中,网络安全会成为问题。

最佳实践

  • 使用自动扩容功能,可以应对工作负载的变化。
  • 使用消息队列把物理层进行解耦。
  • 把半静态资源缓存起来。
  • 数据库层配置成高可用模式。
  • 在网络层(Web Tier)之前加一层防火墙(WAF)。
  • 给每个物理层分配一个子网,不同子网之间只开放特定的ip port,以提高安全性。
  • 限制数据层的访问,比如只允许中间层访问数据,不允许网络层(Web Tier)访问。

运行在虚拟机上的分层架构

这里我们给出一个在虚拟机上推荐的分层架构:

每个物理层均包含至少两台虚拟机,以避免单点故障;通过负载均衡,把请求分发到不同的虚拟机上;如果要支持横向扩容,我们可以在一个物理层配置更多虚拟机。

每个物理层都有自己的子网,所以这些虚拟机的内网IP在一个网段里。这样的优势是配置网络安全规则很方便,路由表也很容易配置。

网络层和业务逻辑层是无状态的。任何一个虚拟机都可以处理到达该层的请求。数据层是多备份的数据库系统。比如主从版本的MySQL、TiDB,或者云上Dynamodb等。

每个物理层都有自己的 inbound 和 outbound 网络安全规则,比如数据层可以设置只允许业务逻辑层的虚拟机IP进行访问;

补充说明

  • 分层架构并不限定于3层,复杂的系统通常会有很多层;七层负载均衡或四层负载均衡都是很常见的选择。
  • 层定义了扩展性、可靠性和安全性的边界;如果服务的SLA不一样,可以考虑放到不同的物理层。
  • 架构中很多地方可以采用现成的服务,尤其是通用的缓存、消息队列、存储、数据库服务。
  • 生产环境的虚拟机要禁止SSH或RDP直连;通常情况下,运维/开发人员可以登陆一个跳板机,跳板机可以直连生产环境虚拟机;对于跳板机,我们通常也会设置网络规则,比如只允许特定的公网IP通过SSH或RDP访问。
  • 对于核心服务,多机房容灾也是要考虑的点。


Tags:架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除。
▌相关推荐
无论您是初学者还是经验丰富的开发人员,阅读Docker Compose的架构可能会令人感到困惑。Docker Compose是一个优质的工具,用于在Docker容器中定义和运行多个服务。然而,其复杂的...【详细内容】
2023-08-01  Tags: 架构  点击:(2)  评论:(0)  加入收藏
微服务架构是由很多小而自治的微服务组合而成,每个服务都提供一套独立自洽的业务能力。从应用的层面,我们首先对业务进行建模,业务域定义的边界也自然而然作为每个微服务的职能...【详细内容】
2023-07-28  Tags: 架构  点击:(7)  评论:(0)  加入收藏
作者 | 张旭海,刘振伟服务化演进中的问题 自从数年前微服务的概念被提出,到现在基本成了技术架构的标配。微服务的场景下衍生出了对分布式能力的大量需求:各服务之间需要相互...【详细内容】
2023-07-28  Tags: 架构  点击:(7)  评论:(0)  加入收藏
如今,很多企业都在进行微服务架构重构,问题是微服务到底是不是最佳选择?如果选择没有问题,微服务在什么时候用?重构之后的技术路线和之前是怎样一种关系?我们应该以什么样的方式,...【详细内容】
2023-07-26  Tags: 架构  点击:(2)  评论:(0)  加入收藏
分层是一种职责分离和依赖管理的方式:每层都有自己特定的职能;高层的服务可以调用低层的服务,但是反过来不行。一个分层架构设计的应用通常包含很多个逻辑层(Logical Layer)和...【详细内容】
2023-07-15  Tags: 架构  点击:(0)  评论:(0)  加入收藏
IT之家 7 月 13 日消息,外媒 Semianalysis 近日对 OpenAI 今年 3 月发布的 GPT-4 大模型进行了揭秘,其中包括 GPT-4 模型架构、训练和推理的基础设施、参数量、训练数据集、to...【详细内容】
2023-07-13  Tags: 架构  点击:(38)  评论:(0)  加入收藏
我们日常生活中使用很多应用程序,有微信、抖音、王者这种涉及多人联网互动的大型应用,它们以操作系统作为宿主;也有网站、小程序、PWA等借壳的应用。面向用户表现为Android/iOS...【详细内容】
2023-07-10  Tags: 架构  点击:(36)  评论:(0)  加入收藏
今天要分享的是 MVC 和 DDD 的架构本质,通过由浅入深的介绍讲解和视频带着手把手操作创建工程架构。让无论是学习 MVC 的小白码农还是希望了解更多关于 DDD 内容的老白码农,都...【详细内容】
2023-07-04  Tags: 架构  点击:(32)  评论:(0)  加入收藏
微服务架构是一种软件架构模式,用于构建复杂应用程序。它将一个大型的单体应用程序拆分为一组更小、更独立的服务,每个服务都运行在自己的进程中,并通过轻量级的通信机制进行交...【详细内容】
2023-07-03  Tags: 架构  点击:(22)  评论:(0)  加入收藏
很多小伙伴使用了GreatSQL,但是对GreatSQL的底层原理还不是很了解,今天就带大家一起揭开GreatSQL体系架构的神秘面纱!首先来回顾一张经典的体系架构图:图片图1_GreatSQL5.7 版本...【详细内容】
2023-06-28  Tags: 架构  点击:(42)  评论:(0)  加入收藏
▌简易百科推荐
微服务架构是由很多小而自治的微服务组合而成,每个服务都提供一套独立自洽的业务能力。从应用的层面,我们首先对业务进行建模,业务域定义的边界也自然而然作为每个微服务的职能...【详细内容】
2023-07-28    今日头条  Tags:架构   点击:(7)  评论:(0)  加入收藏
作者 | 张旭海,刘振伟服务化演进中的问题 自从数年前微服务的概念被提出,到现在基本成了技术架构的标配。微服务的场景下衍生出了对分布式能力的大量需求:各服务之间需要相互...【详细内容】
2023-07-28    作者 | 张旭海,刘振伟 服务化演进中的问题 自从数年前微服务的概念被提出,到现在基本成了技术架构的标配。微服务的场景  Tags:架构   点击:(7)  评论:(0)  加入收藏
如今,很多企业都在进行微服务架构重构,问题是微服务到底是不是最佳选择?如果选择没有问题,微服务在什么时候用?重构之后的技术路线和之前是怎样一种关系?我们应该以什么样的方式,...【详细内容】
2023-07-26  IT168企业级    Tags:架构   点击:(2)  评论:(0)  加入收藏
分层是一种职责分离和依赖管理的方式:每层都有自己特定的职能;高层的服务可以调用低层的服务,但是反过来不行。一个分层架构设计的应用通常包含很多个逻辑层(Logical Layer)和...【详细内容】
2023-07-15  赵帅虎  今日头条  Tags:架构   点击:(0)  评论:(0)  加入收藏
我们日常生活中使用很多应用程序,有微信、抖音、王者这种涉及多人联网互动的大型应用,它们以操作系统作为宿主;也有网站、小程序、PWA等借壳的应用。面向用户表现为Android/iOS...【详细内容】
2023-07-10  赵帅虎  今日头条  Tags:架构   点击:(36)  评论:(0)  加入收藏
一、前言 系统设计的核心作用是在业务现实世界和抽象的IT实现之间建立起一道桥梁。 与其他行业被物理特性限制所束缚不同,软件世界可以变得无限庞大,而限制软件发展的其实是人...【详细内容】
2023-07-04    得物技术  Tags:系统设计   点击:(34)  评论:(0)  加入收藏
一、数据服务中台建设背景1、数据获取过程中的痛点在分享数据服务中台建设之前,想从两个案例开始,从中可以感受传统数据获取过程中的一些痛点。案例一:数据需求方A,需要获取每日...【详细内容】
2023-07-04    DataFunTalk  Tags:中台   点击:(38)  评论:(0)  加入收藏
今天要分享的是 MVC 和 DDD 的架构本质,通过由浅入深的介绍讲解和视频带着手把手操作创建工程架构。让无论是学习 MVC 的小白码农还是希望了解更多关于 DDD 内容的老白码农,都...【详细内容】
2023-07-04  小傅哥    Tags:架构   点击:(32)  评论:(0)  加入收藏
作者|NearFar X Lab 团队 洪守伟、陈超、周志银、左益、武超整理|SelectDB 内容团队导读: 无锡拈花云科技服务有限公司(以下简称拈花云科)是由中国创意文旅集成商拈花湾文旅和北...【详细内容】
2023-07-03    InfoQ  Tags:数据中台   点击:(28)  评论:(0)  加入收藏
很多小伙伴使用了GreatSQL,但是对GreatSQL的底层原理还不是很了解,今天就带大家一起揭开GreatSQL体系架构的神秘面纱!首先来回顾一张经典的体系架构图:图片图1_GreatSQL5.7 版本...【详细内容】
2023-06-28  GreatSQL社区    Tags:架构   点击:(42)  评论:(0)  加入收藏
站内最新
站内热门
站内头条