这是我参与「第五届青训营 」伴学笔记创作活动的第7天。
架构初探
本节课主要分为四个部分,分别是:什么是架构;企业级后端架构刨析;企业级后端架构的挑战;后端架构实践。
架构的定义
架构,又称为软件架构,是关于软件整体结构与组件的抽象描述,用于指导软件系统各方面的设计。
软件系统需要具备对外的服务,单机,就是把所有的功能都实现在一个进程中,并部署在一台机器上。
采取这种方法的优点是简单,缺点是存在C1OK 问题,如果维护需要停服。
架构划分
单体架构、垂直应用架构。
单体架构:采用分布式部署。
垂直应用架构:按照应用垂直切分的单体。
优点为:水平扩容,运维不需要停服维护。
问题为:职责太多,开发效率并不高,同时爆炸半径大。
如何提高做蛋糕的效率? 采用分工协作的方式。
架构-SOA、微服务
SOA是将应用的不同功能单元抽象为服务;定义服务之间的通信标准
微服务架构是SOA的去中心化演进方向。
问题:数据一致性;高可用性;治理;解耦与过微的权衡。
架构的演进过程:需求量越来越大,需要增加人手;系统越来越复杂需要分工合作。
架构演进的思路:垂直切分与水平切分。
企业级后端架构剖析
云计算
云计算是指通过软件自动化管理,提供计算资源的服务网络,是现在互联网大规模熟悉分析和存储的基石。
基础:
虚拟化技术 - 整租 vs 合租
编排方案 – 业主 vs 租赁平台
架构
- IaaS(Infrasturcture as a Service)
- PaaS(Platform as a Service)
- SaaS(Software as a Service)
- FaaS(Function as a Service)
云原生
云原生技术为组织在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性扩展的应用提供了可能。 弹性计算资源类型:
服务资源调度:微服务:核心量小、大服务:核心量大。
计算资源调度:在线、离线
消息队列:在线、离线
弹性存储资源:
- 对象
- 关系型数据库
- 元服务
- NoSQL
DevOps
DevOps是云原生时代软件交付的利器,能够结合自动化流程,提高软件开发、交付效率。
微服务架构
通信标准包括HTTP与RPC。
云原生场景下,微服务不需要在业务逻辑中实现符合通信标准的交互逻辑,这些内容可以交给框架来做。
服务网络
服务网络:为微服务之间通信的中间层、高性能网络代理、业务代码与治理相解耦。
相较于RPC/HTTP框架来说:异构系统治理统一化,与业务进程解耦,生命周期更易管理。
企业级后端架构的挑战
后端架构存在的问题
在基础设施层面:物理资源优先;资源利用率受限于部署的服务。
在用户层面:网络通信开销比较大;网络抖动导致运维成本提高,异构环境之下,不通事理资源水位分布不均。
离在线资源并池
收益:降低物理资源的成本,提供更多的弹性资源,从而增加收入,解决思路为离在线资源并池。 · 在线业务的特点:IO密集型;潮汐性、实时性。 · 离线业务的特点:计算密集型,非实时性。
自动扩缩容
收益:降低业务成本
解决思路:
自动扩缩容,利用在线业务潮汐性自动扩缩容。
微服务亲合性部署
收益:降低业务成本;提高服务可用性。
解决思路:微服务亲合性部署,将满足亲合性条件的容器调度到一台宿主机上,微服务中间件与服务网格通过共享内存通信,服务网格控制面实施灵活、动态的流量调度。
流量治理
收益:提高微服务调用的容错性;容灾;进一步提高开发效率。
解决思路:基于微服务中间件以及服务网格的流量治理。熔断、重试;单元化;在复杂环境下的流量调度。
CPU水位负载均衡
收益:打平异构环境算力差异,为自动扩缩容提供正向输入。
解决思路:CPU水位负载均衡,IaaS:提供资源探针;服务网络:动态负载均衡。
总结
在本节课中我主要学习了软件架构的相关基础知识,在实际架构设计中要清楚没有最好的架构,只有最适合当前场景的架构。在设计架构的过程中要需求先行,弄清楚要解决什么问题,进行业界调研,了解业界都有哪些解决方案可以提供参考。技术选型,清楚在内部/社区中有哪些基础组件,设计时充分考虑异常情况。