架构
软件整体结构与组件的抽象,用于指导软件系统各个方面的设计
- 单机:所有功能实现在一个进程里,并且部署在一台机器上
- 优点
- 简单
- 缺点
- 运维需要停服
- 优点
- 垂直应用 | 垂直切分
- 优点
- 水平扩容
- 运维不停服
- 缺点
- 职责太多,开发效率低
- 爆炸半径大
- 优点
- SOA (Service Oriented Architecture)
- 将应用的不同功能单位抽象为服务
- 定义服务之间的通信标准
- 挑战
- 数据一致性
- 高可用
- 治理
- 解耦 或 过微
总体上说,随着软件规模的增大,终归要进行切分,如此就有竖着切 or 横着切
云计算
云计算:通过软件自动化管理、提供计算资源的服务网络。是现在互联网大数据分析和存储的基石
- 基础
- 虚拟化技术
- 编排方案
- 架构
- IaaS (Infrasturcture as a Service)
- 基础资源
- 计算资源,虚拟机,存储空间等
- PaaS (Platfrom as a Service)
- 基础上更高层次的服务
- 开发环境,数据库,消息队列等
- SaaS (Software as a Service)
- 直接提供给用户使用的软件
- Office 365,Saleforce
- FaaS (Function as a Service)
- 以函数为单位对代码进行划分,并将其作为独立单元
- AWS Lambda, Azure Fucntion
- IaaS (Infrasturcture as a Service)
云原生
云原生,即 云计算原生的简称,是云计算发展到现在的一种形态
为公司在公有云、自由云、混合云等新兴动态环境中提供了构建可弹性扩展的应用
- 弹性资源
- 虚拟化容器
- 快速扩容
- 资源
- 计算资源
- 服务资源:微服务、大服务
- 计算资源:在线、离线
- 消息队列:在线、离线
- 存储资源
- 经典: 对象:宣传视频,大数据:用户消费记录
- 关系型数据库: 收银记录
- 元数据: 服务发现
- NoSQL:KV
- 计算资源
- 微服务架构
- 业务功能单元解耦
- 统一通信标准
- HTTP
- RPC
- 二者各有特点,HTTP可解释性高,RPC有压缩,传输效率更高
- 云原生场景下,微服务不必在业务逻辑中符合通信标准,而是将其交由框架来做
- DevOps
- 敏捷开发
- CI/CD
- 包括工作方式、理念、文化、工具等
- 各部门之间基于云上各类工具等可以进行更高效、紧密的合作从而实现更快速的迭代
- 网络网格
- 微服务之间的通信中间层
- 高性能网络代理
- 业务与治理解耦,生命周期易管理
- 异构系统统一化
挑战
- 基础设施层面
- 物理资源有限
- 机器、带宽
- 资源利用率受制于部署服务
- 物理资源有限
- 用户层面
- 网路通信开销大
- 网络抖动导致运维成本高
- 异构下,不同实例资源水位不均
离/在线资源并池
- 核心
- 降低物理成本
- 提供更多弹性资源
- 方案:离在线资源并池
- 在线业务特点
- IO密集
- 潮汐性,实时性
- 离线业务特点
- 计算密集型
- 非实时性
- 根据时间 动态调整 离/在线资源池
- 在线业务特点
自动扩缩容
- 核心
- 降低业务成本
- 自动扩缩容:利用在线业务潮汐性
- 挑战:扩缩容的指标/依据
微服务亲和性部署
- 核心
- 降低业务成本
- 提高服务可用性
- 微服务亲和部署
- 满足亲和条件的部署到 同一台机器上
- 将中间件与网格通过共享内存通信
流量治理
- 核心
- 提高微服务容错、容灾
- 进一步提高开发效率
- 解决思路
- 基于微服务的中间件
- 服务网格的流量治理
- 熔断、重试、单元化、复杂环境流量调度
CPU水位负载均衡
- 核心
- 打平异构环境的算力差异
- 自动扩缩容提供正向输入
- CPU水位负载均衡
- IaaS:提供资源探针
- 服务网格:动态负载均衡
实战
- CPU水位负载均衡
- 服务网格控制面,支持带权重的负载均衡
- 注册中心存储了所有容器的权重信息
- 自适应动态权重
- 采集宿主物理资源信息
- 调整容器注册权重
- 自适应动态权重
- 宿主机提供容器的资源使用情况、物理资源信息
- 服务网格上报RPC指标,处理极端场景
- 微服务化
- 引入消息队列削峰、解耦
- 离/在线链路切分
- 梳理强弱依赖
总的来说,架构、云原生确实无论是对于大型软件系统,还是小型软件系统都有很好的支持
- 对于服务的提供者
- 大大提升了设备的利用率
- 对于客户来讲
- 服务更加稳定、全面
- 基于云原生开发迭代速度更快
- 更能聚焦于业务,而非底层架构
因此对于目前情况而言,非核心业务(或者测试项目)考虑利用云原生技术来进行开发不失为一个可行有效的方案