快速理解复杂系统组成学习内容整合

目录

一、复杂系统组成

二、接入系统 (Access System)

三、应用系统 (Application System)

四、基础平台 (Foundation Platform)

五、中间件 (Abundant External Middleware)

六、支撑系统 (Supporting System)

参考文章


一、复杂系统组成

复杂系统是由多个相互关联、相互作用的组件组成的大型系统,通过这些组件的协同工作来完成特定的任务或提供特定的服务。在设计复杂系统时,通常会考虑以下五个关键模块,具体如下:

快速理解复杂系统组成学习内容整合_第1张图片

简单介绍如下:

模块 定义 例子
接入系统 (Access System) 系统与外部世界进行交互的入口,负责处理外部请求、验证身份、收集输入等。 用户界面、API端点、外部传感器等
应用系统 (Application System) 整个系统的核心,负责处理业务逻辑、执行特定功能和任务,包括系统的主要功能和算法。 业务逻辑、数据处理、核心功能模块等
基础平台 (Foundation Platform) 提供支持应用系统运行的底层基础设施,包括硬件、操作系统、数据库管理系统等。 服务器、存储系统、操作系统、数据库等
大量外部的中间件 (Abundant External Middleware) 连接和协调系统不同组件的软件层,系统依赖于多种外部工具和服务,用于增强功能、提高性能或满足特定需求。 消息队列、缓存系统、身份验证服务、监控工具等
支撑系统 (Supporting System) 包括维护和管理整个系统所需的各种支持服务,如日志记录、监控、安全性、备份等。 日志系统、监控系统、安全系统、备份系统等

二、接入系统 (Access System)

接入系统,它负责接收用户的请求,然后把用户的请求分发到某个Web服务器进行处理,接入系统主要包括DNS域名解析、负载均衡、Web服务器这些组件。

想象一个在线购物平台,用户在浏览器中输入商店的域名,触发了以下过程:

  1. DNS域名解析: 用户的域名通过DNS解析得到相应的IP地址,确定了在线购物平台的服务器位置。

  2. 负载均衡: 用户的请求到达后,负载均衡器检测当前各个Web服务器的负载情况,并将请求分发给最空闲的服务器,确保各服务器能够均衡处理流量。

  3. 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)

应用系统是整个系统的核心,负责处理业务逻辑、执行特定功能和任务,包括系统的主要功能和算法。

构建一个成功的应用系统需要考虑多个方面,具体要根据你的应用系统的性质和目标来调整。在整个开发过程中,与团队合作、进行测试以及定期审查进展。

出发点点上起吗应该具备:

  1. 明确目标和用户需求: 在开始开发之前,确保清楚你的应用系统的目标是什么,以及你的目标用户是谁。了解用户需求,确保你的应用系统解决了真实的问题或提供了有价值的服务。

  2. 用户体验设计(UX): 设计一个直观、易用的界面,确保用户能够轻松地理解和操作你的应用系统。注重用户体验可以提高用户留存率和满意度。鼓励用户提供反馈,并在可能的情况下积极采纳用户建议。

  3. 性能、稳定性可扩展性: 确保你的应用系统具有良好的性能和稳定性。优化代码、数据库查询以及其他关键流程,以确保用户在使用过程中不会遇到延迟或崩溃。考虑到应用系统的未来发展,设计具有良好可扩展性的架构。

  4. 安全性、合规性: 保护用户数据和隐私是至关重要的。采取适当的安全措施,包括加密通信、身份验证和授权机制,以防止潜在的攻击和数据泄露。确保你的应用系统符合法规和行业标准,特别是涉及用户数据和隐私的方面。

  5. 多平台兼容性: 如果可能,考虑设计一个可以在不同平台上运行的应用系统,例如Web、移动端和桌面。这有助于扩大用户基础。

  6. 数据管理和分析: 实施有效的数据管理和分析功能,以便了解用户行为、应用性能和其他关键指标。助于做出基于数据的决策,并不断改进你的应用系统。

在技术方面,选择合适的技术架构和实现方式,要保持灵活性,不断关注技术发展趋势,以确保应用系统始终采用最新、最适合的技术,随时适应变化的需求。比如:

  1. 合适的技术栈、前后端分离: 根据应用系统的需求和目标选择合适的技术栈。考虑到性能、可维护性、开发速度等因素,选择适合项目的编程语言、数据库、框架等技术。采用前后端分离的架构,例如使用RESTful API或GraphQL,可以使前端和后端独立开发、测试和维护,提高团队的灵活性。

  2. 微服务架构、云服务: 如果应用系统规模较大或有复杂的业务逻辑,考虑使用微服务架构可以使系统更容易扩展、部署和维护,并促使团队更好地分工合作。同样考虑使用云服务提供商,如AWS、Azure或Google Cloud等,以便更好地管理基础设施、提高可伸缩性,并受益于云服务的弹性和安全性。

  3. 容器化和编排: 使用容器技术,如Docker,并考虑使用容器编排工具,如Kubernetes,以简化应用部署、管理和维护。

  4. 自动化测试和持续集成/持续交付(CI/CD): 实施全面的自动化测试,包括单元测试、集成测试和端到端测试,以确保代码质量。采用CI/CD流程,实现自动化的构建、测试和部署,提高交付速度和可靠性。

待看的开源项目和文献,后期可以学习:

  • Django: 一个用于构建Web应用的Python框架。
  • Ruby on Rails: 一个用于构建Web应用的Ruby框架。
  • Spring Boot: 一个用于构建Java应用的框架。

四、基础平台 (Foundation Platform)

基础平台:首先是各个语言的运行时,比如说JVM;然后是容器或虚拟机;下面还有操作系统;最底下就是硬件和网络。

  1. 运行时环境: 运行时环境包括各种编程语言的运行时,例如Java Virtual Machine (JVM)、Node.js、.NET Common Language Runtime (CLR)等。每个运行时环境负责解释和执行相应编程语言的代码。

  2. 容器或虚拟机: 容器和虚拟机提供了隔离和虚拟化的环境,使得应用程序可以在独立的容器或虚拟机中运行,而不受外部环境的影响。这有助于确保应用程序在不同环境中的一致性和可移植性。

  3. 操作系统: 操作系统是基础平台的核心组成部分,负责管理硬件资源,提供基本的系统服务,以及为应用程序提供一个抽象的运行环境。常见的操作系统包括Linux、Windows Server等。

  4. 硬件和网络: 这是基础平台的底层,包括服务器、存储设备、网络设备等。硬件提供计算、存储和网络资源,是应用系统正常运行的物理基础。

这部分的学习基本都是基础课程,一些基本学习资料可以后期在看看:

  • 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)

中间件在软件架构中发挥着重要而不可忽视的作用。它们通常充当系统中不同组件之间的连接和协调层,提供了一些关键的功能,对于构建可靠、高性能、可扩展的应用系统至关重要。虽然在系统设计中增加中间件会引入一定的复杂性,但在大多数情况下,它们为系统带来的好处远远超过了引入的复杂性。主要的学习架构如下:

快速理解复杂系统组成学习内容整合_第2张图片

快速理解复杂系统组成学习内容整合_第3张图片

六、支撑系统 (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.

你可能感兴趣的:(系统架构等思考,系统架构)