本文是从零开始学软件架构系列文章的第一篇,主题为架构设计分层实现。本文的主要内容包括:课程简介、分层的意义、分层思想的应用、以 Java 为例的分层模型的演进过程、分布式分层架构等内容。学习目的是了解分层模型的演进过程,学习如何利用分层思想设计现代高可用的亿级流量平台的软件架构。
简介
什么是架构
架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
优秀的性能、超强TPS/QPS的承载能力、高可用决定了你的能够支撑多少 PV 的流量。
Balance,选择一个投入产出比最优的方案。
项目中的角色
客户、产品经理、开发人员、测试人员、运维人员、系统架构师、系统负责人、项目经理、用户。
构架师的职责
- 明确需求:理解和把握需求。
- 系统能力分解:将需求指标分解为系统能力。
- 技术选型
- 制定架构说明书并主导执行落地
架构师成长路径
架构师必备能力
架构师必备的能力如下:
- 设计能力
- 管理能力
- 技术实力
- 沟通能力
- 应急能力
- 抽象能力
课程大纲
本系列课程包括如下的知识脉络:
- 架构设计分层实现
- 访问层架构知识
- API 网关层架构知识
- 核心服务层架构知识
- 数据存储及接入层知识
- 监控,限流,降级知识
学习收获
- 掌握主流互联网高性能后端服务平台的系统分层模型及设计思想;
- 掌握 Web 接入层负载均衡,前置缓存等设计技术;
- 掌握 Dubbo 服务治理、异步 MQ、任务调度、缓存、隔离队列等核心服务层设计技术;
- 掌握 Redis、SQL 数据库、NoSQL 数据库以及代理接入,分库分表等技术;
掌握服务监控、应急限流降级等相关技术。
架构设计分层实现
为什么分层
架构分层的主要目的:
- 分而治之
- 各司其职
- 有条不紊的结合
常见的分层设计:
- 计算机网络 OSI 七层模型
- Web 系统 MVC 模型分层设计
- 基于领域模型的分层设计
分层模型演进(Java)
分层模型v0.1时代:Servlet JSP 时代
模型步骤:
- Servlet+Tomcat 容器完成 Web 接入
- 使用 JavaBean+JDBC 完成数据层接入
- 使用 JSP 完成页面展示
分层模型v1.0时代:MVC 分层
分层:web 层、业务层、数据访问层、数据持久层
SSH 时代:
模型步骤:
- Structs 解决接入及表示层
- Spring 解决业务服务、事务处理、会话管理等问题
- Hibernate 解决数据存储接入问题
缺点:
- Hibernate:面对对象的过度封装在复杂的业务场景下缺乏灵活性;Java模型处理的状态跟数据库的状态做绑定。
- Structs:表示层过于复杂,每个请求对应一个 Action Servlet 类做实现。
- JSP:不符合前后端分离的趋势。
分层模型v1.5时代:SSM 时代
模型步骤:
- SpringMVC 解决接入及表示层
- Spring 解决业务服务、事务处理、会话管理等问题
- MyBatis 解决数据接入层
分层模型 v2.0 时代: SpringBoot all in one
优点:
- 整合了所有 Spring 的框架功能
- 提供了简单的配置及注解的接入方式
- 提供 All in one 的服务
缺点:
- 解决了单一应用内的软件分层,却没有解决整体应用的分层
- 单一应用性能瓶颈,无法支撑亿级流量
- 团队协作问题
参考:
分层模型 3.0 时代:分布式分层
特点:
- 水平扩展:增加节点数有效解决流量增加
- 负载均衡:流量均衡负载到可用服务器上
- 高可用
- 数据一致性:数据存储在分布式环境下的一致性
亿级流量平台分层架构
分布式分层
WEB 概念层:
业务概念层:
数据访问和存储层:
总结
- 访问层:用于 Web 接入、反向代理、负载均衡等
- 接口层:用于负责业务 API 网关处理
- 服务层:业务服务的核心处理模块,具备服务治理、调度、异步通信等核心服务能力
- 存储接入层:用于提供透明的存储结构的访问代理层
- 存储层:最终数据的落地及提供数据的能力
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。