1. 什么是架构
架构,又称软件架构。是有关软件整体结构,组件以及组件之间的通讯的抽象描述。用于指导软件系统各方面的设计。 常见的软件架构有:
- 分层架构(layered architecture)。将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。层与层之间通过接口通信。四层分层结构最为常见,从上至下依次是:表现层、业务层、持久层和数据库层。
- 事件驱动架构(event-driven architecture)。通过事件进行通信的软件架构。分成四个部分:事件队列、分发器、事件通道和事件处理器。
- 微核架构(microkernel architecture)又称为"插件架构"(plug-in architecture),指的是软件的内核相对较小,主要功能和业务逻辑都通过插件实现。
- 微服务架构(microservices architecture)是服务导向架构(service-oriented architecture,缩写 SOA)的升级。每一个服务就是一个独立的部署单元(separately deployed unit)。这些单元都是分布式的,互相解耦,通过远程通信协议(比如REST、SOAP)联系。
- 云结构(cloud architecture)主要解决扩展性和并发的问题,是最容易扩展的架构。
2.蛋糕店的架构演变
- 单机架构:蛋糕店的所有功能实现在一个进程中,并部署在一台机器上。
- 优点:简单
- 问题:a)C10K Problem:服务器如何支持10K并发连接问题。本质是操作系统问题。解决方法主要为IO多路复用。b)运维需要停服。
- 单体架构:将多个单机架构应用分布式部署到多个机器上。提高服务能力并解决了运维停机问题。
- 垂直切分:更进一步的,使用垂直切分理念对架构进行改进。将单机架构的不同功能进行初步拆分。
- 优点:水平扩容
- 缺点:每个功能职责仍然太多,开发效率不高。爆照半径大,进程中模块出现问题,可能导致整个进程崩溃。
- SOA架构与微服务:将应用的不同功能单元抽象为服务。定义服务之间的通行标准。微服务架构:SOA的去中心化演进方向。
- 问题:数据一致性、高可用、治理与容灾、服务划分过维。
3.企业级后端架构
- 云计算:通过软件自动化管理,提供计算资源和服务网络,是现代互联网大规模数据分析和存储的基石。
- 基础:虚拟化技术和软件编排方案。
- 架构:
-
IaaS - 架构即服务,对底层硬件资源池的抽象。相当于扩展蛋糕店时选择了房屋租赁平台。
-
PaaS - 平台即服务,基于资源池抽象,对上层提供的弹性资源平台。在蛋糕店的装修时选择装修公司。
-
SaaS - 软件即服务,由云提供商开发和维护云应用软件,提供自动软件更新,并通过互联网以即用即付费的方式将软件提供给客户。相当于雇佣培训过的蛋糕师傅。
-
FaaS - 功能即服务。
-
- 云原生
云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。现代企业希望构建高度可扩展、灵活且具有弹性的应用程序,可以快速更新以满足客户需求。为此,他们使用现代工具和技术,这些工具和技术本质上支持云基础设施上的应用程序开发。这些云原生技术支持快速、频繁地更改应用程序,而不会影响服务交付,从而为采用者提供了创新的竞争优势。
云原生的应用架构:
- 不可变基础设施
不可变基础设施意味着用于托管云原生应用程序的服务器在部署后保持不变。如果应用程序需要更多计算资源,则会丢弃旧服务器,并将应用程序移至新的高性能服务器。通
- 微服务
微服务是小型的独立软件组件,它们作为完整的云原生软件共同运行。每个微服务都侧重于一个小而具体的问题。微服务是松散耦合的。
- API
应用程序编程接口(API)是两个或多个软件程序用来交换信息的方法。云原生系统使用 API 将松散耦合的微服务整合在一起。
- 服务网格
服务网格是云基础设施中的一个软件层,用于管理多个微服务之间的通信。开发人员使用服务网格来引入其他功能,而无需在应用程序中编写新代码。
- 容器
容器是云原生应用程序中最小的计算单元。它们是将微服务代码和其他必需文件打包在云原生系统中的软件组件。通过容器化微服务,云原生应用程序独立于底层操作系统和硬件运行。