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

服务架构:分层架构

时间: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:架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  Search: 架构  点击:(5)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27  Search: 架构  点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  Search: 架构  点击:(10)  评论:(0)  加入收藏
京东小程序数据中心架构设计与最佳实践
一、京东小程序是什么京东小程序平台能够提供开放、安全的产品,成为品牌开发者链接京东内部核心产品的桥梁,致力于服务每一个信任我们的外部开发者,为不同开发能力的品牌商家提...【详细内容】
2024-03-27  Search: 架构  点击:(9)  评论:(0)  加入收藏
从 MySQL 到 ByteHouse,抖音精准推荐存储架构重构解读
ByteHouse是一款OLAP引擎,具备查询效率高的特点,在硬件需求上相对较低,且具有良好的水平扩展性,如果数据量进一步增长,可以通过增加服务器数量来提升处理能力。本文将从兴趣圈层...【详细内容】
2024-03-22  Search: 架构  点击:(23)  评论:(0)  加入收藏
全程回顾黄仁勋GTC演讲:Blackwell架构B200芯片登场
北京时间3月19日4时-6时,英伟达创始人黄仁勋在美国加州圣何塞SAP中心登台,发表GTC 2024的主题演讲《见证AI的变革时刻》。鉴于过去一年多时间里AI带来的生产力变革,以及英伟达...【详细内容】
2024-03-19  Search: 架构  点击:(17)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13  Search: 架构  点击:(6)  评论:(0)  加入收藏
有了LLM,所有程序员都将转变为架构师?
编译 | 言征 出品 | 51CTO技术栈(微信号:blog51cto)生成式人工智能是否会取代人类程序员?可能不会。但使用生成式人工智能的人类可能会,可惜的是,现在还不是时候。目前,我们正在见...【详细内容】
2024-03-07  Search: 架构  点击:(19)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  Search: 架构  点击:(36)  评论:(0)  加入收藏
通用数据湖仓一体架构正当时
这篇博文中提出的建议并不新鲜。事实上许多组织已经投入了数年时间和昂贵的数据工程团队的工作,以慢慢构建这种架构的某个版本。我知道这一点,因为我以前在Uber和LinkedIn做过...【详细内容】
2024-01-15  Search: 架构  点击:(76)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(5)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(11)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(6)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(10)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(115)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(115)  评论:(0)  加入收藏
站内最新
站内热门
站内头条