云平台与微服务架构

云平台与微服务架构

云平台

对云计算的理解

云计算通俗点讲就是把以前需要本地处理器计算的任务交到了远程服务器上去做。

例如你现在要计算出明天的天气预报,所有数据都准备好了,你用自己家的电脑计算,发现自己的电脑计算能力太差,想算出明天的天气预报得1年,那这样就不好了,计算也没价值了。

但是你又不能专门为计算明天的天气预报去买一台强力服务器去计算,为了降低成本,你就要去使用云计算了,你只需要把计算天气的公式和数据发送到云服务器上,云服务器的计算能力比你的个人家用电脑强了几千倍(因为云服务器是一个服务器群,由很多计算能力强大的服务器组成的),二十分钟就算好了明天的天气预报,并且把结果给你返回到你的电脑上了,你只需要按照计算的次数或者是服务器的资源使用的多少去支付你需要支付的费用,肯定比你买服务器合适多了。

以前需要自己来打井解决吃水问题,现在可以由自来水公司统一提供,现在云计算的云端相当于自来水公司,只不过它不是解决水资源供给问题,而是解决了计算资源存储资源统一、按需、可伸缩的供给。

一个机房空闲的资源出租给他人使用,使得他人可以在短期具备同时使用多个计算机用于同一任务的可能性,同时还具有更好的性价比。就相当于,平常自己买电脑等于是淘宝,云计算是可以五天无理由的团购。

原来是把一个任务交给一台电脑来完成,小任务用小电脑,大任务就得换大电脑。

现在是把一个任务交给一堆电脑一起来完成,这堆电脑加起来工作得就像一个超级大的电脑一样。如果把每一台电脑比作一滴水,那么一起工作的一堆电脑就像是一片云。如何让一堆电脑工作得像一台大电脑一样,而且能按需要随时添加新电脑进去来改变大电脑的能力,这就是云计算需要解决的问题。

可以把计算扩充一下。比如说存储。假设很多人想要不定时地看同一部视频。正常来说,都要保存在每个人本地的硬盘上,才能满足每个人不定时的观看。如果借助网络,只要保存在一个服务器上,有人想要看去下载即可,就是共享存储。

再把云的概念扩展一点,比如生活中的交通。很多人想要从A到B地,每个人如果都需要单独坐小汽车去的话,资源就很浪费,如果共享一辆汽车,就是云交通,资源就会节省很多。云计算的狭义个人理解是指计算能力的共享,通过第三方,使得计算能力统一放在一个地方。

云计算概念

云计算是通过 Internet 云服务平台按需提供计算能力、数据库存储应用程序和其他 IT 资源,采用按需支付(使用量)定价模式。

云平台概念

云计算平台也称为云平台,是指基于硬件资源和软件资源的服务,提供计算、网络和存储能力。云平台可以集中对存储、处理、传输等各个环节进行处理,而且速度非常快,调用云服务等资源也更加方便快捷。就拿百度云来说吧,用户可以将相关的信息存储到云平台当中,不管是传输还是处理,都可以通过平台来搞定,还可以通过平台来调用云服务,享受到更便捷的扩展性服务。

云平台,简单来理解的话就是提供数据、存储数据的一个空间,这个空间非常大,而且它的存储量也是非常大,另外,它还必须具备非常快的运转速度。像百度云是以数据存储为主的云平台,而阿里云是提供弹性计算及信息存储等基础设施服务的云平台。

云计算平台可以划分为3类:

  • 以数据存储为主的存储型云平台

  • 以数据处理为主的计算型云平台

  • 计算和数据存储处理兼顾的综合云计算平台

云平台的优势

  • 稳定性相对很好

​ 云平台的应用影响着网站的使用,所以云平台的稳定性对于网站来说很重要。我们平时常见的虚拟主机都是多个网站共享一台主机,如果其中的一个网站受到攻击, 那么就会影响到其他的网站,这样空间的稳定性就会大大降低。

  • 更安全可靠

​ 服务器的安全对于用户来说是非常重要的,因为一旦服务器出现故障,网站就不能进行正常的运营,给企业带来的损失将会是不可估量的,所以用户最害怕服务器出 现故障。但是云平台一般不会出现这种情况的,就算是网站的运营出现了问题,云平台也会自动转移到其他的机器上。

  • 无限的容量

​ 云平台是全网服务,几乎综合了全球终端的“云”提供的容量,不再局限于一台或者几台服务器之间,所以在某种程度上可以说云计算的存贮是永无止境的。

  • 具有扩展性

​ 对于一些中小型的企业来说,随着业务的不断扩大,可能后期需要对服务器进行扩容和升级等操作。而云平台具有一定的扩展性,可以满足企业的后期扩张升级,在 后期就不需要对软硬件进行相应的升级操作。

  • 存储更方便

​ 数据是一个企业的核心内容,所以平时一定要对数据做好备份工作。云平台有一个数据备份功能,就算是硬件出现了问题,数据也不会受到影响或者是出现丢失的情 况。只需要后期的正常维护和运维就行了,而且这个是服务商在维护的,可以为企业节省很多的人力。

  • 更容易的协作与共享

​ 极高的速度与无限的容量使异国异地的企业开展协作经营成为可能,在云计算平台下的不同企业可以实现线上办公、同步作业,一个企业发出的最新数据可使“云”的 其他企业同步看到并采用,由此实现了资源共享。

  • 高速

​ 相较于任何一个独自存在的企业数据中心,足以覆盖全球的云计算所提供的高速运算和同步服务是这些独力支援的企业所无法比拟的。

云平台架构

资源层或基础设施层(IaaS, Infrastructure as a Service)

由服务器集群组成。传统服务器要想提供高质量服务,需要性能特别好的服务器(内存高,CPU快,磁盘空间大等),价格昂贵。而服务器集群可以使用以前性能不太好的服务器,利用分布式处理技术,依然可以提供可靠服务,节省费用。

例:Oracle、VMware、阿里云

虚拟机层

有了物理机集群后,我们需要在物理机上建立虚拟机。建立虚拟机的目的是为了最小化资源成本(最大化资源利用率)。试想一下某台物理机有128G内存,当某段时间连续有小任务量的应用需要处理时,物理机的内存利用率会很低,所以为最大化资源利用率,可以在物理机上独立开辟几个虚拟机,每台虚拟机相当于一个小型服务器,依然可以处理应用请求。

中间件层或平台层(PaaS, Platform as a Service)

是云平台的核心层,主要功能为:对虚拟机池资源状态进行监测、预警、优化决策。

  • 资源监测:实时监测当前各台虚拟机CPU、内存等使用情况,当然也监测用户应用请求,以便根据应用规模大小进行决策。
  • 预警:防患于未然,根据当前虚拟机资源使用情况预测下一秒用户请求量,以便做出相应资源调整,防止宕机。比如CPU使用率上限为70%,所以当预测下一秒达到该触发点时,应有相应响应。
  • 优化决策:预警之后,虚拟机要进行资源调度(迁移或伸缩),采用何种调度策略,才能保证服务和资源利用率是研究重点。由于该层需要对应用进行响应处理,所以需要在虚拟机上搭建操作系统,文件存储系统,以及服务器,当然还有负载均衡系统,如,Nginx(engine x),其实现中间件层功能,相当于网络中的路由器不处理数据,只进行数据转发,数据处理交由虚拟机上的tomcat服务器执行。

例:新浪SAE、谷歌GAE(Google app engine)、百度云开发引擎

应用层或软件服务层(SaaS,Software as a Service)

给用户提供可视化界面。

应用若为存储:如百度云会给用户提供交互界面,建立文件夹,进行数据存储,在线播放视频等界面,供用户选择操作。

应用若为租用服务器:界面应该有租用的服务器资源状态。

例:微软Office、谷歌Apps

云计算中弹性与可扩展性的区别

可扩展性:只要相应增加资源容量,就可以处理增加的工作负载。

弹性:强调启用和停用庞大的资源容量这一概念。

微服务

什么是微服务

微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在自己的独立进程中,服务之间互相协调、互相配合,为用户提供最终价值。 服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。可以使用不同的语言来编写服务,也可以使用不同的数据存储。

主要思想:去耦合

在 intellij idea 工具里面就是用 maven 开发的一个个独立的 module,具体就是使用 springboot 开发的一个小的模块,处理单一专业的业务逻辑,一个模块只做一个事情。

微服务的优缺点

优点:

  • 独立开发
  • 独立部署
  • 故障隔离:系统一项服务不起作用,不会影响系统运行
  • 混合技术堆栈:可以使用不同语言技术构建同一应用程序的不同服务
  • 团队规模降低

缺点:

  • 开发人员要处理分布式系统的复杂性
  • 多服务运维难度:随着服务的增加,运维的压力也在增大
  • 系统部署依赖
  • 服务间通信成本
  • 数据一致性
  • 系统集成测试
  • 性能监控

微服务之间的独立通讯

远程过程调用(同步通信)

直接通过远程过程调用来访问别的service。

示例:dubbo 通过 RPC 远程过程调用、springcloud 通过 REST 接口 json 调用

优点:简单,常见。因为没有中间件代理,系统更简单

缺点:只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应,降低了可用性,因为客户端和服务端在请求过程中必须都是可用的

消息队列(异步通信)

使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。

示例:Kafka、RabbitMQ、ActiveMQ

优点:把客户端和服务端解耦,更松耦合 提高可用性,因为消息中间件缓存了消息,直到消费者可以消费,支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应

缺点:消息中间件有额外的复杂性

分布式系统面临的问题

复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。

服务雪崩

多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”.

对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障。这些都表示需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能取消整个应用程序或系统。

服务依赖保护的解决方案:

熔断模式:这种模式主要是参考电路熔断,如果一条线路电压过高,保险丝会熔断,防止火灾。放到我们的系统中,如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

隔离模式:这种模式就像对系统请求按类型划分成一个个小岛的一样,当某个小岛被火少光了,不会影响到其他的小岛。例如可以对不同类型的请求使用线程池来资源隔离,每种类型的请求互不影响,如果一种类型的请求线程资源耗尽,则对后续的该类型请求直接返回,不再调用后续资源。这种模式使用场景非常多,例如将一个服务拆开,对于重要的服务使用单独服务器来部署,再或者公司最近推广的多中心。

限流模式:上述的熔断模式和隔离模式都属于出错后的容错处理机制,而限流模式则可以称为预防模式。限流模式主要是提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。这种模式不能解决服务依赖的问题,只能解决系统整体资源分配问题,因为没有被限流的请求依然有可能造成雪崩效应。

什么是服务熔断,什么是服务降级

服务熔断

熔断机制是应对雪崩效应的一种微服务链路保护机制。

当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回”错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand。

Hystrix服务降级

其实就是线程池中单个线程故障处理,防止单个线程请求时间太长,导致资源长期被占有而得不到释放,从而导致线程池被快速占用完,导致服务崩溃。

Hystrix能解决如下问题:

① 请求超时降级,线程资源不足降级,降级之后可以返回自定义数据

② 线程池隔离降级,分布式服务可以针对不同的服务使用不同的线程池,从而互不影响

③ 自动触发降级与恢复

④ 实现请求缓存和请求合并

微服务技术栈

服务开发

Springboot、Spring、SpringMVC

服务配置与管理

Netflix公司的Archaius、阿里的Diamond等

服务注册与发现

Eureka、Consul、Zookeeper等

服务调用

Rest、RPC、gRPC

服务熔断器

Hystrix、Envoy等

负载均衡

Ribbon、Nginx等

服务接口调用(客户端调用服务的简化工具)

Feign等

消息队列

Kafka、RabbitMQ、ActiveMQ等

服务配置中心管理

SpringCloudConfig、Chef等

服务路由(API网关)

Zuul等

服务监控

Zabbix、Nagios、Metrics、Spectator等

全链路追踪

Zipkin,Brave、Dapper等

服务部署

Docker、OpenStack、Kubernetes等

数据流操作开发包

SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息)

事件消息总线

Spring Cloud Bus


云平台与微服务架构
http://example.com/2023/04/04/云平台与微服务架构/
作者
Lumie
发布于
2023年4月4日
许可协议