这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
一、架构是什么?
软件架构(Software Architecture)
有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。 --来自维基百科
系统是由一群关联个体的组成的,系统中的个体需要“根据某种规则”协作,架构需要明确这种协作规则。
架构=骨架、结构,来源于建筑学。前者揭示架构中内在的支撑物,后者则表明架构关心支撑物相互结合的某种构造方式。
为什么会出现架构设计?
主要可归纳为以下几个原因:
(1)业务需求多,而且易变
(2)软件系统越来越复杂
(3)参与的人越来越多
(4)跨项目共性/特殊性的问题越来越多
(5)技术发展日异月新
基于以上多种因素,导致系统维护成本越来越高:
(1)系统规模庞大、内部耦合严重,开发效率低;
(2)系统耦合严重,牵一发动全身,后续修改和扩展困难;
(3)系统逻辑复杂,容易出问题,出问题后很难排查和修复。
3、架构的目的是什么?
架构设计的目的是什么?
为了解决软件系统复杂度带来的问题。
其终极目标是:用最小的人力成本来满足构建和维护系统的需求。
架构设计的好处有哪些?
(1)做到心中有数,而不是一头雾水(“新手”架构师)
(2)有的放矢,而不是贪大求全(“老鸟”架构师)
企业级后端架构剖析
云计算
云计算基础:
-
虚拟化技术
硬件层面(VM 虚拟机)- KVM/Xen/VMware 操作系统层面(Container 容器)- LCX/Docker/Kata Container 网络层面 - Linux Bridge/Open v Switch -
编排方案
VM - OpenStack/VMWare Workstation Container - Kubernetes/Docker Swarm
云计算架构:
-
云服务
IaaS - 云基础设施,对底层硬件资源池的抽象 PaaS - 基于资源池抽象,对上层提供的弹性资源平台 SaaS - 基于弹性资源平台构建的云服务 FaaS - 更轻量级的函数服务。好比 LeetCode 等 OJ,刷题时只需要实现函数,不需要关注输入输出流 -
云部署模式(拓展)
私有云 - 企业自用 公有云 - AWS/Azure/Google Cloud/Huawei 混合云
云原生
云原生,实际是云原生(计算)的简称,它是云计算发展到现在的一种形态。
云原生技术为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。 它的代表技术:
弹性资源
微服务架构
DevOps
服务网格
弹性资源
弹性计算资源
服务器资源调度
计算资源调度
消息队列
弹性存储资源
经典存储
关系型数据库
元数据
NoSQL
存储资源和计算资源都是服务一样供用户使用
微服务架构
微服务架构下,服务之间的通讯标准是基于协议而不是 ESB 的。
HTTP - H1/H2
RPC - Apache Thrift/gRPC
如何在 HTTP 和 RPC 之间选择?
性能 - RPC 协议往往具备较好的压缩率,性能较高。如 Thrift, Protocol Buffers
服务治理 - RPC 中间件往往集成了丰富的服务治理能力。如 熔断、降级、超时等
可解释性 - HTTP 通信的协议往往首选 JSON,可解释性、可调试性更好