首页 > 其他分享 >高并发设计技术方案

高并发设计技术方案

时间:2024-08-07 14:39:48浏览次数:13  
标签:方案 负载 缓存 服务 数据库 并发 分表 设计 CDN

高并发设计技术方案

一、负载均衡

对于一些大型系统,一般会采用 DNS+四层负载+七层负载的方式进行多层次负载均衡

  • 算法:随机算法、轮询算法、轮询权重算法、一致性哈希算法、最小连接、自适应算法。

  • 负载均衡工具:LVS、Nginx、HAProxy

img

二、分布式微服务

常用微服务框架有:Spring Cloud 、Dubbo 、kubernetes、gRPC、Thrift

  • 按照业务划分服务,单个服务代码量小,业务单一,容易维护。
  • 每个微服务都有自己独立的基础组件,例如数据库。
  • 微服务之间的通信是通过HTTP协议或者私有协议,且具有容错能力。
  • 微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除。
  • 单个微服务能够集群化部署,有负载均衡的能力。
  • 整个微服务系统应该有完整的安全机制,包括用户验证,权限验证,资源保护。
  • 整个微服务系统有链路追踪的能力。
  • 有一套完整的实时日志系统。

img

三、缓存机制

性能不够,缓存来凑。要想快速提升性能,缓存肯定少不了,缓存能够带来性能的大幅提升。以 Memcache 为例,单台 Memcache 服务器简单的 key-value 查询能够达到 TPS 50000 以上,Redis性能数据是10W+ QPS。

img

  • 常见的缓存: 分为本地缓存分布式缓存,区别在与是否要走网络通讯。
  • 常见缓存策略:
    • Cache aside,通常会先更新数据库,然后再删除缓存,为了兜底还会设置缓存时间。
    • Read/Write through, 一般是由一个 Cache Provider 对外提供读写操作,应用程序不用感知操作的是缓存还是数据库。
    • Write behind,延迟写入,Cache Provider 每隔一段时间会批量写入数据库,大大提升写的效率。像操作系统的page cache也是类似机制。

四、分布式关系型数据库

  • MySQL数据库采用B+数索引,三层结构,为了保证IO性能,一般建议单表存储 千万 条数据。
  • 如果遇到单机数据库性能瓶颈,我们可以考虑分表。分表又可以细分为 垂直分表 和 水平分表 两种形式。

1、垂直分表

数据表垂直拆分就是纵向地把一张表中的列拆分到多个表,表由“宽”变“窄”,简单来讲,就是将大表拆成多张小表,一般会遵循以下几个原则:

  • 冷热分离,把常用的列放在一个表,不常用的放在一个表。
  • 字段更新、查询频次拆分。
  • 大字段列独立存放。
  • 关系紧密的列放在一起。

2、水平分表

表结构维持不变,对数据行进行切分,将表中的某些行切分到一张表中,而另外的某些行又切分到其他的表中,也就是说拆分后数据集的并集等于拆分前的数据集.

分库分表技术点:

  • SQl组合。因为是逻辑表名,需要按分表键计算对应的物理表编号,根据逻辑重新组装动态的SQL。
  • 数据库路由。如果采用分库,需要根据逻辑的分表编号计算数据库的编号。
  • 结果合并。如果查询没有传入指定的分表键,会全库执行,此时需要将结果合并再输出。

五、分布式消息队列

六、CDN

CDN 全称 (Content Delivery Network),内容分发网络。目的是在现有的网络中增加一层网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。

CDN = 镜像(Mirror)+缓存(Cache)+整体负载均衡(GSLB)。

CDN都以缓存网站中的静态数据为主,如:CSS、JS、图片和静态页面等数据。用户从主站服务器中请求到动态内容后,再从CDN下载静态数据,从而加速网页数据内容的下载速度。

img

标签:方案,负载,缓存,服务,数据库,并发,分表,设计,CDN
From: https://www.cnblogs.com/Jas0n0ss/p/18346988

相关文章

  • 浅谈AEB的安全设计与技术进化
    浅谈AEB的安全设计与技术进化一、AEB的功能安全需求从HARA角度进行AEB的功能安全分析,可以得出共识性最高的2个安全目标内容描述:非预期的制动过大和非预期的不可释放制动。随着下一步安全目标内容的分解,可以得出:1. 非预期的制动过大(含误触发)的争论点:包括了非预期的AEB触......
  • 程序设计部分 指针(三) 第1关:指针作为函数参数
    任务描述本关任务:计算一个数组中除最大数字之外的数字之和。相关知识指针形参指针既然也是一种数据类型,自然也可以作为函数的形式参数。一般使用指针来让函数能修改外部内容,或者传递体积比较大的内容,比如:voidSwap(int*a,int*b){  intt=*a;  *a=*b; ......
  • 程序设计部分 指针(三) 第2关:指针作为函数返回值
    任务描述本关任务:读取数据建立数组。相关知识指针作为函数返回值指针能作为函数参数,自然也能作为函数的返回值。不过需要注意的是,返回的指针不应该指向函数的局部变量,因为局部变量只在函数这一次被调用期间有效,如果返回了指向局部变量的指针,又在之后的程序中访问了这个指针......
  • 程序设计部分 函数的递归 第4关:使用递归进行自动分析
    任务描述本关任务:计算逆波兰表达式的值。相关知识放苹果问题把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?注意:5,1,1和1,5,1是同一种分法。我们可以先假设有一个函数count(m,n)能告诉我们m个苹果放n个盘子有多少种放法,然后在此基础上进行......
  • Java程序设计:Java IO(2)
    目录1实验名称2实验目的3实验源代码4实验运行结果图5总结1实验名称   JavaIO2实验目的    继续熟练掌握在eclipse中调试代码    掌握Java IO中流的基本概念及使用方法    掌握文件锁、Scanner解析文件的使用方法3实验源代......
  • Java程序设计:Java IO
    目录1实验名称2实验目的3实验源代码4实验运行结果图5总结1实验名称   JavaIO2实验目的    继续熟练掌握在IDEA中调试代码    掌握File类的基本使用    掌握Java IO中流的基本概念及使用方法    掌握文件IO流、缓冲流......
  • Java计算机毕业设计基于Android的公交线路状态查询系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速,公共交通系统成为了城市居民日常出行不可或缺的一部分。然而,传统的公交线路查询方式往往依赖于纸质地图、公交站牌或电话查询,这......
  • Java计算机毕业设计山西工程技术学院学生请假管理系统的设计与实现(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高校规模的不断扩大和学生管理需求的日益复杂化,传统的人工请假管理方式已难以满足高效、准确、便捷的管理要求。山西工程技术学院作为一所培养工......
  • Java计算机毕业设计个人博客微信小程序演示录像220239(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和智能手机的普及,个人博客作为一种重要的网络表达和信息分享方式,逐渐从传统的PC端向移动端延伸。微信小程序作为一种轻量级......
  • Java计算机毕业设计基于小程序急救知识教学平台PC端(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在紧急情况下,迅速而准确的急救措施往往能够挽救生命,减少伤残。然而,公众急救知识的普及率普遍较低,且传统的急救培训方式受限于时间、地点和资源,难以覆......