架构初探(下)丨青训营笔记
这是我参与「第五届青训营」笔记创作活动的第 13 天。
一、本堂课重点内容
本堂课围绕架构的定义和演进两部分内容展开,并详细介绍了企业级后端架构的形态,进一步讲解了企业级架构目前面临着哪些挑战及其解决方案,最后结合所有知识点,结合实践细致讲解如何做结构设计。
二、详细知识点介绍
1. 架构
见架构初探(上)丨青训营笔记 - 掘金 (juejin.cn)
2. 企业级后端架构剖析
企业级架构(Enterprise Architecture,EA)是指企业组织中的信息技术、业务和组织结构三者之间的整体架构,是一种战略性、长期性的计划,旨在优化企业资源的利用,实现企业的业务目标。企业级架构包括四个层次:业务层、应用层、数据层和技术层。
云计算
云计算基础:
-
虚拟化技术
- 硬件层面(VM 虚拟机)- KVM/Xen/VMware
- 操作系统层面(Container 容器)- LCX/Docker/Kata Container
- 网络层面 - Linux Bridge/Open v Switch
-
编排方案
- VM - OpenStack/VMWare Workstation
- Container - Kubernetes/Docker Swarm
云计算架构:
-
云服务
- IaaS - 云基础设施,对底层硬件资源池的抽象
- PaaS - 基于资源池抽象,对上层提供的弹性资源平台
- SaaS - 基于弹性资源平台构建的云服务
- FaaS - 更轻量级的函数服务。好比 LeetCode 等 OJ,刷题时只需要实现函数,不需要关注输入输出流
-
云部署模式(拓展)
- 私有云 - 企业自用
- 公有云 - AWS/Azure/Google Cloud/Huawei
- 混合云
云原生
云原生,实际是云原生(计算)的简称,它是云计算发展到现在的一种形态。
云原生技术为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。 它的代表技术:
- 弹性资源
- 微服务架构
- DevOps
- 服务网格
弹性资源
基于虚拟化技术,提供的可以快速扩缩容的能力。可以分为弹性计算资源和弹性存储资源两个方面。
弹性计算资源:
-
计算资源调度
- 在线计算 - 互联网后端服务
- 离线计算 - 大数据分析。Map-Reduce/Spark/Flinnk
-
消息队列
- 在线队列 - 削峰、解耦
- 离线队列 - 结合数据分析的一整套方案,如 ELK
弹性存储资源:
-
经典存储
- 对象存储 - 视频、图片等。结合 CDN 等技术,可以为应用提供丰富的多媒体能力
- 大数据存储 - 应用日志、用户数据等。结合数据挖掘、机器学习等技术,提高应用的体验
-
关系型数据库
-
元数据
- 服务发现
-
NoSQL
- KV 存储 - Redis
- 文档存储 - Mongo
在云原生的大背景下,不论是计算资源还是存储资源,他们都像是服务一样供用户使用。
微服务架构
微服务架构下,服务之间的通讯标准是基于协议而不是 ESB 的。
- HTTP - H1/H2
- RPC - Apache Thrift/gRPC
如何在 HTTP 和 RPC 之间选择?
- 性能 - RPC 协议往往具备较好的压缩率,性能较高。如 Thrift, Protocol Buffers
- 服务治理 - RPC 中间件往往集成了丰富的服务治理能力。如 熔断、降级、超时等
- 可解释性 - HTTP 通信的协议往往首选 JSON,可解释性、可调试性更好
服务网格
什么是服务网格?
- 微服务之间通讯的中间层
- 一个高性能的 4 层网络代理
- 将流量层面的逻辑与业务进程解耦
没有什么是加一层代理解决不了的问题,服务网格相比较于 RPC/HTTP 框架:
- 实现了异构系统治理体验的统一化
- 服务网格的数据平面代理与业务进程采取进程间通信的模式,使得流量相关的逻辑(包含治理)与业务进程解耦,生命周期也更容易管理
3. 企业级后端架构的挑战
- 复杂性挑战:企业级后端架构涉及到多个应用、服务和系统的集成,同时还要考虑数据存储、安全性、可扩展性等问题,这些都增加了架构的复杂性。复杂的架构可能导致系统出现性能问题、难以维护、故障难以排查等问题。
- 可扩展性挑战:企业级后端架构需要具备良好的可扩展性,以满足业务的增长和变化,但是如何平衡可扩展性和架构的复杂性是一个挑战。如果不合理地设计架构,可能导致系统扩展困难,性能下降,甚至出现系统崩溃等问题。
- 安全性挑战:企业级后端架构涉及到多个系统和服务之间的数据交互,因此需要考虑数据安全的问题。这包括数据的传输、存储、访问控制等方面。安全漏洞可能导致数据泄露、系统瘫痪等严重后果。
- 技术更新挑战:随着技术的发展和进步,企业级后端架构也需要不断更新和升级,以满足新的业务需求和技术要求。但是,架构升级可能涉及到系统复杂度的增加、数据迁移等问题,需要慎重考虑。
- 组织架构挑战:企业级后端架构需要跨越多个团队、部门和组织,这就需要构建跨职能团队、制定合理的开发流程、实施有效的沟通和协作机制等,以确保架构的设计、实施和维护能够顺利进行。
4.后端架构实战
问题
如何设计一个根据主机层面的资源信息,实时进行流量调度的系统,打平不同宿主机异构环境的算力差异。
关键点:
- 紧急回滚能力
- 大规模
- 极端场景
- 架构设计:在设计系统架构时,需要考虑到系统的可扩展性和容错性。为了应对大规模的流量,可以采用分布式架构,将系统拆分成多个可独立部署的组件,以实现更好的性能和可扩展性。同时,需要考虑在极端场景下的容错机制,如故障自愈、备份和灾备等,以保证系统的稳定性和可靠性。
- 资源管理:为了打平不同宿主机的算力差异,需要对主机层面的资源信息进行实时监控和管理。可以采用资源调度器,实现对主机资源的调度和平衡,以保证不同宿主机之间的资源利用率尽量平衡。
- 流量调度算法:流量调度算法是保证系统性能的核心。需要采用高效的算法,对流量进行实时的调度和负载均衡。在设计调度算法时,需要考虑不同宿主机的算力差异、流量特征等因素,以实现更加精准的流量调度和负载均衡。同时,需要考虑到紧急回滚能力,可以采用流量控制、熔断等机制,以应对紧急情况。
- 监控和告警:为了确保系统的稳定性和可靠性,在设计系统时,需要考虑到监控和告警机制。可以采用监控系统,对系统各个组件的性能进行实时监控,以及实现故障自动报警等机制,以实现快速发现和处理系统的异常和故障。
三、课后个人总结
通过学习企业级后端架构剖析和挑战,我了解到了企业级后端架构的重要性和复杂性。一个高效稳定的后端架构可以为企业带来更好的业务发展和用户体验,而不良的架构设计则可能成为企业的瓶颈和风险。在设计企业级后端架构时,需要考虑多个方面的因素,包括系统的可扩展性、高可用性、安全性、性能优化、数据管理、服务治理等。
企业级后端架构设计是一项高度复杂和挑战性的工作,需要综合考虑多个方面的因素,以满足不同业务需求和场景的要求。通过学习本课程,我对企业级后端架构的设计思路和方法有了更深入的了解,也更加清晰地认识到企业级后端架构的重要性和挑战。