架构初探
前几天上了好几节字节的架构课,上的很懵逼,这里稍微总结一下,方便自己对企业架构有个大体的认识。
0 架构初识
0.1 什么是架构
实现一个软件的方法论。
没错,就是这么简单= =。百度一堆抽象的概念,但感觉架构就类似于地基。针对不同软件都有一种方法而已。
0.2 架构类型
单机
软件就是指所有功能都实现在一个进程中,并部署在一台机器上。缺点显然是无法应对C10问题以及不易维护,大型项目难以多人开发等。
C10K problem,也即单机处理10k个并发连接的问题。随着epoll,kqueue等技术的不断发展。高性能网络编程逐渐回答了C10K问题。但在互联网飞速发展的今天,我们正陆续面临C10M、C10B等问题。也就是说,单体服务一定是有架构瓶颈的。
垂直架构
按应用垂直切分的单体。优点就是水平扩容,运维不需要停服。缺点就是职责太多,开发效率不高。
分布式架构
抽出业务无关的公共模块。优势是业务无关的独立服务;劣势在于服务模块bug会导致全站瘫痪,调用关系复杂
水平架构
SOA,微服务都属于这一种。微服务是SOA的去中心化演进方向
SOA
- 将应用的不同功能单元抽象为服务
- 定义服务之间的通信标准
问题在于如何保证数据一致性,高可用,服务治理,解耦等。
0.3 企业后端架构
云计算
通过软件自动化管理,提供计算资源的服务网络
基础:
- 虚拟化技术——Docker
- 编排技术——K8S
架构
IaaS
基础设施即服务。也就是将硬件资源外包到其他公司。类似买云服务器。
PaaS
平台即服务。也就是购买中间件,比如虚拟服务器和操作系统。
SaaS
软件即服务。不需要考虑基础设施维护,只需要考虑软件的使用。类似WordPress
FaaS
方法即服务。类似刷题网站,只需要提供实现函数,不需要关注中间执行流程。
云原生
弹性资源类型(可扩容缩容)
- 弹性计算资源调度
- 在线计算——互联网后端服务
- 离线计算——大数据分析
- 存储资源
- 经典
- 对象存储
- 大数据存储
- 关系型数据库
- 元数据
- NoSQL
- 经典
DevOps(驱动软件开发生命周期轮转)
- 敏捷开发
- CI/CD
微服务架构
通信标准
- HTTP(RESTful)
- RPC(Thrift,gRPC)
HTTP通信协议往往选择JSON
,其可读性更好,方便调试,所以服务的接入都是从HTTP请求发起,来源可能是各种客户端,而经过Gateway之后则使用rpc通信
,因为其序列化协议往往有着更好的压缩率,如pb
、thrift
。并且rpc中间件往往集成了丰富的服务治理能力:熔断、降级、超时等
服务网格
- 微服务之间通信的中间层
- 高性能网络代理
- 业务代码与治理解耦
相比较于RPC/HTTP框架
- 异构系统治理统一化(例如不同系统可以用不同语言开发)
- 与业务进程解耦,生命周期易管理
0.4 后端架构的挑战
基础设施
- 物理资源有限
- 资源利用率
用户层面
- 微服务之间网络通信开销大
- 网络抖动导致运维成本高
- 异构环境下,不同实例资源水位不均,如何合理分配资源
一些解决方案
离/在线资源并池(在线业务分时潮汐特性)
在线业务特点
- IO密集型
- 潮汐性,实时性
离线业务特点
- CPU密集型
- 非实时性
微服务亲和性部署(调用关系紧密的服务部署在一台机器上,使用IPC
代替RPC
)
流量治理(微服务中间件&服务网格的流量治理)
屏蔽异构环境的算力差距(CPU水位负载均衡)
1 微服务架构
1.1 核心要素
服务治理
- 服务注册
- 服务发现
- 负载均衡
- 扩缩容
- 流量治理
- 稳定性治理
可观测性
- 日志采集
- 日志分析
- 监控打点
- 监控大盘
- 异常报警
- 链路追踪
安全
- 身份授权
- 认证授权
- 访问令牌
- 审计
- 传输加密
- 黑产攻击
1.2 基本概念
服务:一组运行相同逻辑的运行实体
实例:一个服务中,每个运行实体即为一个实例
实例与进程关系:一个实例可以对应一个或多个进程
集群:服务内部的逻辑划分
1.3 服务注册与发现
增加一个统一的服务注册中心,用于存储服务名到服务实例的映射
1.4 流量特征
- 统一网关入口
- 内网通信多数采用RPC
- 网状调用链路
2 总结
本篇文章仅作对企业架构的了解而已,课上还讲了企业项目发布和服务治理(重试机制),这里就不细说了。虽然估计现在还很难用上,但至少扩宽了自己的视野吧。