架构初探谁动了我的蛋糕 学习笔记 | 青训营

105 阅读10分钟

1.什么是架构

1.1 架构的定义

架构,又称软件架构,是有关软件整体结构与组件的抽象描述用于指导软件系统各个方面的设计。

课程上老师给的定义是这个,在我看来系统架构是我们应该怎么设计软件来让软件满足我们的需求的一门课程,他不是理论先于实践而是实践先于理论。比如我们设计了一个APP,遇到了大量的访问,服务宕机了,需要进行改进。正是有着实际的生产生活需要,我们才进行设计的。对于很多普通的网站,日均访问量不到100。这种情况下,你设计的高性能的服务架构实际上无用武之地。

1.2 架构相关案例的理解

下面来介绍一下相关的架构演变过程: 首先是单体架构,单机部署,这个架构优点在于很简单,问题很多无法承受流量高峰,运维需要关闭服务器,尤其是服务器出现了问题整个系统瞬间崩塌,服务就不可用了。其结构图如下图所示:

image.png 针对上面的问题,提出了分布式部署,不把鸡蛋放在一个篮子当中,一旦某一台服务器出现了问题,别的分布式部署的服务器也可以继续提供网站服务,不会造成太大的后果。并且我们升级服务的时候,总算可以逐步替换的方式来进行无感升级了。其示意图如下图所示:

image.png image.png 虽然我们这样解决了部署升级的问题,但是所有功能的都是一个系统提供的,如果我们需要进行维护,并不方便。整个系统的模块和职责划分不清晰,并不适合团队合作。针对团队合作快速开发,提出了垂直应用架构。我们把进程部署在多个机器上,并杛引入负载均衡层,经过这样的垂直切分,就来到了单体架构。多个机器就好比把合切成几大块,负载均衡层负责引导用户去事先切好的几块蛋糕处在单体架构基础上,进一步地,再把不同应用的代码从之前一个大的进程中拆分出来,就来到了垂直应用架构。垂直应用架构的如图所示:

image.png 即使是这样,开发人员仍要每天花费大量时间和缓存持久化存储甚至机器打交道,很难专注于业务的开发,严重影响了开发的效率。业务一旦上线变更将会影响到的方面不可计数。因此,继续演进推出了SOA和微服务。 SOA架构就是把原本包含了众多复杂逻辑的进程按照功能单元抽象成多个服务,以服务为基本单元,并为它们之间的通信定义标准。 而微服务架构则是,SOA的分布式部署形式。其架构图分别如下图所示:

image.png

image.png 微服务的架构虽然解决了很多问题,但是也带来了很多问题,比如数据一致性,过于解耦,高可用,服务治理。后面我们会详细介绍一下相关问题的。

2. 企业级架构剖析

对于企业而言随着规模越做越大,问题也越来越多。比如我们现在需要很多服务器,这些服务器我们是租还是买?国内但是对于服务器需求量比较大的厂商都在搞自己的云服务。我们如何应对高峰事件对我们服务器的冲击?每天凌晨服务器使用率很低,我们如何将其利用起来以免资源浪费,很多问题急需我们解决。接下来这个章节对其进行详细探究。

2.1云计算

云计算:是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模数据分析和存储的基石。

这是云计算的定义,我的理解云计算实际上是个大脑,一个管理提供我们云相关服务的调度中心。云计算调度云服务就像我们大脑调度我们身体一样。 其中云计算的基础虚拟化技术和编排方案。

虚拟化技术的举例如下:我们有一个房子想把他租出去,但是租金1w太高了,并且打工人加班要那么大房子没有用,没人租。于是为了招揽租户,我们将房子出租,3个房间每个房间4000元。由于4000元价格大家还能接受,一个房间也能满足自己的需要,因此很快就成功出租。服务器也是同样道理,我们使用容器化技术将服务器的计算器资源划分成一个个容器出租,这样我们就实现了容器化。

同样还是房东,通过收租又买了几套房子。但是这个房子附近没有办公区域,处在郊区。房东看了看外面的风景心生一计,直接在这里建立了民俗,租给上班疲惫来这里休假的打工人。这种根据功能进行合理安排,使它能够服务于某项特定的工作或者项目,这就叫做编排方案。

接下来我们介绍一下常见的架构种类:

  • laaS (Infrastructure as a Service)基础设施服务
  • PaaS (Platform as a Service) 平台服务
  • SaaS(Software as a Service)软件服务
  • FaaS (Function as a Service)函数服务

首先,lass把IT基础设施作为一种服务通过网络对外提供,并根据用户对资源的实际使用量或占用量进行计费的一种服务模式。在这种服务模型中,普通用户不用自己构建一个数据中心等硬件设施,而是通过租用的方式,利用Internet从IaaS服务提供商获得计算机基础设施服务,包括服务器、存储和网络等服务。举个例子lass 就像租房平台,专门向打工人提供租房服务,租多久收多少钱。

PaaS 把平台作为一种服务提供的商业模式,比如我们要进行一段程序开发,但是苦于手头没有自己电脑,于是便借了一台电脑进行开发,打开浏览器登录了公司云开发环境,直接进行开发,这就是Paas的一个简单例子 SaaS 让用户能够通过互联网连接和使用基于云的应用程序,概念和Paas类似,一般经常放在一起出现,常见的电子邮件都是这类服务。 FaaS允许开发者在云环境上快速部署、运行和托管代码片段,无需管理和维护服务器等基础设施。FaaS提供了一个轻量级的运行环境,让开发者可以将函数代码上传到云平台上,通过事件触发来执行函数,并获得结果,常见的微信小程序就可以采用云函数进行开发,按次收费。

2.2 云原生

image.png 来看一下这个图介绍云原生的几个重要基础模块,弹性资源,微服务架构,DevOps,服务网格。我们接下来分别介绍。

2.2.1 弹性计算资源和存储资源

弹性资源:基于虚拟化容器以及灵活的编排调度机制,可以为云服务提供快速扩缩容能力,而且极大程度地提高了物理资源的利用率。在这方面,k8s技术已经成为了业界的标准,同时也使得各组件之间的交互变的更容易。 弹性资源可以分为弹性计算资源和弹性存储资源,下面介绍一下常见的计算资源和存储资源。

  • 服务资源调度可以分为微服务和大服务。
  • 计算资源调度可以分为在线的热榜和离线热榜更新,
  • 常见的计算资源还包括特殊的消息队列,消息队列在线消峰解耦,离线进行大数据分析。

经典弹性存储资源类型:

  • 作为对象的宣传视频和作为大数据的用户消费记录
  • 记录为关系型数据库的收银记录
  • 记录为元数据的服务发现:蛋糕店通讯录
  • 作为NoSQLKV:来个二环房子

总之存储资源和计算资源都是服务,不够我们可以再加,用不了我们可以退掉。

2.2.2 DevOps

DvOs:设计->开发->测试->交付->开发->测试->交付,自动化的流程使得软件的工作流程更高效,将微服务架构的优势发挥的淋漓尽致。

image.png 这是DevOps指导服务开发的一个典型示意图。通过DevOps可以指导全流程开发,包括不限于容灾隔离,CICD,集成测试,运维。后面会出文章进行专门介绍这里不过多赘述。

2.2.3 微服务架构

云原生场景下,微服务大可不必在业务逻辑中实现符合通信标准的交互逻 辑,而是交给框架来做。下面是一个简单微服务架构的框架图。 image.png。 微服务中也有很多问题比如服务治理,服务发现,数据一致性。这些以后会写文章来讨论,今天主要讨论一下Http和RPC,RPC要求服务提供方和服务调用方都需要使用相同的技术,要么都hessian,要么都dubbo 而http无需关注语言的实现,只需要遵循Rest规范。一般来说http兼容性更好一些,RPC的速度性能更好一些。

2.2.4 云原生之服务网格

如果说微服务架构的重要进步,是将庞大的单体服务按照业务功能解耦开来,那么,服务网格的重要进步就是将业务逻辑与网络通信和治理解耦开来。业务不再需要关心异构系统中PC中间件治理能力的不统一,也使得复杂的治理能力的落地成为可能。服务网格如下图所示

image.png 服务网格的核心思想即将每个服务的负载、限流和服务发现等等通信功能和应用业务本身功能进行解耦分离,业务功能代码只和同机器下的不同进程的代理通信。将业务和服务彻底分开,我查询了服务网格和网关的区别,服务网格主要是微服务内部进行沟通交流,而网关是客户端和服务器端进行交流的。

服务网格作为微服务之间通讯的中间层,实现了高性能网络代理,达到了业务代码与治理解耦的效果。

2.3 总结

本文主要介绍了什么是架构以及企业级架构的剖析,通过自己的理解和查阅的资料以及青训营老师讲述的内容对于架构进行了阐述自己的理解。 下一篇文章会介绍后端架构遇到的挑战和后端架构的实战。

参考资料

青训营课程

百度百科

服务网格浅析

RPC和HTTP区别