微服务定义
- 六个特点
- 一小组服务
- 独立进程
- 轻量级通信
- 基于业务能力
- 独立部署
- 无集中式管理
- 定义
- 松散耦合
- soa
- bounded context
微服务的利弊
- 利
- 强模块化边界
- 可独立部署
- 技术多样性
- 弊
- 分布式复杂度
- 最终一致性
- 运维复杂性
- 测试复杂性
康威法则
设计系统的组织,其产生的设计和架构,等价组织的组织架构。
微服务架构的适用性
- 考虑生产力和系统复杂度
- 单块优先
微服务组织架构
- End-end ownership
- 跨职能微服务产品团队 -> API <- 平台团队
微服务中台
- 业务前台
- 应用: web app ( 渠道: 第三方接入 )
- 业务中台
- 核心业务层
技术中台
- PaaS云平台: 应用监控 持续交付 服务框架 资源调度 后台服务 ( 大数据 AI )
- IaaS云平台: 计算 存储 网络 监控 安全 IDC
大中台小前台
服务分层(逻辑)
- 外部设备
- 微服务(SOA)
- 聚合服务(适配服务 边界服务): Web BF, Mobile BFF, Pubilc BFF
- 基础服务(核心领域服务 公共服务 中间层服务)
微服务技术架构体系
- 接入层
- 外部+内部 LB
- 网关层
- 作用:反向代理 限流熔断
- 组成:内部GW H5GW 无线GW 第三方GW 开放平台GW
- 业务服务层
- 聚合服务 基础服务
- 支撑服务
- 组成:注册发现 集中配置 容错限流 认证授权 日志聚合 监控告警 后台服务
- 平台服务
- 组成:发布系统 集群资源调用 镜像治理 资源治理 IAM
- 基础设置
- 计算 网络 存储 NOC监控 安全 IDC
- 六层体系中的纵向能力
- 微服务开发框架
- 持续交付流水线
- 端到端工具链
- 工程实践与规范
服务发现机制
三种主流服务发现模式
- 传统LB模式
- DNS –Discover–> Consumer –Invoke–> Load Balancer –Load Balancing Invoke–> Service Provider
- 进程内LB模式
- Service Registry –Discover–> Consumer(LB) –Load Balancing & Invoke–> ServiceProvider –Registry & Keep Alive–> Service Registry
- 主机独立LB模式
- Service Registry –Discover–> Host( Consumer -> LB ) –Load Balancing & Invoke–> ServiceProvider –Registry & Keep Alive–> Service Registry
网关
- 四项基本功能
- 反向路由
- 安全认证
- 限流熔断
- 日志监控
网关架构
Http Request -> pre filters -> router filters -> origin server -> router filters -> post filters -> Http Response
路由发现体系
- 服务注册中心 -> 服务治理
配置中心
- 统一配置
- 动态配置
- Config Server -> Service
微服务中两种典型通信方式
RPC | REST | |
---|---|---|
耦合性 | 强耦合 | 松散耦合 |
消息协议 | 二进制 thrift,protobuf | 文本 xml, json |
通讯协议 | TCP | HTTP/HTTP2 |
性能 | 高 | 一般低于RPC |
接口契约IDL | thrift,protobuf IDL | swagger |
客户端 | 强类型客户端,一般自动生成,多语言 | 一般HTTP客户端可访问,可自动生成强类型客户端,多语言 |
案例 | Dubbo,motan,Tars,grpc,thrift | spring mvc/boot, Jax-rs,drop wizard |
开发者友好 | 客户端比较方便,但二进制消息不可读 | 文本消息开发者可读 |
对外开放 | 对外一般需要转换成REST/文本协议 | 直接可以对外开放 |
微服务框架和治理
- 服务注册发现
- 负载均衡、软路由
- 日志
- Metrics
- 调用链埋点
- 限流熔断
- 安全&访问控制
- REST/RPC
- 序列化 xml/json/二进制
- 代码生成
- 统一异常处理
- 文档
- 配置集成
- 后台服务集成 DB/MQ/Cache
微服务分层监控和架构
- 监控分层
- 技术设施监控
- 网络 交换机
- 网络流量 丢包 错包 连接数
- 系统层监控
- 物理机 虚拟机 os
- cpu memory network disk
- 应用层监控
- url service sql cache可用率 响应时间 qps
- 业务监控
- 登录 注册 下单 支付
- 端用户体验监控
- 性能 返回码 城市 地区 运营商 版本 系统
- 技术设施监控
- 监控点
- 日志监控
- Metrics监控
- 健康检查
- 调用链监控
- 告警系统
- 监控架构
- 微服务 agent -> kafka
- kafka –log–> ELK
- kafka –metrics–> Influx DB/Grafana
微服务调用链监控
- 调用链监控原理:span tree
- 开源工具:CAT、Zipkin、Pinpoint
微服务限流熔断
- 核心概念
- 熔断
- 隔离
- 限流
- 降级
- 了解Hystrix如何实现限流熔断
容器部署 持续交付 发布模式
- 容器的优势
- 解决环境一致性问题
- 镜像部署
- 持续交付流水线
- git –Jenkins 构建 单元测试 打镜像–> 镜像治理中心(docker registry)
- 测试环境 –> UAT环境 –> 生产环境(蓝绿/灰度部署)
- 蓝绿部署、灰度部署
容器调度以及基于容器的发布体系
- mesos容器调度
- ZooKeeper –> Master Leader/Master Standby
- Master Leader –> Slave
- 发布体系