互联网架构(二)互联网架构下的核心技术

互联网架构下的核心技术

高可用设计

架构可用性

单点故障

集群(负载均衡技术)

  • 硬件负载:F5、Netscalar
  • 软件负载:apache、nginx、lvs、Haproxy

F5的高可用通过standBy建立心跳线,如果主服务挂掉,通过心跳线启用备用的服务。

Nginx通过lvs+keepalived 实现一主多从的机构来保证高可用。

热备

同时启动多台相同服务,提供服务的只用一台。
zookeeper / redis-sentiel / etcd
Zab(Paxos)Raft(etcd/nacos/redis-sentinel)/ Raft / gossip 提供数据一致性算法,保证高可用

多机房部署

应用的可用性

微服务的集群部署,不仅提高可用性还会提升性能

容错性

  • fall fast
  • 服务隔离
  • 代码容错处理
    • 数据的严谨性、数据的校验
    • 幂等行,事务处理(数据)

自我保护能力

  • 熔断(降级)
  • 限流(降级)
  • 缓存(主动降级)

监控

  • 系统资源(CPU、内存、磁盘)
  • 应用层面分析:log4j(系统执行情况):ELK (日志收集分析)->错误码设计。
  • 告警:设置告警规则,Alertmanager
  • 应用监控:应用吞吐量、访问量,cat、链路监控
  • 系统资源:

高并发

架构层面

  • 微服务:将服务进行拆分,针对性能瓶颈计算资源。针对核心服务提供更大规模的集群。
  • 数据库分片(分库分表)、读写分离
  • 使用非结构化存储
  • 服务的无状态化设计(堆机器提升性能)
  • 分布式缓存(热点数据做缓存)
  • 容量规划

异步化架构

异步队列
实时性要求不是很高的场景

代码层面

  1. 不要在for循环中调用rpc
  2. hashmap初始化
  3. 数据的预热
  4. 数据库层面、查询语句的优化
  5. 异步化(线程池的使用)
  6. 内存的使用

服务的无状态化

  • session会话 ->> redis
  • 数据的存储 -> A节点上存储 -->第三方节点
  • 对象存储->A节点上存储 -->第三方节点
  • 缓存A节点上的存储

服务负载均衡

集群的好处:

1. 流量分发
2. 扩容与缩容

负载均衡

  • DNS轮询
  • 二层负载(MAC)
  • 三层负载(IP)
  • 四层负载(IP+prot)-> nginx
    F5/LVS/Nginx/HAProxy
  • 七层负载:应用层负载。HTTP协议中的东西,URI
    Nginx/apache
  • Gateway

应用层负载

实现负载均衡的组件Ribbon、Dubbo、SpringCloud LoadBalancer

服务的幂等性

多次请求对于数据的变化和一次请求带来的数据变化保持一致
get操作天然幂等
- 状态机的幂等:一个数据在整个生命周期中所经历的状态
- 数据库的唯一约束
- token

reids实现幂等:setNx(key、value)
setNx():多个进程调用这个方法的时候,只会有一个进程返回1,其他的返回0;

猜你喜欢

转载自blog.csdn.net/baidu_41934937/article/details/108979329