架构初探

​ 前几天上了好几节字节的架构课,上的很懵逼,这里稍微总结一下,方便自己对企业架构有个大体的认识。

0 架构初识

0.1 什么是架构

​ 实现一个软件的方法论。

​ 没错,就是这么简单= =。百度一堆抽象的概念,但感觉架构就类似于地基。针对不同软件都有一种方法而已。

0.2 架构类型

单机

​ 软件就是指所有功能都实现在一个进程中,并部署在一台机器上。缺点显然是无法应对C10问题以及不易维护,大型项目难以多人开发等。

​ C10K problem,也即单机处理10k个并发连接的问题。随着epoll,kqueue等技术的不断发展。高性能网络编程逐渐回答了C10K问题。但在互联网飞速发展的今天,我们正陆续面临C10M、C10B等问题。也就是说,单体服务一定是有架构瓶颈的。

垂直架构

​ 按应用垂直切分的单体。优点就是水平扩容,运维不需要停服。缺点就是职责太多,开发效率不高。

image-20220523133555278.png

分布式架构

image-20220523133657813.png

​ 抽出业务无关的公共模块。优势是业务无关的独立服务;劣势在于服务模块bug会导致全站瘫痪,调用关系复杂

水平架构

​ SOA,微服务都属于这一种。微服务是SOA的去中心化演进方向

​ SOA

  1. 将应用的不同功能单元抽象为服务
  2. 定义服务之间的通信标准

​ 问题在于如何保证数据一致性,高可用,服务治理,解耦等。

image-20220523133902834.png
image-20220523133913637.png

0.3 企业后端架构

云计算

​ 通过软件自动化管理,提供计算资源的服务网络

基础:

  • 虚拟化技术——Docker
  • 编排技术——K8S

架构

  • IaaS

    ​ 基础设施即服务。也就是将硬件资源外包到其他公司。类似买云服务器。

  • PaaS

    ​ 平台即服务。也就是购买中间件,比如虚拟服务器和操作系统。

  • SaaS

    ​ 软件即服务。不需要考虑基础设施维护,只需要考虑软件的使用。类似WordPress

  • FaaS

    ​ 方法即服务。类似刷题网站,只需要提供实现函数,不需要关注中间执行流程。

云原生

image-20220523113858104.png

弹性资源类型(可扩容缩容)

  • 弹性计算资源调度
    • 在线计算——互联网后端服务
    • 离线计算——大数据分析
  • 存储资源
    • 经典
      • 对象存储
      • 大数据存储
    • 关系型数据库
    • 元数据
    • NoSQL

DevOps(驱动软件开发生命周期轮转)

  • 敏捷开发
  • CI/CD

image-20220523114930387.png

微服务架构

通信标准

  • HTTP(RESTful)
  • RPC(Thrift,gRPC)

image-20220523115100944.png

​ HTTP通信协议往往选择JSON其可读性更好,方便调试,所以服务的接入都是从HTTP请求发起,来源可能是各种客户端,而经过Gateway之后则使用rpc通信,因为其序列化协议往往有着更好的压缩率,如pbthrift。并且rpc中间件往往集成了丰富的服务治理能力:熔断、降级、超时等

服务网格

  • 微服务之间通信的中间层
  • 高性能网络代理
  • 业务代码与治理解耦

​ 相比较于RPC/HTTP框架

  • 异构系统治理统一化(例如不同系统可以用不同语言开发)
  • 与业务进程解耦,生命周期易管理

image-20220523115421796.png

0.4 后端架构的挑战

基础设施

  • 物理资源有限
  • 资源利用率

用户层面

  • 微服务之间网络通信开销大
  • 网络抖动导致运维成本高
  • 异构环境下,不同实例资源水位不均,如何合理分配资源

一些解决方案

离/在线资源并池(在线业务分时潮汐特性)

在线业务特点

  • IO密集型
  • 潮汐性,实时性

离线业务特点

  • CPU密集型
  • 非实时性

image-20220523133051684.png

微服务亲和性部署(调用关系紧密的服务部署在一台机器上,使用IPC代替RPC

image-20220523133118034.png

流量治理(微服务中间件&服务网格的流量治理)

屏蔽异构环境的算力差距(CPU水位负载均衡)

image-20220523133141533.png

1 微服务架构

1.1 核心要素

服务治理

  • 服务注册
  • 服务发现
  • 负载均衡
  • 扩缩容
  • 流量治理
  • 稳定性治理

可观测性

  • 日志采集
  • 日志分析
  • 监控打点
  • 监控大盘
  • 异常报警
  • 链路追踪

安全

  • 身份授权
  • 认证授权
  • 访问令牌
  • 审计
  • 传输加密
  • 黑产攻击

1.2 基本概念

​ 服务:一组运行相同逻辑的运行实体

​ 实例:一个服务中,每个运行实体即为一个实例

​ 实例与进程关系:一个实例可以对应一个或多个进程

​ 集群:服务内部的逻辑划分

image-20220523134559833.png

1.3 服务注册与发现

​ 增加一个统一的服务注册中心,用于存储服务名到服务实例的映射

image-20220523135207981.png

1.4 流量特征

  • 统一网关入口
  • 内网通信多数采用RPC
  • 网状调用链路

image-20220523135302626.png

2 总结

​ 本篇文章仅作对企业架构的了解而已,课上还讲了企业项目发布和服务治理(重试机制),这里就不细说了。虽然估计现在还很难用上,但至少扩宽了自己的视野吧。


架构初探
https://2w1nd.github.io/2022/05/23/架构初探/
作者
w1nd
发布于
2022年5月23日
许可协议