架构初探| 青训营笔记

116 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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,可解释性、可调试性更好