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

author author     2023-03-30     258

关键词:

通过学习《亿级流量网站架构核心技术》及《linux就该这么学》学习笔记及自己的感悟:架构设计之高可用高并发系统设计原则,架构设计包括墨

参考技术A 通过学习《亿级流量网站架构核心技术》及《linux就该这么学》学习笔记及自己的感悟:架构设计之高可用高并发系统设计原则,架构设计包括墨菲定律、康威定律和二八定律三大定律,而系统设计包括高并发原则、高可用和业务设计原则等。
架构设计三大定律
墨菲定律 – 任何事没有表面看起来那么简单 – 所有的事都会比预计的时间长 – 可能出错的事情总会出错 – 担心某种事情发生,那么它就更有可能发生
康威定律 – 系统架构师公司组织架构的反映 – 按照业务闭环进行系统拆分/组织架构划分,实现闭环、高内聚、低耦合,减少沟通成本 – 如果沟通出现问题,应该考虑进行系统和组织架构的调整 – 适合时机进行系统拆分,不要一开始就吧系统、服务拆分拆的非常细,虽然闭环,但是每个人维护的系统多,维护成本高 – 微服务架构的理论基础 – 康威定律https://yq.aliyun.com/articles/8611– 每个架构师都应该研究下康威定律http://36kr.com/p/5042735.html
二八定律 – 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
内存
磁盘:磁盘本身缓存、dirtyratio/dirtybackground_ratio、阵列卡本身缓存
并发化
2.高可用原则
降级
降级开关集中化管理:将开关配置信息推送到各个应用
可降级的多级读服务:如服务调用降级为只读本地缓存
开关前置化:如Nginx+lua(OpenResty)配置降级策略,引流流量;可基于此做灰度策略
业务降级:高并发下,保证核心功能,次要功能可由同步改为异步策略或屏蔽功能
限流
目的: 防止恶意请求攻击或超出系统峰值
实践:
恶意请求流量只访问到Cache
穿透后端应用的流量使用Nginx的limit处理
恶意IP使用Nginx Deny策略或者iptables拒绝
切流量
目的:屏蔽故障机器
实践:
DNS: 更改域名解析入口,如DNSPOD可以添加备用IP,正常IP故障时,会自主切换到备用地址;生效实践较慢
HttpDNS: 为了绕过运营商LocalDNS实现的精准流量调度
LVS/HaProxy/Nginx: 摘除故障节点
可回滚
发布版本失败时可随时快速回退到上一个稳定版本
3.业务设计原则
防重设计
幂等设计
流程定义
状态与状态机
后台系统操作可反馈
后台系统审批化
文档注释
备份
4.总结
先行规划和设计时有必要的,要对现有问题有方案,对未来有预案;欠下的技术债,迟早都是要还的。
本文作者为网易高级运维工程师

系统架构高可用系统设计原则01(代码片段)

...支持业务的快速恢复业务可以通过以上三个方面建立三、架构设计的原则:(1)无状态设计①无状态服务(statelessservice)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求... 查看详情

高并发高可用架构设计之简介

设计一个好的架构需要满足:高并发、高性能、高可用三个条件。举一个实际的例子,如高并发方面要求QPS大于10万;高性能方面要求请求延迟小于100ms;高可用方面要高于99.99%。注:QPS(QueryPerSecond):每秒请求数,就是说服务... 查看详情

高并发高可用架构设计之简介

设计一个好的架构需要满足:高并发、高性能、高可用三个条件。举一个实际的例子,如高并发方面要求QPS大于10万;高性能方面要求请求延迟小于100ms;高可用方面要高于99.99%。注:QPS(QueryPerSecond):每秒请求数,就是说服务... 查看详情

成为架构师课程系列怎样进行高性能高可用的高并发系统的设计?

为什么要学习高并发系统设计?在解答「为什么要学习高并发系统设计」之前,我想让你思考几个问题:在微博中,明星动辄拥有几千万甚至上亿的粉丝,你要怎么保证明星发布的内容让粉丝实时地看到呢?淘宝双十一,当你和... 查看详情

看过来!商城系统的三高(高并发高性能高可用)了解一下!

随着各大互联网公司业务需求的快速增长,业务架构已经不是一个新鲜词。业务的快速发展、业务量的持续增长、业务场景的日益复杂和差异化、业务需求的不断变化,都对平台架构和系统设计的演进提出了更多的挑战和更高的... 查看详情

高并发高可用架构设计之目录

简介架构图 查看详情

高并发高可用架构设计之目录

简介架构图 查看详情

架构设计手册(代码片段)

架构设计参考手册系统设计的一些原则在设计系统时,应该多思考墨菲定律在系统划分时,也要思考康威定律高并发原则高可用原则业务设计原则总结负载均衡与反向代理Nginx负载均衡算法失败重试健康检查备份上游服务... 查看详情

高并发系统设计三(提升性能)(代码片段)

...高并发”“高性能”“高可用”,它们是互联网系统架构设计永恒的主题。在前两节课中,我带你了解了高并发系统设计的含义,意义以及分层设计原则,接下来,我想带你整体了解一下高并发系统设计的目... 查看详情

谈如何设计一个秒杀系统(重点)(代码片段)

...求数尽量少、路径尽量短、依赖尽量少,不要有单点秒杀架构原则高可用整个系统架构需要满足高可用性,流量符合预期的时候肯定要稳定,就是超出预期也同样不能掉链子,保证秒杀产品顺利卖出。一致性数据必须一致,即成... 查看详情

李智慧·高并发架构实战课课程大纲

1开篇词|“附身”大厂架构师,身临其境设计高并发系统201|软件建模与文档:架构师怎样绘制系统架构蓝图?302|高并发架构设计方法:面对高并发,怎么对症下药?504|网页爬虫设计:如何下载千亿级网页?605|网盘系统设计:万... 查看详情

高并发大访问量架构设计演进之路归纳总结

 高并发大访问量架构设计演进之路归纳总结第01:大型架构的演进之路第02(上):分布式缓存第02(下):分布式缓存第03:分布式消息队列第04:分布式数据存储第05:分布式服务框架第06:高性能系统架构第07:高可用系... 查看详情

高并发高性能下的会员系统[同程艺龙]—高可用架构设计实践

目录会员系统[同程艺龙]—高可用架构设计实践ES高可用方案ES双中心主备集群架构ES流量隔离三集群架构ES集群深度优化提升会员Redis缓存方案Redis双中心多集群架构高可用会员主库方案MySQL双中心Partition集群方案会员主库平滑迁... 查看详情

《从0开始学架构》-第1部分-架构基础

目录01架构到底是指什么?02架构设计的历史背景03架构设计的目的04复杂度来源:高性能  单台计算机内部为了高性能带来的复杂度  多台计算机集群为了高性能带来的复杂度05复杂度来源:高可用  高可用... 查看详情

架构是啥,好吃吗?

...能(有点集群的意思)最终的结果很明显:分布式架构现成为了主流,高并发的最终解决方案认可了水平扩展即使单机的性能是有限的,但不可否认的是垂直扩展更方便,更 查看详情

java大型互联网-构建高并发和高可用的电商平台架构实践原理

并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。“高可用性”(HighAvailability)通常来描述一... 查看详情

面向业务的立体化高可用架构设计

面向业务的立体化高可用架构设计摘要:为了实现阿里九游游戏接入系统的业务高可用,技术人员跳出传统的面向系统的高可用的思路,转而从业务的角度来整体考虑高可用,最终实现了一套立体化的高可用架构,本文逐一展示... 查看详情

高并发系统设计:系统设计目标②系统怎样做到高可用?

...统,系统出现故障比系统性能低更损伤用户的使用体验。可用性的度量可用性是一个抽象的概念,你需要知道要如何来度量它,与之相关的概念是:MTBF和MTTR。MTBF(MeanTimeBetweenFailure)是平均故障间隔的意思,代表两次故障的间... 查看详情