互联网架构下的技术体现

高可用设计手段

单点故障

负载均衡技术

  • 硬件负载、F5、Netscalar

  • 软件负载、apach、nginx、lvs、Haproxy

    一个负载均衡服务器连接多台tomcat服务器

  • F5、stantBy。心跳线

  • nginx,lvs+keepalived(VRRP)-> VIP路由,一主多从。master【工作状态】/backup【候选者,选举】(心跳机制)

  • DNS轮询

负载均衡算法:随机、hash、轮询、最小连接数...

应用层负载

  • Ribbon、Gateway

热备

zookeeper/readis-sentinel/etct/redisCluster

Zab(paxos)/Raft/Raft/gossip 算法。

多机房部署

同城、异地

  • 跨机房状态同步

应用的可用性

微服务的集群部署

容错性

fail fast

服务隔离

代码容错处理

接口的设计

  • 数据的严谨性,数据的校验
  • 幂等性,事务处理(添加数据)
  • 重试(衰减重试、重试次数)。5s->10s->30s->1min->2min->5min

自我保护能力

熔断、限流、缓存

熔断:调用方法出现异常/出现多次异常—进行熔断,后续请求直接失败。

限流:限制TPS,拒绝超量的请求

缓存:减少数据库层面的压力

降级:高并发情况下,关掉不是核心的功能。提高核心功能的稳定性

监控

  • 系统资源(CPU、内存、磁盘),预警
  • 应用层面的分析:
    • 日志框架(系统执行情况,日志分析框架ELK…)。多系统情况下,错误码设计,不同系统设计不同的错误码,确保能够通过日志快速定位问题。
  • 告警
    • 告警方式:邮件(hitfix)、短信、电话通知 | AlertManager
    • 根据不同故障级别设置告警方式
    • 可以设置阈值,错误过多时/负载过高,进行告警。
  • 开源监控平台
    • 应用监控:应用吞吐量、访问量(应用中埋点、数据上报)| cat| 链路监控(A-B-C-D)跟踪链路,zipkin/sleum|pinpoint
    • 系统资源监控:metrics/InfuxDB/Grafana | promethues等

高并发设计

单位时间内能够同时处理的请求数量

RT:Response Time 响应时间

Throughput:吞吐量

QPS(TPS):每秒响应请求数,并发数/平均响应时间

并发数(用户)

用户体验

响应时间

瀑布流加载设计

支付->第三方。对接多个支付渠道-支付路由(限额、分流…)

异步化

架构层面

  • 微服务(服务拆分)
    • 减少单体架构带来的耦合度高问题。
    • 同时解决了应用的性能瓶颈问题,扩大应用计算资源。
    • 可以针对核心服务提供更大规模的集群
  • 关系型数据库
    • 数据分片(分库分表)
    • 读写分离
    • 扩容(水平、垂直)
  • 存储(非结构化存储)
    • redis
    • mongoDB
  • 服务的无状态化设计
    • 堆机器提升性能的方式,横向扩展
    • 以session为例,可以使用JWT将用户信息放在客户端存储,减小服务器压力,同时服务器扩展性提高
  • 分布式缓存
    • 热点数据做缓存
    • 抗高并发
  • 容量规划
    • 什么时候应该加机器
    • 当前吞吐量是多少
    • 承载多少容量?需要增加多少机器?
    • 最大的负载状态(CPU使用率、内存使用率、磁盘IO延时…)
    • 最大能够接受的请求阈值(qps、tps、ATR、错误率…)

异步化架构

最终一致性

异步队列

实时性要求不是很高的场景

冗余

增加副本

代码层面

  • 不要再for循环中调用rpc
  • HashMap,比如需要数量为十万级别。初始化容量为16,那么HashMap在运行中会频繁扩容,带来服务器开销压力
  • 数据的预热。将热数据保存到非结构化数据库中,提前加载,不走数据库。
  • 数据库层面,查询语句的优化
  • 异步化(线程池)
  • 内存的使用

中间件层面的优化

  • 中间件的扩容配置
  • NIO/AIO

客户端层面的优化

  • 减少请求数量(合并请求)

  • 数据缓存

存储层面

提升硬件

磁盘读写方式、缓存

服务的幂等性

多次请求对于数据的变化和一次请求带来的数据变化保持一致

  • get操作天然幂等

同一个用户的请求被发起多次(MQ重试)。数据的影响只产生一次,基于服务调用者的重试。可以使用redis来保存请求信息,如果此请求已经进来过,不进行处理

单线程锁

  • sychronized、Lock
  • 跨进程访问

分布式锁

  • Zookeeper(CP)
  • etcd(CP)
  • 数据库
  • redis(AP)

【无锁化设计】 -->结合场景考虑,尽可能不适用锁,使用锁会占用资源消耗性能

CAP:一致性、可用性、分区容错性

CAP-> CP强一致性

redis为AP模型不是强一致性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程大帅气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值