这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记
什么是架构
架构是软件整体结构与组件的抽象描述,通俗点讲就是实现一个软件有很多种方法,但是架构在方法选择上起指导作用。
单机架构
所有的功能实现在一个进程里,并部署在一个机器上。优点是简单,缺点是运维需要停服,而且单机也会很容易受系统硬件的影响。
单体,垂直应用架构|垂直切分
分布式部署,将应用垂直切分,每一部分独立部署。优点是:方便水平扩容,运维不需要停服,但是缺点是一个应用的某一部分指责太多(全栈),开发效率低。
SOA,微服务架构|水平切分
SOA就是将不同的功能单元抽象为服务。定义服务之间的通信标准。 微服务架构就是SOA的去中心化演进方向。
问题:
- 数据一致性
- 如何实现高可用
- 服务治理,如果服务出现异常怎么办?
- 解耦和以及过于追求微服务的微。
云原生
通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模数据分析和存储的基石。
弹性计算资源类型:服务资源调度,计算资源调度,消息队列。
弹性存储资源类型:
- 经典的对象存储,大数据存储
- 关系型数据库
- 元数据,服务发现
- Nosql
微服务架构
服务网格
为服务之间通讯的中间层,高性能的网络代理,业务代码与服务治理解耦。相比于http/rpc框架,服务网格将异构系统治理统一化,与业务进程解耦,生命周期易于管理
企业级沟段架构的挑战
基础设施层面的问题:物理资源比如机器,带宽有限。资源利用率受制于部署服务。 用户层面的问题:网络通信开销大,网络抖动导致运维成本高,异构环境下,不同实例资源水位不均。
离在线资源并池
在线业务是IO密集为主并且具有潮汐性,实时性。而离线业务计算密集型的占多数并且非实时。基于上述特点提出了一种解决思路:离在线资源并池。
核心收益:降低物理成本和提供更多的弹性资源以增加收益(开源节流)
问题是:如何在同一个机器上做离在线隔离?
自动扩缩容
利用在线业务的潮汐性,自动扩缩容。降低业务成本。
问题是依据什么指标扩缩容?
微服务亲和性部署
核心收益:降低业务成本,提高服务可用性。
思路:
- 将满足亲和性条件的容器调度到一台宿主机
- 微服务中间件与服务网格通过共享内存通信。
- 服务网格控制面实施灵活,动态的流量调度。
流量治理
核心收益:提高微服务调用容错性,容灾,进一步提高开发效率
思路:基于微服务中间件和服务网格流量治理。熔断,重试,单元化,复杂环境的流量调度。
CPU水位负载均衡
核心收益:打平异构环境算力差异,为自动扩所容提供正向输入 思路:提供资源探针(IaaS),服务网格
最后
没有最好的架构,只有最适合的架构,架构没有银弹
如何做好架构设计?
- 需求先行
- 业界调研
- 技术选型
- 异常情况