服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - 架构高可用高并发系统的设计原则

架构高可用高并发系统的设计原则

2023-08-30 18:10未知服务器之家 Linux

导读 本文史学习开涛《亿级流量网站架构核心技术》一书学习笔记及自己的感悟:架构设计之高可用高并发系统设计原则,架构设计包括墨菲定律、康威定律和二八定律三大定律,而系统设计包括高并发原则、高可用和业务设计原

导读 本文史学习开涛《亿级流量网站架构核心技术》一书学习笔记及自己的感悟:架构设计之高可用高并发系统设计原则,架构设计包括墨菲定律、康威定律和二八定律三大定律,而系统设计包括高并发原则、高可用和业务设计原则等。
架构设计三大定律

墨菲定律 – 任何事没有表面看起来那么简单 – 所有的事都会比预计的时间长 – 可能出错的事情总会出错 – 担心某种事情发生,那么它就更有可能发生

康威定律 – 系统架构师公司组织架构的反映 – 按照业务闭环进行系统拆分/组织架构划分,实现闭环、高内聚、低耦合,减少沟通成本 – 如果沟通出现问题,应该考虑进行系统和组织架构的调整 – 适合时机进行系统拆分,不要一开始就吧系统、服务拆分拆的非常细,虽然闭环,但是每个人维护的系统多,维护成本高 – 微服务架构的理论基础 – 康威定律 – 每个架构师都应该研究下康威定律

二八定律 – 80%的结果取决于20%的原因

架构高可用高并发系统的设计原则

系统设计遵循的原则 1.高并发原则

无状态

  • 无状态应用,便于水平扩展
  • 有状态配置可通过配置中心实现无状态
  • 实践: Disconf、Yaconf、Zookpeer、Consul、Confd、Diamond、Xdiamond等

拆分

  • 系统维度:按照系统功能、业务拆分,如购物车,结算,订单等
  • 功能维度:对系统功能在做细粒度拆分
  • 读写维度:根据读写比例特征拆分;读多,可考虑多级缓存;写多,可考虑分库分表
  • AOP维度: 根据访问特征,按照AOP进行拆分,比如商品详情页可分为CDN、页面渲染系统,CDN就是一个AOP系统
  • 模块维度:对整体代码结构划分Web、Service、DAO

服务化

  • 服务化演进: 进程内服务-单机远程服务-集群手动注册服务-自动注册和发现服务-服务的分组、隔离、路由-服务治理
  • 考虑服务分组、隔离、限流、黑白名单、超时、重试机制、路由、故障补偿等
  • 实践:利用Nginx、HaProxy、LVS等实现负载均衡,ZooKeeper、Consul等实现自动注册和发现服

消息队列

  • 目的: 服务解耦(一对多消费)、异步处理、流量削峰缓冲等
  • 大流量缓冲: 牺牲强一致性,保证最终一致性(案例:库存扣减,现在Redis中做扣减,记录扣减日志,通过后台进程将扣减日志应用到DB)
  • 数据校对: 解决异步消息机制下消息丢失问题

数据异构

  • 数据异构: 通过消息队列机制接收数据变更,原子化存储
  • 数据闭环: 屏蔽多从数据来源,将数据异构存储,形成闭环

缓存银弹

  • 用户层:
    • DNS缓存
    • 浏览器DNS缓存
    • 操作系统DNS缓存
    • 本地DNS服务商缓存
    • DNS服务器缓存
    • 客户端缓存
    • 浏览器缓存(Expires、Cache-Control、Last-Modified、Etag)
    • App客户缓存(js/css/image…)
  • 代理层:
    • CDN缓存(一般基于ATS、Varnish、Nginx、Squid等构建,边缘节点-二级节点-中心节点-源站)
  • 接入层:
    • Opcache: 缓存PHP的Opcodes
    • Proxy_cache: 代理缓存,可以存储到/dev/shm或者SSD
    • FastCGI Cache
    • Nginx+Lua+Redis: 业务数据缓存
    • Nginx为例:
    • PHP为例:
  • 应用层:
    • 页面静态化
    • 业务数据缓存(Redis/Memcached/本地文件等)
    • 消息队列
  • 数据层:
    • NoSQL: Redis、Memcache、SSDB等
    • MySQL: Innodb/MyISAM等Query Cache、Key Cache、Innodb Buffer Size等
  • 系统层:
    • CPU : L1/L2/L3 Cache/NUMA
    • 内存
    • 磁盘:磁盘本身缓存、dirty ratio/dirtybackground_ratio、阵列卡本身缓存

并发化

2.高可用原则

降级

  • 降级开关集中化管理:将开关配置信息推送到各个应用
  • 可降级的多级读服务:如服务调用降级为只读本地缓存
  • 开关前置化:如Nginx+lua(OpenResty)配置降级策略,引流流量;可基于此做灰度策略
  • 业务降级:高并发下,保证核心功能,次要功能可由同步改为异步策略或屏蔽功能

限流

  • 目的: 防止恶意请求攻击或超出系统峰值
  • 实践:
    • 恶意请求流量只访问到Cache
    • 穿透后端应用的流量使用Nginx的limit处理
    • 恶意IP使用Nginx Deny策略或者iptables拒绝

切流量

  • 目的:屏蔽故障机器
  • 实践:
    • DNS: 更改域名解析入口,如DNSPOD可以添加备用IP,正常IP故障时,会自主切换到备用地址;生效实践较慢
    • HttpDNS: 为了绕过运营商LocalDNS实现的精准流量调度
    • LVS/HaProxy/Nginx: 摘除故障节点

可回滚

  • 发布版本失败时可随时快速回退到上一个稳定版本
3.业务设计原则
  • 防重设计
  • 幂等设计
  • 流程定义
  • 状态与状态机
  • 后台系统操作可反馈
  • 后台系统审批化
  • 文档注释
  • 备份
4.总结

先行规划和设计时有必要的,要对现有问题有方案,对未来有预案;欠下的技术债,迟早都是要还的。

本文作者为网易高 级运维工程师

文章来自微信公众号:云技术实践

原文来自: http://www.zzvips.com/uploads/allimg/


延伸 · 阅读

精彩推荐
  • LinuxLinux系统中的date时间日期命令使用教程

    Linux系统中的date时间日期命令使用教程

    这篇文章主要介绍了Linux系统中的date时间日期命令使用教程,用date查看和设置时间日期是Linux入门学习中的基础知识,需要的朋友可以参考下...

    Linux命令手册7002019-06-21
  • LinuxLinux用户宝典:值得一用的5款远程桌面应用程序

    Linux用户宝典:值得一用的5款远程桌面应用程序

    本文旨在帮助Linux用户选择最合适的远程桌面应用程序,以便与所选择的Linux发行版一起使用。...

    51CTO9872021-06-17
  • Linuxlinux中rz、sz命令的安装配置方法

    linux中rz、sz命令的安装配置方法

    这篇文章主要介绍了linux中rz、sz命令的安装配置方法,需要的朋友可以参考下 ...

    linux教程网4642019-11-05
  • Linux在Linux下生成crypt加密密码的方法

    在Linux下生成crypt加密密码的方法

    当我们用红帽Kickstart脚本或useradd或其他方式写东西的时候,经常会需要用到crypt命令加密生成的密码格式。那么,有没有其他方式可以生成这种格式的密码...

    Linux教程网7092019-12-29
  • LinuxLinux 内核 CD-ROM 驱动迎来新维护者

    Linux 内核 CD-ROM 驱动迎来新维护者

    在维护 Linux 内核 CD-ROM 驱动二十多年之后,同时担任 Linux Block 子系统维护者、IO_uring 首席开发者和其他角色的 Jens Axboe 在 8 月底宣布他正在寻找接管 CD-R...

    开源中国12372021-09-07
  • Linux致命的7个Linux命令

    致命的7个Linux命令

    如果你是一个 Linux 新手,在好奇心的驱使下,可能会去尝试从各个渠道获得的命令。以下是 7 个致命的 Linux 命令,轻则使你的数据造成丢失,重则使你的...

    Linux教程网9952021-10-08
  • LinuxLinux 配置WWW服务器全攻略

    Linux 配置WWW服务器全攻略

    本文主要讲解Linux 配置WWW服务器全攻略,有需要的朋友可以参考下...

    Linux教程网4902020-10-05
  • LinuxLinux的Socket IO模型趣解

    Linux的Socket IO模型趣解

    这篇文章主要通过一个幽默的方式为大家详细介绍了Linux的Socket IO模型,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Linux教程网11342021-11-26