架构初探 | 青训营笔记

80 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 18 天

课程主要内容

这节课主要学习了什么是架构、架构的组成,当下架构面临的挑战有哪些,并学习了如何设计一个架构。

详细内容

架构的基本概念

架构:是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。 架构是十分重要的。就像是楼房的地基,必须要打好,如果不打好,后续会很危险。 目前的架构有

  • 单机
  • 单体
  • 垂直应用
  • SOA (Service Oriented Architecture)
  • 微服务 (Microservice)

单机:把所有的功能都实现在一个进程里,并部署在一台机器上。其优点是简单,但是缺点是运维需要停服以及会出现C10K问题(服务器如何支持10k个并发连接)。
单体架构:分布式部署
垂直应用架构:按应用垂直切分的单体。其优点是可以水平扩容,且运维不需要停服。但是缺点是会导致开发效率低,爆炸半径大。
SOA:将应用的不同功能单元进行抽象,并且定义服务之间的通信标准。
微服务:SOA的去中心化 这两者都存在的问题有数据一致性问题、高可用、治理以及解耦等问题。

架构之所以不断进行演进,是因为需求量越来越大,业务越来越复杂。其主要是垂直切分和水平切分。

企业级后端架构剖析

云计算

云计算是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模熟悉分析和存储的基石。 其基础是虚拟化技术和编排方案。 目前其架构有IaaS、SaaS、PaaS、FaaS。

  • IaaS(Infrastructure as a Service),即基础设施即服务,指把IT基础设施作为一种服务通过网络对外提供,并根据用户对资源的实际使用量或占用量进行计费的一种服务模式。
  • SaaS(Software-as-a-Service),即软件及服务,即通过网络提供软件服务。
  • PaaS(Platform as a Service),是指平台即服务,把服务器平台作为一种服务提供的商业模式,通过网络进行程序提供的服务
  • FaaS(Functions as a Service),可以广义的理解为功能服务化,也可以解释为函数服务化。

云原生

云原生技术为组织在公有云、自由云等新型的动态环境下,构建和运行可弹性拓展的应用的提供了可能。大概可以分为弹性资源、微服务架构、 DevOps和服务网格。接下来详细了解了各个部分。

弹性资源有服务资源、计算资源,服务资源调度分为微服务和大服务,计算资源调度简单分为在线和离线两类。消息队列与计算资源调度类似,也可以分为离线和在线两类。

弹性存储资源分为经典、关系型数据库、元数据和nosql。经典有对象和大数据。其实就是将存储资源当作服务。

DevOps是云原生时代软件交付的利器,贯穿整个软件的开发周期。DevOps会结合一整套的自动化流程,其目的是为了提高软件开发者的开发效率。

微服务架构:云原生中各个服务间的通信协议主要有HTTP(RESTful API)和RPC(Thrift)。之后学习了在云原生环境下的架构是什么样子的。

服务网格:进程隔离,能够实现异构系统治理统一化,不需要关心具体是java代码还是python代码;同时实现了与业务进程的解耦,运维更加简便。

挑战

主要从基础设施层面和用户层面。基础设施层面是因为资源是有限的。物理资源是有限指带宽和机器数量是有限的。资源利用率受制于服务部署。用户层面则是网络通信开销较大,网络抖动导致运维成本提高,以及异构环境下,不同实例资源水位不均。

对于资源利用率,希望能够降低物理资源的成本,因此采用离在线资源并池,使用自动扩缩容,微服务亲合性部署,进行流量治理。自动扩缩容是指根据在线业务的潮汐性实现自动扩缩容。流量治理主要是基于微服务中间件等进行。

进行架构设计时,要弄清楚需要解决哪些问题,了解当前的解决方案有哪些,之后进行数据选型,还要考虑对异常情况如何处理。

总结

经过这节课的学习,主要是学习了架构的概念,包括什么是架构,架构的组成,以及当前架构的设计遇到的困难有哪些。以及设计架构需要考虑的因素,同时明白了没有最好的架构,只有最合适的架构。