阿里云云原生助理工程师ACA认证(七)—微服务架构

 

企业应用框架的演进

  • 过去的10年是云计算高速发展的10年。企业从自建传统的IDC机房的阶段,过渡到了通过云服务厂商租用的方式。
  • 同时随着基础设施部署方式的变化,企业级应用的软件架构也不断的进行着演进。经历了从单体应用到初步服务化(SOA)再到微服务化的过程

早期企业应用架构-单体应用

特点

  • 单一开发语言,单一应用,集中部署
  • 数月甚至数年的时间的迭代流程。
  • 开发,QA,运维人员分离。

缺点

  • 沟通成本高,迭代速度慢。
  • 应用耦合度高,难于扩容和扩展。
  • 稳定性差,牵一发而动全身。

初步服务化应用架构—SOA

随着软件规模的扩大和架构的演进,2000年左右开始出现了初步的分布式服务化软件架构及SOA( Service-Oriented Architecture ) 。

image

特点

  • 模块解耦,便于扩展,稳定性提高
  • 架构清晰灵活,开发语言的选择不受限制
  • 兼容旧系统。平滑过渡。

缺点

  • 存在明显单点,高并发受限,一损俱损。
  • 转发模式效率不高,无法支持高性能
  • 缺乏配套的服务治理能力

微服务架构与微服务框架

微服务架构的出现

2012年:微服务架构的先驱者Fred George在Agile India上分享了他的经验。他和所在的团队是如何将100万行的传统J2EE程序。通过解耦、自动化验证等实践,逐渐分解成20多个5K行代码的小服务,又分解成200多个500行代码的微服务的过程

2014年:随着服务化的深入,两位软件架构的大牛Martin Fowler与James Lewis在SOA的基础上,提出了一种新的微服务软件架构。

微服务去中心化服务调用方式

  • 微服务在SOA架构下做了进一步的改进,相比较于SOA架构下所有服务之间的调用都通过ESB总线转发。
  • 微服务组件只需要通过注册中心实注册和获得列表。
  • 中间的调用过程即可直接联络,不再需要第三者。降低了对中心的依赖,提高了调用效率。

微服务之间的调用时序图

image

  1. 服务提供者上线时,向注册中心注册自己。
  2. 服务调用者向注册中心查询提供者信息。
  3. 注册中心返回最适合的服务提供者。
  4. 服务调用者直接向提供者发起请求。
  5. 提供者返回请求结果

初步微服务化改造后引发的新问题

开发团队在实施微服务的过程中,除了服务发现之外,还面面临了诸多的挑战,包括负载均衡、熔断降级、灰度发布、故障切换、分布式跟踪等,这对开发团队提出了非常高的技术要求。

image

微服务治理框架和常见的开源实现

2014年由Netfilx开源产品封装而成的Spring Cloud是一套微服务系统架构的一站式解决方案,提供了如服务发现注册、配置中心、微服务网关、负载均衡、断路器、数据监控等功能组件。

image

微服务架构内部组件的关系

image

微服务架构的优劣总结

微服务架构优点

  • 每个微服务可以单独的设计,开发,测试,部署上线。
  • 每个微服务功能较小,可以进行更加全面的测试
  • 系统整体健壮性提高,单个服务错误不会导致全部功能不可用

微服务架构缺点

  • 微服务拆分力度,和服务划分方式需要经验
  • 微服务的核心支持组件和自动化部署工具需要精心维护
  • 分布式调用一旦出BUG比较难定位,事务处理的复杂度也大大提高

下一代微服务框架ServerMesh

  • 在Service Mesh架构中,给每一个微服务实例部署一个Sidecar Proxy。
  • 该Sidecar Proxy负责接管对应服务的入流量和出流量,并将微服务架构中的服务订阅、服务发现、熔断、限流、降级、分布式跟踪等功能从服务中抽离到该Proxy中。

SideCar的主要功能

  • 流量管理
  • 可观察性策略执行
  • 服务身份和安全平台支持
  • 集成和定制

阿里微服务框架

2007年10月之前阿里的技术架构

特点

  • 技术团队规模500人左右
  • 基于传统应用开发架构,单一War应用。
  • 业务每年翻倍增长

问题

  • 项目团队协同代价高
  • 后端数据库连接到达上限。
  • 应用紧密耦合,错误难以隔离

淘宝基于新框架的服务化改造

image

Spring Cloud Alibaba全家桶形成微服务领域最佳实践

Spring Cloud Alibaba

  • 提供分布式应用服务开发的一站式解决方案。
  • 项目包含开发分布式应用服务的必需组件
  • 方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务

阿里巴巴开源的微服务产品

  • 服务注册发现:Nacos
  • 分布式配置:Nacos
  • RPC调用:Dubbo
  • 消息驱动: RocketMQ
  • 分布式事务:Seata
  • 在线调试:Arthas
  • 限流&熔断: Sentinel
  • 混沌测试:ChaosBlade
  • 消息队列: RocketMQ

基于RocketMQ的消息产品家族

RocketMQ

  • 阿里巴巴在2012年开源的第三代分布式消息中间件,并在2017年正式成为Apache顶级开源项目
  • 承载着阿里巴巴所有核心链路的消息流转,历经多年双11万亿级消息洪峰的严苛考验

image

阿里前端全面拥抱云原生Serverless

  • 淘系、飞猪、高德、CBU、ICBU、优酷、考拉等十数BU,落地了以Node.js FaaS在线服务架构为核心的云端一体研发模式,交付平均提效38.89%。
  • 日常弹性下也较以往减少30%计算成本。

微服务架构并发数技术指标与日俱增

image