目录
一、复杂系统组成
二、接入系统 (Access System)
三、应用系统 (Application System)
四、基础平台 (Foundation Platform)
五、中间件 (Abundant External Middleware)
六、支撑系统 (Supporting System)
参考文章
一、复杂系统组成
复杂系统是由多个相互关联、相互作用的组件组成的大型系统,通过这些组件的协同工作来完成特定的任务或提供特定的服务。在设计复杂系统时,通常会考虑以下五个关键模块,具体如下:
简单介绍如下:
模块 | 定义 | 例子 |
---|---|---|
接入系统 (Access System) | 系统与外部世界进行交互的入口,负责处理外部请求、验证身份、收集输入等。 | 用户界面、API端点、外部传感器等 |
应用系统 (Application System) | 整个系统的核心,负责处理业务逻辑、执行特定功能和任务,包括系统的主要功能和算法。 | 业务逻辑、数据处理、核心功能模块等 |
基础平台 (Foundation Platform) | 提供支持应用系统运行的底层基础设施,包括硬件、操作系统、数据库管理系统等。 | 服务器、存储系统、操作系统、数据库等 |
大量外部的中间件 (Abundant External Middleware) | 连接和协调系统不同组件的软件层,系统依赖于多种外部工具和服务,用于增强功能、提高性能或满足特定需求。 | 消息队列、缓存系统、身份验证服务、监控工具等 |
支撑系统 (Supporting System) | 包括维护和管理整个系统所需的各种支持服务,如日志记录、监控、安全性、备份等。 | 日志系统、监控系统、安全系统、备份系统等 |
二、接入系统 (Access System)
接入系统,它负责接收用户的请求,然后把用户的请求分发到某个Web服务器进行处理,接入系统主要包括DNS域名解析、负载均衡、Web服务器这些组件。
想象一个在线购物平台,用户在浏览器中输入商店的域名,触发了以下过程:
-
DNS域名解析: 用户的域名通过DNS解析得到相应的IP地址,确定了在线购物平台的服务器位置。
-
负载均衡: 用户的请求到达后,负载均衡器检测当前各个Web服务器的负载情况,并将请求分发给最空闲的服务器,确保各服务器能够均衡处理流量。
-
Web服务器: 最终,用户的请求到达Web服务器,该服务器处理并返回相应的页面,展示给用户。如果有大量用户同时访问,负载均衡器会根据负载情况动态调整分发策略,确保整个系统的稳定性和性能。
其中简单的技术点可能如下:
阶段 | 技术实现 | 实现方案 |
---|---|---|
DNS域名解析 | - 使用专业的DNS解析服务提供商或自建DNS服务器。 | - 采用Anycast技术,将DNS服务器分布在全球,提高解析速度。 |
负载均衡 | - 使用专业的负载均衡设备或软件(如Nginx、HAProxy)。 | - 采用轮询或基于权重的算法,确保每个Web服务器均衡处理流量。 |
Web服务器 | - 高性能的Web服务器(如Nginx、Apache)。 | - 使用多台Web服务器构建集群,确保高峰时期的大量用户请求。 |
- 应用服务器(如Tomcat、Node.js)处理动态内容。 | - 使用自动伸缩技术,根据实时负载动态调整服务器数量。 | |
- CDN缓存静态资源,减轻服务器压力。 | - 使用缓存技术,提高系统的响应速度。 | |
安全性和高可用性 | - SSL证书、HTTPS协议保障用户数据传输安全。 | - 使用防火墙、IDS等安全措施,确保系统的安全性。 |
- 备份和灾备系统跨可用区和跨地理区域部署。 | - 使用Web应用防火墙(WAF)进行Web应用层攻击防御。 |
三、应用系统 (Application System)
应用系统是整个系统的核心,负责处理业务逻辑、执行特定功能和任务,包括系统的主要功能和算法。
构建一个成功的应用系统需要考虑多个方面,具体要根据你的应用系统的性质和目标来调整。在整个开发过程中,与团队合作、进行测试以及定期审查进展。
出发点点上起吗应该具备:
-
明确目标和用户需求: 在开始开发之前,确保清楚你的应用系统的目标是什么,以及你的目标用户是谁。了解用户需求,确保你的应用系统解决了真实的问题或提供了有价值的服务。
-
用户体验设计(UX): 设计一个直观、易用的界面,确保用户能够轻松地理解和操作你的应用系统。注重用户体验可以提高用户留存率和满意度。鼓励用户提供反馈,并在可能的情况下积极采纳用户建议。
-
性能、稳定性可扩展性: 确保你的应用系统具有良好的性能和稳定性。优化代码、数据库查询以及其他关键流程,以确保用户在使用过程中不会遇到延迟或崩溃。考虑到应用系统的未来发展,设计具有良好可扩展性的架构。
-
安全性、合规性: 保护用户数据和隐私是至关重要的。采取适当的安全措施,包括加密通信、身份验证和授权机制,以防止潜在的攻击和数据泄露。确保你的应用系统符合法规和行业标准,特别是涉及用户数据和隐私的方面。
-
多平台兼容性: 如果可能,考虑设计一个可以在不同平台上运行的应用系统,例如Web、移动端和桌面。这有助于扩大用户基础。
-
数据管理和分析: 实施有效的数据管理和分析功能,以便了解用户行为、应用性能和其他关键指标。助于做出基于数据的决策,并不断改进你的应用系统。
在技术方面,选择合适的技术架构和实现方式,要保持灵活性,不断关注技术发展趋势,以确保应用系统始终采用最新、最适合的技术,随时适应变化的需求。比如:
-
合适的技术栈、前后端分离: 根据应用系统的需求和目标选择合适的技术栈。考虑到性能、可维护性、开发速度等因素,选择适合项目的编程语言、数据库、框架等技术。采用前后端分离的架构,例如使用RESTful API或GraphQL,可以使前端和后端独立开发、测试和维护,提高团队的灵活性。
-
微服务架构、云服务: 如果应用系统规模较大或有复杂的业务逻辑,考虑使用微服务架构可以使系统更容易扩展、部署和维护,并促使团队更好地分工合作。同样考虑使用云服务提供商,如AWS、Azure或Google Cloud等,以便更好地管理基础设施、提高可伸缩性,并受益于云服务的弹性和安全性。
-
容器化和编排: 使用容器技术,如Docker,并考虑使用容器编排工具,如Kubernetes,以简化应用部署、管理和维护。
-
自动化测试和持续集成/持续交付(CI/CD): 实施全面的自动化测试,包括单元测试、集成测试和端到端测试,以确保代码质量。采用CI/CD流程,实现自动化的构建、测试和部署,提高交付速度和可靠性。
待看的开源项目和文献,后期可以学习:
- Django: 一个用于构建Web应用的Python框架。
- Ruby on Rails: 一个用于构建Web应用的Ruby框架。
- Spring Boot: 一个用于构建Java应用的框架。
四、基础平台 (Foundation Platform)
基础平台:首先是各个语言的运行时,比如说JVM;然后是容器或虚拟机;下面还有操作系统;最底下就是硬件和网络。
-
运行时环境: 运行时环境包括各种编程语言的运行时,例如Java Virtual Machine (JVM)、Node.js、.NET Common Language Runtime (CLR)等。每个运行时环境负责解释和执行相应编程语言的代码。
-
容器或虚拟机: 容器和虚拟机提供了隔离和虚拟化的环境,使得应用程序可以在独立的容器或虚拟机中运行,而不受外部环境的影响。这有助于确保应用程序在不同环境中的一致性和可移植性。
-
操作系统: 操作系统是基础平台的核心组成部分,负责管理硬件资源,提供基本的系统服务,以及为应用程序提供一个抽象的运行环境。常见的操作系统包括Linux、Windows Server等。
-
硬件和网络: 这是基础平台的底层,包括服务器、存储设备、网络设备等。硬件提供计算、存储和网络资源,是应用系统正常运行的物理基础。
这部分的学习基本都是基础课程,一些基本学习资料可以后期在看看:
- Coursera - Operating Systems: Three Easy Pieces: 理解操作系统基本概念基础课程;
- Docker Documentation: Docker 官方文档,容器化信息学习基础;
- Kubernetes Documentation: Kubernetes 官方文档,学习容器编排基础;
- The Java™ Tutorials: Oracle 提供的 Java 官方教程,算Java基础了;
-
"Computer Organization and Design: The Hardware/Software Interface" by David A. Patterson and John L. Hennessy.
- "Computer Networking: Principles, Protocols and Practice" by Olivier Bonaventure.
五、中间件 (Abundant External Middleware)
中间件在软件架构中发挥着重要而不可忽视的作用。它们通常充当系统中不同组件之间的连接和协调层,提供了一些关键的功能,对于构建可靠、高性能、可扩展的应用系统至关重要。虽然在系统设计中增加中间件会引入一定的复杂性,但在大多数情况下,它们为系统带来的好处远远超过了引入的复杂性。主要的学习架构如下:
六、支撑系统 (Supporting System)
在大型应用系统中,这些支撑系统往往是构建和运营复杂系统不可或缺的组成部分。它们确保了系统的可靠性、安全性、可维护性和高效性。
支撑系统 | 功能 | 常见工具 |
---|---|---|
日志系统 | 收集、存储和分析系统生成的日志,用于故障排查、性能监控、安全审计等 | ELK Stack(Elasticsearch, Logstash, Kibana)、Splunk、Fluentd |
配置系统 | 管理应用程序的配置信息,支持动态配置更新,确保系统配置的一致性和可变性 | Spring Cloud Config、Consul、etcd |
运维系统 | 提供系统的运维和管理功能,包括监控、自动化部署、资源调度、性能优化等 | Kubernetes、Docker Swarm、Ansible、Chef、Puppet |
监控系统 | 实时监控系统的性能指标、日志、错误和异常,帮助及时发现和解决问题 | Prometheus、Grafana、Nagios、Datadog |
安全系统 | 确保系统的安全性,包括身份认证、访问控制、加密、漏洞扫描等 | OAuth、JWT、Firewall、WAF(Web Application Firewall) |
参考文章
1.架构实战案例解析_架构案例_后端架构-极客时间
2.【系统】系统-CSDN博客
3.一文正确理解 分层架构系统 的接入层设计,以及接入层设计常见的问题和解决方案(雪崩、降级、限流、熔断)_业务接入层-CSDN博客
4.Middleware 入门指南:到底什么是中间件?
5.一文带你读懂中间件-腾讯云开发者社区-腾讯云
6.01|中间件生态(上):有哪些类型的中间件? - 知乎
7.中间件核心技术与实战_中间件_丁威_架构_数据库中间件_Redis_MyCat_中通_架构师_-极客时间
8.SOFA中间件包含哪些产品_金融分布式架构(SOFAStack)-阿里云帮助中心
9.
10.
11.
12.
13.
14.
15.