什么是架构
架构又称软件架构,是有关软件整体结构与组件的抽象描述,可以简单理解为软件设计和开发的方法论。
1.单机架构
单机架构就是把所有功能都实现在一个进程中,并部署在一台机器上。(一般只适合出现在预研或初创阶段)
- 优点:是非常简单
- 缺点:是会遇到并发处理的难题,而且运维需要停服。
2.单体、垂直应用|垂直切分
单体架构:分布式部署,在单机架构基础上把进程部署在多个机器上,并引入负载均衡层,经过垂直切割成为单体构架。
垂直应用架构:按应用垂直切分。在单体架构基础上,将不同应用的代码从之前一个大进程中拆分出来成为垂直应用架构。
- 优点:水平扩容,运维不需要停服
- 问题:职责太多,开发效率不高,爆炸半径大
3.SOA、微服务|水平切分
SOA(Service-Oriented Architecture)的两个特性:
- 将应用的不同功能单元抽象为服务
- 定义服务之间的通信标准
微服务架构是SOA的去中心化演进方向,旨在减少服务之间的沟通消耗,避免SOA服务内部集中沟通导致的过度中心化问题,他实现了水平切分,减少了跨级别调用链,让每个服务直接负责的上下级减少。
问题:
- 数据一致性问题:不同服务如何确保数据同步
- 高可用问题:服务之间如何进行可靠合作
- 治理问题:一个服务出现问题时,要如何容灾
- 解耦和过微问题:过度细分会导致运维成本提高,要如何权衡?
# 企业级后端架构剖析
云计算技术
云计算是指通过软件自动化管理,提供计算资源的服务网络,是现在互联网大规模数据分析和存储的基石。
基础:
- 虚拟化技术:硬件(虚拟机),操作系统(容器),网络
- 编排方案:虚拟机编排方案(OpenStack),容器编排方案(Kubernetes)
架构:
- 基础设施即服务IaaS(Infrastructure as a Service)
- 平台即服务PaaS(Platform as a Service)
- 软件即服务Saas(Software as a Service)
- 函数即服务FaaS(Function as a service)
云原生
云原生技术为组织(公司)在公有云,自由云,混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。
代表技术有:
- 容器化
- 服务网络
- 微服务
- 不可变基础架构
- 声明式API
弹性计算资源
- 服务资源调度:微服务、大服务资源
- 计算资源调度:在线、离线资源
- 消息队列:和计算资源调度类似,提供海量的数据吞吐和大数据分析能力。
弹性存储资源
云原生让用户可以将存储资源看作服务,寻找对应的服务来满足自己的存储需求。
- 经典存储:对象存储、大数据记录存储。
- 关系型数据库:业务记录存储。
- 元数据:提供服务发现能力
- NoSQL:key-value存储,实现缓存和分布式事务。
DevOps
DevOps贯穿整个软件开发周期,使用一系列自动化流程,提高软件开发、交付的效率。DevOps提供了敏捷开发、持续集成/交付(CI/CD)的能力。
微服务架构
微服务架构实现业务功能单元的解耦,同时提供一套统一的通信标准确保服务之间的数据流通。
微服务通信标准是HTTP(RESTful API)和RPC(Thrift, gRPC)
服务网络
- 微服务之间通讯的中间层
- 高性能网络代理
- 业务代码与治理解耦
相比于RPC/HTTP框架:
- 异构系统治理统一化
- 与业务进程解耦,生命周期易管理
企业级后端架构的挑战
- 基础设施层面:物理资源有限(机器、带宽)资源利用率受限于部署服务
- 用户层面:网络通信开销大;网络抖动导致运维成本提高;异构环境下,不同实例资源水位不均衡
1.离在线资源并池
核心收益:
- 降低物理资源成本
- 提供更多的弹性资源,增加收入
解决思路: 离在线资源并池
在线业务特点:IO密集型为主;潮汐性、实时性
离线业务特点:计算密集型占多数;非实时性
2.自动扩缩容
核心收益:降低业务成本
解决思路:自动扩缩容,利用在线业务潮汐性自动扩缩容
扩缩容依据的指标:CPU或者内存的指标
3.亲和性部署
核心收益:降低业务成本;提高服务可用性;
解决思路:
- 将满足亲和性条件的容器调度到一台宿主机
- 微服务中间件与服务网格通过共享内存通信
- 服务网格控制面实施灵活、动态的流量调度
4.流量治理
核心收益:
- 提高微服务调用容错性
- 容灾
- 进一步提高开发效率,DevOps发挥到极致
解决思路:基于微服务中间件&服务网格的流量治理
- 熔断、重试
- 单元化
- 复杂环境(功能、预览)的流量调度
5.CPU水位负载不均衡
核心收益:
- 大平以后环境算力差异
- 为自动扩缩容提供正向输入
解决思路:CPU 水位负载均衡
- IaaS:提供资源探针
- 服务网格:动态负载均衡