架构基本思想
成长的本质就是不断破墙而出的认知觉醒!
你以为你以为的就是你以为的吗?
——《这不是我的》
隔离
微服务的本质是隔离!
业务隔离
业务分离
层次隔离
服务隔离
动静隔离
读写分离
轻重分离
核心隔离
快慢隔离
冷热隔离
物理隔离
线程隔离
进程隔离
集群隔离
提效
微服务的目标是提效
开发效率
模块化
短信、push、消息、支付、订单……
规范化
- 开发规范
- 代码规范
- 日志规范
- 架构规范
工具化
- 通用jar包(orm、utils)
- 脚手架
- springboot:https://start.spring.io
- elementui:vue-cli
- 插件(maven、chrome、ide)
平台化
- 日志平台
- 链路追踪平台
- 监控平台
- 服务治理平台
- 定时任务平台
- 实时计算平台
测试效率
单元测试
junit
mocktio
流量染色
流量染色是指根据流量协议设置对应的流量染色规则,对指定的流量进行染色标记,并在整个调用链中携带该标记。通过染色流量可以对特定的流量进行跟踪和路由
发布效率
- CI/CD
- Jenkins
- GitLab CI
- Travis CI
- CR
- Gerrit
- 部署方式
- 金丝雀发布(灰度部署)
- 蓝绿发布
- 滚动部署
运维效率
- 全链路追踪
- Skywalking
- ZipKin
- Pinpoint
- 统一日志平台
- ELK
- Graylog
- Loki
- 统一监控平台
- Promethues
- 在线JVM诊断平台
- Arthas(阿里)
- Bistoury(去哪儿)
- 服务治理平台
- 服务注册
- 服务发现
稳定
微服务的保障是稳定
超时保护
没有什么比挂起的请求 和无响应的界面更令人失望。这不仅浪 费资源,而且还会让用户体验变得更差。良好 的超时策略,可以尽可能让服务不堆积请求。
超时设置:设置过长,会造成线程阻塞,可能会造成OOM,设置过短会造成频繁失败。
nginx
RPC
httpClient
db
超时传递:一个请求每个阶段开始前就要检查是否还有足够的剩余来处理请求。
http的header里填充req-timeout字段,在设置httpClient的时候动态设置上timeOut。
过载保护
系统过载是指当前的外部请求量超过了系统的最大处理能力。其最终目标是在系统过载时,服务还能提供一个稳定的较高的处理能力。
- 过载预防:
- 压测
- 过载处置
- 监控告警
- 弹性扩容
- 限流、熔断、降级
- 过载恢复
- 无状态应用:快速重启
- 有状态应用:按一定策略将状态持久化,重启之后加载持久化的状态数据,状态恢复。
限流
限流算法:
- 令牌桶算法
- 漏斗算法
限流实现:
- 单机限流(guava)
- 分布式限流( redis+LUA)
- 平台限流( sentinel)
熔断降级
- 断路器模式
- 舱壁隔离模式
重试策略
故障转移(Failover)
快速失败(Failfast)
安全失败(Failsafe)
沉默失败(Failsilent)
故障恢复(Failback)
并行调用(Forking)
广播调用(Broadcast)
负载均衡
轮循均衡(Round Robin)
权重轮循均衡(Weighted Round Robin)
随机均衡(Random)
权重随机均衡(Weighted Random)
一致性哈希均衡(Consistency Hash)
响应速度均衡(Response Time)
最少连接数均衡(Least Connection)
混沌工程
混沌工程是一种帮助我们获得更多的关于系统的新认知的实验方法。
它也可以视为流感疫苗,故意将有害物质注入体内以防止未来疾病,这似乎很疯狂,但这种方法也适用于分布式云系统。混沌工程会将故障注入系统以测试系统对其的响应。这使公司能够为宕机做准备,并在宕机发生之前将其影响降至最低。
← 比较两个JavaBean 架构理论 →