高并发高可靠性系统思考1

CPU不是瓶颈,网络才是;

墨菲定律:任何事情都没表面看起来那么简单;会出错的总会出错;

可靠性:

集群:无状态集群;有状态集群,很难处理,尽量剥离出状态部分做集中式部署,其他做无状态部署;

mater/slave,极端情况下快速切换,恢复系统的可用性,软件层面和硬件层面;

数据:raid磁盘阵列,双写(同步,可靠性高,影响效率;异步,可靠性低);

跨机房,跨网络(电信,移动),跨交换机部署;

限流/流量切换:超过系统预估负载能力时,可选择直接将部分请求丢弃,来保证部分用户的适用,一般在硬件或http服务器层面实现。一个系统中,可能不同的部分,其访问量是不同的,对于有极大瞬发访问量的系统,应该将其独立出来,防止瞬发高并发带来的风险扩散到小流量系统上;如通过域名分离秒杀系统的商品页,和普通商品页;

异步:大流量系统调用小流量系统时,可将瞬发的大流量请求异步化,平摊到小流量系统各个时段。关键点,中间件,确保系统做出的保证一定会成功。猜测支付宝与银行系统的交互即是此种方式;

系统化/服务化:将内聚性高的功能独立出来单独服务,专业的人做专业的事;系统间通过高性能web service框架通讯,有在保证功能、性能的情况下,极大提高系统可靠性;

降级:如果系统依赖了第三方服务,需要系统能在第三方服务宕机的情况下正常工作,尽量不做到对第三方系统的强依赖;

高并发:

单机:

应用层面的数据库优化:是否做读写分离,是否做分布式;合理的表设计,尽量避免大数据量表间的关联,可通过合理的数据冗余实现;合理区分冷热数据的存储;合理规划索引,参考sql执行计划,优化sql;纯数据库层面的,应该由相关专业人员完成;

业务层面:优化业务流程,使系统能通过更少的业务流程完成请求;

并发:大部分并发是可以通过合理的规划,避免竞态;无法避免的,尽量通过atomic包同步;

异步化:如果一个请求,需要非常长的业务流程才能完成,可将这一串业务流程分为必需和可延后的两部分,将必需的处理完成后,将可延后流程交给中间件去异步执行,系统依据中间件的可靠性保证语义,预先返回业务流程正常完成;

动静分离&异步:静态内容可通过缓存,动态内容实时调用;异步加载耗时长的内容,加快请求相应速度;

流量前置:本质是通过如缓存业务结果、cdn 等手段,将本来需要n个业务流程完成的请求,由<n个的业务流程完成处理;

缓存:jvm缓存/集中式缓存,jvm缓存无网络开销,但其在集群、和功能等方面较弱。宽泛来说,缓存可看做流量前置的一种手段。关键点:高命中率,缓存失效策略(此处更多考虑系统能否容忍不一致的情况)。缓存策略,和失效策略会极大影响缓存命中率,缓存策略一般遵循局部性原理(2-8原则),根据具体的业务逻辑设计。缓存还可用作容灾手段,缓存数据,在第三方系统异常的情况,作为数据的后备来源;

集群:尽量采用无状态架构,即使必需有状态,也尽量要将状态剥离,做单独的集中式部署。

负载均衡:f5,lvs。考虑使用的算法;lvs尽量采用响应流量由处理请求的服务器直接发送的方式,避免负载均衡成为系统的瓶颈;

分布式:没实际经验,感觉其规划层面和编码层面都比较难;

后续记录在实际系统中应用;

转载于:https://www.cnblogs.com/ze2200/p/4294322.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asp-Net-Core学习笔记:身份认证入门

前言过年前我又来更新了~我就说了最近不是在偷懒吧&#xff0c;其实这段时间还是有积累一些东西的&#xff0c;不过还没去整理……所以只能发以前没写完的一些笔记出来就当做是温习一下啦PS&#xff1a;之前说的红包封面我还没搞&#xff0c;得抓紧时间了最近在准备搞一个我之前…

第1章 大数据挖掘及应用概论

《大数据挖掘及应用》学习笔记。 第1章 大数据挖掘及应用概论 数据挖掘是数据分析的提升。 1.1 大数据智能分析处理的普及和应用 1.1.1 云计算(cloud computing) 云计算是一种按使用量付费的模式&#xff0c;这种模式提供可用的、便捷的、按需的网络访问&#xff0c;进入可配…

python手机自动化截图_python UI自动化截图对比

目前有个想法&#xff0c;就是将UI截图与自动化截图进行对比。不一致的情况下提示错误截图对比方法有&#xff1a;import cv2import numpy as np# 均值哈希算法def aHash(img):# 缩放为8*8img cv2.resize(img, (8, 8))# 转换为灰度图gray cv2.cvtColor(img, cv2.COLOR_BGR2GR…

浮点型数据的输出格式

2019独角兽企业重金招聘Python工程师标准>>> float的占位符为f%,默认输出六位小数&#xff0c;如果要限制位数的输出&#xff0c;可以用%.2f这样的格式&#xff0c;double同上。 如果是浮点型转换成整型不会进行四舍五入&#xff0c;浮点型的输出如果截取了位数进行…

linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)

一、介绍基于TCP协议通过socket实现网络编程常用API 1、读者如果不是很熟悉,可以先看我之前写的几篇博客,有socket,地址结构的理解,更加方便读者理解 地址分别是: 1)、http://blog.csdn.net/u011068702/article/details/56479927 2)、http://blog.csdn.net/u01106870…

VS2010下Boost1.55.0配置

为什么80%的码农都做不了架构师&#xff1f;>>> 打开程序菜单&#xff0c;选择Visual Studio Tools里面的 Visual Studio 命令提示。转到解压后的Boost所在目录&#xff0c;输入Bootstrap&#xff0c;执行完毕会生成b2.exe。输入&#xff08;目录下的bjam.exe和b2.…

Linux信号实践(3) --信号内核表示

信号在内核中的表示执行信号的处理动作称为信号递达&#xff08;Delivery&#xff09;&#xff0c;信号从产生到递达之间的状态&#xff0c;称为信号未决&#xff08;Pending&#xff09;。进程可以选择阻塞&#xff08;Block&#xff09;某个信号。被阻塞的信号产生时将保持在…

第2章 数据认知与预处理

《大数据挖掘及应用》学习笔记。 第2章 数据认知与预处理 2.1 数据分析的定义和流程 数据分析(data analysis)是指用适当的统计分析方法对收集来的大量数据进行分析和解释&#xff0c;提取出有用的信息形成结论&#xff0c;从而对数据加以详细研究和概括总结的过程。 2.1.1 如…

9 C++ Boost 多线程,线程同步

线程的创建 boost_thread,boost_system 多线程的创建 线程的参数传递 线程的创建方式 线程的join 加入join,回收线程线程中断 线程中断2, 线程组 boost 线程的死锁 boost 线程递归锁 线程互斥锁,线程同步 unique_lock 锁,离开作用域自动释放 unique_lock 锁 示例 2,可以显式的释…

命令注入_命令注入绕过方式总结

前言命令注入是web中常见的漏洞之一&#xff0c;由于web应用程序未对用户提交的数据做严格的过滤&#xff0c;导致用户输入可以直接被linux或windows系统当成命令执行&#xff0c;一般都会造成严重的危害。常用符号分号(;)多条语句顺序执行时的分割符号。1cmd1;cmd2管道符(|)cm…

linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

1、sendto和recvfrom函数介绍 sendto(经socket传送数据) 相关函数 send , sendmsg,recv , recvfrom , socket表头文件 #include < sys/types.h > #include < sys/socket.h >定义函数 int sendto ( int s , const void * msg, int len, unsigned int flags, const…

redis缓存设计要点随谈

在高并发系统中&#xff0c;缓存是必不可少的一部分。没有缓存对系统的加速和阻挡大量的请求直接落到系统的数据库&#xff0c;系统是很难撑住高并发的冲击。所以缓存设计是系统很关键的一环。1、缓存更新缓存的数据一般都是有有效期的&#xff0c;过了一段时间之后就会失效&am…

集合的结构示意图

转载于:https://blog.51cto.com/8467007/1364724

Java设计模式(8)组合模式(Composite模式)

Composite定义&#xff1a;将对象以树形结构组织起来&#xff0c;以达成“部分&#xff0d;整体” 的层次结构&#xff0c;使得客户端对单个对象和组合对象的使用具有一致性。Composite比较容易理解&#xff0c;想到Composite就应该想到树形结构图。组合体内这些对象都有共同接…

第1章 数据分析概述

《Python数据分析基础教程》学习笔记。 第1章 数据分析概述 1.1 数据的性质 1.1.1 数据的概念 所谓数据就是描述事物的符号&#xff0c;是对客观事物的性质、状态和相互关系等进行记载的物理符号或者是这些物理符号的组合。 在计算机系统中&#xff0c;各种文字、字母、数字符…

Android之通过adb shell getprop、netstat命令看dns、ip

1、查看dns 1)、输入adb shell 2 )、输入getprop ,查看配置 3)、getprop | grep dns 过滤dns 4) 、getprop | grep dns 输出dns 5) 、修改dns 需要root ,然后输入 adb shell 然后输

python testng_单元测试工具 TestNG 使用

写一篇小文&#xff0c;介绍一下 Java 下单元测试工具 TestNG 的使用&#xff0c;代码在 IDEA 环境在编写。单元测试&#xff0c;顾名思义&#xff0c;对系统中原子性的功能进行测试&#xff0c;一般情况下是单元测试是针对某个功能函数的测试。编写单元测试是系统开发中重要的…

AM335x kernel4.4.12 LCD 时钟翻转设置记录

TI AM335x kernel 4.4.12 LCD display 时钟翻转记录 因为公司硬件上已经确定LCD 转LVDS 转换芯片上确认以上升沿时钟为基准&#xff0c;所以只能在软件上调整相关东西。 入口在&#xff1a; drivers/gpu/drm/tilcdc/tilcdc_drv.c入口函数&#xff1a; module_init(tilcdc_drm_i…

Cache占用过多内存导致Linux系统内存不足问题排查

问题描述Linux服务器内存使用量超过阈值&#xff0c;触发报警。问题排查首先&#xff0c;通过free命令观察系统的内存使用情况&#xff0c;显示如下&#xff1a;total used free shared buffers cached Mem: 24675796 24587144 88652 …

第2章 Python与数据分析

《Python数据分析基础教程》学习笔记。 第2章 Python与数据分析 2.1 Python数据分析常用的类库 类库是用来实现各种功能的类的集合。 -1. NumPy NumPy(Numerical Python)是Python科学计算的基础包&#xff0c;提供以下功能&#xff1a; 快速高效的多维数组对象ndarrray是其…