《微服务架构核心 20 讲》笔记

《微服务架构核心 20 讲》笔记

什么是微服务架构

微服务是一种架构模式。

微服务的六个特点:

  • 一组小的服务
  • 独立的进程
  • 独立部署
  • 轻量级通信
  • 基于业务能力
  • 无集中式管理——这里指的是可以用不同的技术栈,不同的存储

微服务定义:基于有界上下文的、松散耦合的、面向服务的架构。

架构师如何权衡微服务的利弊

架构之道在于权衡利弊。

微服务架构的优点

  • 强模块化边界
  • 可独立部署
  • 技术多样性

微服务架构的缺点

  • 分布式系统复杂性
  • 最终一致性
  • 运维复杂性
  • 测试复杂性

分布式系统带来的一个挑战就是取终一致性。

康威法则和微服务给架构师怎样的启示

康威法则:设计系统的架构受制于产生这些设计的组织的沟通结构。

img

康威的原文中提出的各定律

  • 第一定律 组织沟通方式会通过系统设计表达出来
  • 第二定律 时间再多一件事情也不可能做的完美,但总有时间做完一件事情
  • 第三定律 线型系统和线型组织架构间有潜在的异质同态特性
  • 第四定律 大的系统组织总是比小系统更倾向于分解

其中心思想实际就是分而治之

企业应该在什么时候开始考虑引入微服务

微服务的适用性:

img

微服务重在服务治理,其对于平台基础设施有较高要求,所以企业刚开始应用微服务并不一定能提高生产力。简单来说:单体服务适用于小团队;微服务适用于大团队。

何时选择微服务,在于度的把控。当研发团队人员增长到一定程度,沟通成本不断增长时,就可以考虑微服务架构了。一个经验数据是,当团队达到 100 人规模时,就可以考虑使用微服务架构了。

罗马不是一天建成的:架构是一个演进的过程,不应该一开始就将系统设计的过于复杂。

什么样组织架构更适合微服务

img

  • 左边是比较传统的组织架构。产品从左到右流程走,可能出现的问题,反馈比较慢,对业务支持比较慢。沟通成本比较大。

  • 右边是比较合适微服务的组织架构, 每一个团队(基于微服务的跨职能的团队),有开发,有产品,有测试,团队都支持自己的微服务。交付的产口是平台,对外提供 API 接口支持多样的业务。

img

DevOps 理念:谁开发的,谁构建,谁支持。

如何理解阿里巴巴提出的微服务

中台战略和微服务的关系

img

业务中台和技术中台统称为大中台,支撑业务前台。正所谓,万丈高楼平地起,中台基础越扎实,前台发展就越快。

PaaS 和 核心业务层是和微服务相关的。这一些基本都可以用微服务来实现。

  • IaaS:Infrastructure-as-a-Service(基础设施即服务)

  • PaaS:Platform-as-a-Service(平台即服务)

如何给出一个清晰简洁的服务分层方式

大致的服务分层图:

img

SOA(Service-Oriented Architecture)或微服务大致可分为

  • 基础服务:也被称为:核心领域服务、中间层服务、公共服务
  • 聚合服务:对基础服务的聚合,以满足业务需求,提供给外部调用。

微服务总体技术架构体系是怎么设计的

img

  • 接入层:接入外部流量,内部做负载均衡
  • 网关层:反向路由,限流,安全,跨横切面的功能。
  • 业务服务层:可分为:聚合服务,基础服务
  • 支撑服务:各种公共性的后台服务
  • 平台服务:可以是一些管理系统
  • 基础设施:由运维团队运维

其中,与微服务相关的主要有:网关层、业务服务层、支撑服务、平台服务

微服务最经典的三种服务发现机制

消费者(客户端)如何发现生产者(服务端),有三种模式:

(1)通过 DNS 访问 LB(负载均衡),LB 分发

img

(2)消费者内置 LB, 生产者将自身信息注册到注册中心上,并通过发送定时心跳来确认自身服务可用。消费者定期从注册中心拉取生产者信息

img

(3)结全前面两种方式, 在 Consumer 的主机上也布置一个 LB。 LB 会定期同步注册中心的信息。 运维成本比较高一点。

img

微服务 API 服务网关(一)原理

网关用于屏蔽服务内部的逻辑,希望外部访问看到是统一的接口。

img

网关主要的功能:

  • 反向代理:将外部的请求换成内部调用。
  • 安全认证:防刷、防爬虫。
  • 限流熔断:处理可能会突发流量。
  • 日志监控:进行访问访问审计,监控流量。

一般不要把过多的业务逻辑写在网关当中。

img

服务 API 服务网关(二)开源网关 Zuul

Servlet 和 Filter Runner 过滤器:前置路由过滤器, 路由过滤器,后置路由过滤器

过滤器开发,可以通过脚本开发。开发完后上传到过滤器目录中, 被扫描后加到 Filter Runner 中。

各个 Filter 共享数据通过 Request Context 来实现。

img

过滤链的流程:

img

跟 Netflix 学习微服务路由发现体系

netflix 有两个比较重要的支撑服务

  • 服务注册中心 Eureka
  • 网关 zuul

img

集中式配置中心的作用和原理是什么

为什么要引入配置中心呢?

配置文件中的属性不方便管理,无法动态更新,无法审计。配置中心可以解决这些问题。

什么可做配置呢?

  • 业务开关
  • 调用/响应超时
  • 限流
  • 连接字符串
  • 动态参数

Svr 更新配置有两种方式:推和拉。

img

携程的 Apollo 配置中心:

img

github : https://github.com/ctripcorp/apollo

微服务通讯方式 RPC vs REST

RPC:远程过程调用

REST:Restful

img

微服务框架需要考虑哪些治理环节

一个公司的微服务多了,就要需要考虑服务治理:

  • 软负载:蓝绿发布,灰度发布

  • 指标(Metrics):服务的调用量,耗时监控

  • 调用链埋点:方便快速定位问题

契约生成代码: 定义结构体可自动生成 json 格式, vscode 有插件。

img

阿里巴巴微服务治理生态:Dubbo http://dubbo.apache.org/en-us/

微服务监控系统分层和监控架构

五个层次的监控:

  • 基础层施监控
  • 系统层监控
  • 应用层监控
    • url
    • sevice
    • mysql
    • cache 可用率
    • 性能
    • qps
  • 业务层监控
    • 核心指标监控
    • 登录注册
  • 端用户体验监控

img

  • 日志监控:Elasticsearch
  • metrics 监控
  • 健康检查
  • 调用链监控
  • 告警系统

比较典型的监控架构,大部分公司的流程

img

数据量比较大一般用 Kafka 作为缓冲队列。

Nagios 健康检测工具。

ELK:ELK 是 Elasticsearch、Logstash、Kibana 三大开源框架首字母大写简称。

微服务的调用链监控该如何选型

调用链的监控 谷歌 2010 年提出来的。

通过 Span 来跟踪, RootSpan ChildSpan 跨进程时 会有 Trace di + parant span id

img

三个主流调用链监控系统的比较:

img

微服务的容错限流是如何工作的

Netfiix Hystrix 具有熔断、隔离、限流、降级的功能 。

img

说明:

  • 3 Cirult OPen 判断是否可以熔断, 是则执行 getFAllBack() 降级处理函数
  • 5 run() 超时 也执行降级处理函数。
  • 6 不成功也 执行处理函数 。
  • Calculate Cirult Health 就是在正常执行成功后计算是否需要熔断。

Docker 容器部署技术 & 持续交付流水线

docker 容器治理就是解决:环境不一致的问题。把依赖的所有包都打在镜像中。

统一、标准化的交付流水线。

UAT 环境: User Acceptance Test (用户验收测试)

img

发布模式: 蓝绿布置,灰度发布(金丝雀发布)。

img

容器集群调度和基于容器的发布体系

资源调度框架 Mesos 架构

img

基于容器的云发布体系

img