🗒️微服务架构

type
status
slug
summary
tags
category
icon
password
Date

微服务架构

拆分

数据库演化

  1. 主从模式(一主多从,多主动从)
    1. 主库写入,从库查询
    2. 问题:
      1. 主从延时问题
    3. 解决:
      1. 需要监控从库延时
      2. 优先把对时间不敏感的数据,改为读从库(比如:统计信息,排行榜),最新的信息读主库
  1. 分库分表
    1. 控制单张表数据在千万以内
    2. 水平拆分,垂直拆分

应用演化

  1. 多台服务器部署,使用nginx负载均衡
问题:本地文件依赖问题,即上传的文件保存在本地服务器,导致其他机器上访问时,有的文件能访问,有的访问不到
解决:每台服务器挂载同一个NFS,并配置同样的目录
 
  1. 微服务,k8s容器化
 
使用分布式缓存
大致:单机mysql 并发1000,单机redis 10万
 

发现

管理所有服务信息的注册中心(配置中心)
功能:
注册:
查询:
健康查询:
notion image
服务发现实现方案:
Apache Zookeeper:
Hadoop,Kafka,Hbase,Electsearch 都内置了Zookeeper
ETCD
使用raft实现分布式一致性算法,k8s组件
file
简单

治理

  1. 主动超时
  1. 限流
  1. 熔断:暂时停止对该服务的调用
  1. 降级
    1. 读旧,planB,默认值
    2. 放弃部分请求,降低质量,提高门槛,反向过滤,事后补偿
  1. 隔离
    1. 典型:秒杀场景,
  1. 扩容
    1. 垂直扩展:更强的机器
      优点:系统简单
      缺点:高端机器价格贵,扩展水平有上限
       
      水平扩展:更多的机器
      重点思考:无状态服务水平扩展简单,有状态服务水平扩展非常复杂
 
面试问题:
1 后端接口只能支撑最大QPS为1w。要怎么来保护它呢? 2 发短信的接口,不超过:100次/时,1000次/24小时。要怎么实 现呢? 3 某个接口的并发配额是10次/秒,用不完的部分,可以在并发超过10次/秒的突发流量时使用。你会使用怎么样的策略来处理呢?

k8s集群

组建

 

管理

 

访问

gRPC框架

网络传输
数据包序列化
protoc插件

源码

 

PB

 

开发

服务运营

 

监控

 

告警

 

日志

 
 
缓存一致性
使用Cache Aside 策略,即更新数据时,先删除缓存,在读取时,发现没有缓存,则更新缓存
Loading...

© NotionNext 2021-2025