一.架构的定义
所谓软件架构,指的是软件系统的整体结构,包括软件子元素,这些元素的外部属性以及元素元素之间的关系。
单机架构:把所有功能都实现在一个进程里,并部署一台机器上
单体架构:分布式部署
垂直应用架构:按应用垂直切分的单体
SOA: 1.将应用的不同功能单元抽象为服务 2.定义服务之间的通信标准
微服务架构:SOA的去中心化演进方向
小结:
- 需求量越大,终归要增加人手
- 越做越复杂,终归要分工合作
二.企业级后端架构剖析
1.云计算:
是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模数据分析和存储的基石。
基础:
- 虚拟化技术-整租vs合租
- 编排方式-业主vs租赁平台
架构:
- LaaS(infrastructure as a service) 买房子vs房屋租赁平台
- PaaS(platform as a service) 清包vs全包
- SaaS(software as a service) 从零培训vs雇佣培训过的师傅
- FaaS(function as a service) 纯手工制作vs批量生产
2.云原生:
为组织在公有云、自由云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。
弹性计算资源类型:
- 服务资源调度
- 计算资源调度
- 消息队列
弹性存储资源类型:
- 经典
- 关系型数据库
- 元数据
- NoSQL
DevOps: 是云原生时代软件交付的利器,贯穿整个软件开发周期。
微服务架构通信标准:HTTP(RESTful API)、RPC(Thrift gRPC)
服务网格:
- 微服务之间通讯的中间层
- 高性能网络代理
- 业务代码与治理解耦
相比较于RPC/HTTP框架:
- 异构系统治理统一化
- 与业务进程解耦,生命周期易管理
三.企业级后端架构的挑战
解决思路一:离在线资源并池
核心收益:降低物流资源成本;提供更多的弹性资源,增加收入
在线业务的特点:
- IO密集型为主
- 潮汐性、事实性
离线业务特点:
- 计算密集型占多数
- 非实时性
解决思路二:自动扩缩容
- 利用潮汐性自动扩缩容
核心收益:降低业务成本
解决思路三:微服务亲合性部署
- 将满足亲和性条件的容器调度到一台宿主机
- 微服务中间件与服务网格通过共享内存通信
- 服务网格控制面实施灵活、动态的流量调度
核心收益:降低业务成本、提高服务可用性
解决思路四:流量治理
- 熔断、重试
- 单元化
- 复杂环境(功能、预览)的流量调度
核心收益:提高微服务调用容错性、进一步提高开发率
解决思路五:CPU水位负载均衡
- LaaS 提供资源探针
- 服务网格 动态负载均衡
核心收益:打平异构环境算力差异、为自动扩缩提供正向输入
总结:
软件架构是软件开发过程中一个重要的环节,是制定整个系统的核心。软件架构的设计工程要重视可扩展性、统一标准规范、性能和安全等方面。在实际工作中,应根据实际情况采用最合适的架构设计方式,确保系统稳定性和质量,提高开发的效率。