来自知乎的一个大神的回答:https://zhuanlan.zhihu.com/p/38636111

高并发其实挺容易的,当你明白了一万并发的原理,然后扩展到百万、千万、亿万级很easy

要点有如下几项:

1、垂直分层:DNS层、跨机房部署、LVS+Nginx负载均衡,vanish+共享存储实现动静分离,Nginx后挂载N台服务器集群,服务器集群后挂载微服务化、微服务后挂载数据库分库分表+消息队列+任务调度,最后端挂载数据集群负责数据的统一归档+流计算+异步批处理

2、水平分区:根据业务划分业务线,每个业务线中设计分区键,根据userNo设计用户隔离,根据IP地址设计地区隔离,根据用户级别设计级别隔离,根据操作日期设计时间隔离,根据关键key进行hash散列,然后考虑一下分区的扩容、缩容、灾备、监控

3、数据同步,跨机房跨集群的困难点在于数据同步,有三种做法:

3.1)不同步,任由各子集群在自己的业务范围内运行

3.2)汇总集群,建立一个统一的数据汇总集群(如Hadoop\Spark\Kylin等),将数据汇总到统一的大数据集群中,再进行统计、汇总、运算等。缺点是会有时间差,短须5分钟,长须一天以上

3.3)远程数据同步,通过开源框架实现多个数据库的同步,例如阿里的otter,底层为canal,模拟mysql的从库,实现日志解析并数据库入库,时间差较短,如果网络没有太大问题,可在秒级完成数据同步。数据同步冲突算法有两种:单向回环补救、时间交集补救。一般推荐使用单向回环补救,即:如果发现数据库A与数据库B的同步时间差大于某个数值,则根据pk查询最新记录同步到数据库中。而另一种算法时间交集补救,是根据“时间交集”的定义,获得双方数据库的“时间交叉的操作”清单,然后根据此清单执行单向回环补救。此方法缺点为:a)开源版本中仅有单向回环补救;b)只支持mysql->mysql同步或者mysql->oracle同步。

集齐以上三件,基本上百万级并发就轻松搞定了。然后需要注意一些细节:

1)集群与集群之间要实现从入口开始的严格隔离,即DNS层->LVS层->Nginx层完全隔离

2)数据库的链接数是重要资源,一个mysql数据库可以提供1000链接,也就是说,按照50链接/每机器来计算,最多链接20个实例,硬上一下超不过30台。因此数据库层的分库分表一定要彻彻底底的分开。子集群之间不能互相链接数据库。

3)一些关键业务可以在缓存中操作,建议采用redis缓存。而memcache死机后数据丢失,mongodb功能尚不完善。redis的安全机制一定要做好,千万不能丢数据。缓存到数据库的存储可以采用计数形式,每隔N次操作存一次数据库,可以线性降低数据库压力

4)数据库只使用简单的存取功能,所有业务功能在代码层实现,DBA推荐的分区、分存储、存储过程等功能一般在数据仓库中是有用的,而在实时计算系统中,千万不要采用。否则你会看到你们几百人的开发团队等待一个DBA给你们排期的情况。

5)前端可以做一些小的手段,例如抽奖活动,可以在页面js中直接告诉用户未中奖,而并不通知后台,此为“基础不中奖率”,可以直接过滤掉90%以上的流量。(此功能请与产品团队好好沟通,从性价比上讲,这种小手段不提倡,但是性价比极高。)

6)消息队列系统建议采用一些堆积能力较强的系统,如:rocketmq,rabbit等,建议rocketmq,消息堆积能力之强,单机堆积上亿条。

7)日志系统建议kafka,日志系统之后可以增加storm,hdfs,logstash等配套设施

8)网卡流量问题需要严重关注,经常出现的问题是:在某个活动之间,redis网卡流量打满,导致redis无法访问,整个业务暂停。需要网络部门对公司内部的服务器路由有准确估算,出现分值之后可以妥善定位问题并修复,日常工作中也要做好规划,提前做好准备。

9)老生常谈的:断路器、限流、自动降级。断路器是指在RPC的客户端中实现如下功能:如果发现该断路器访问服务端在10秒内访问超过50次且失败率高于50%,则中断该断路器的访问10秒钟,以保护下游系统。自动降级就是:如果发生问题,自动切换到备用程序上,如报错、如访问redis失败改访问DB等。限流就是在RPC的服务端中实现如下功能:对每个IP、每个token进行限制,通过令牌桶算法,每个时间段只允许指定数量的服务通过,否则就拒绝服务调用。一般断路器使用hystrix,自动降级可以自行实现,也可以用hystrix的配套设施实现,限流比较简单自行实现即可。

这么一套下来,大概得三四百人,时间得四五年吧,估算一下:

工资成本两个亿

服务器预算一个亿

网络流量费、电费、机架费、安全监测费、域名费用、第三方采购费用......

大致可以这么说:如果一家公司计划三年内投入五个亿,还计算搞一番事业出来的,这套框架就够了,包你从QPS500到QPS10000到QPS1亿稳定运行。


但本文主旨不是要告诉你如何搭建一个亿万计的高并发系统,我的意思是:现在高并发技术烂大街了,每当我看到一个人和我吹嘘高并发多么多么牛,我心中总是泛起一丝怜悯。

想想战争年代的发报员

想想几十年前的司机

想想十年前的站长

想想五年前的国产操作系统

想想三年前的移动端开发

想想一年前的docker

。。。。。。

高并发只是一种类似的技术:使用场景少,价格高昂,好比屠龙之技,龙就那么几条,还都差不多被砍死了。随着相关资料的泛滥,将来它会是一门“出入江湖必备的手艺”,如太祖长拳一般的泛滥,不值一文。

高并发其实挺容易的,当你明白了一万并发的原理,然后扩展到百万、千万、亿万级很easy相关推荐

  1. 想设计亿万级高并发架构,你要先知道高并发是什么?

    当前,数字化在给企业带来业务创新,推动企业高速发展的同时,也给企业的IT软件系统带来了严峻的挑战.面对流量高峰,不同的企业是如何通过技术手段解决高并发难题的呢? 0.引言 软件系统有三个追求:高性能. ...

  2. 高并发架构系列:如何解决Redis雪崩、穿透、并发等5大难题

    别人用手机刷新闻.刷段子,你用手机刷知识.你会的越多,成功率就越高. 本篇分享大型网站高并发架构设计是如何解决Redis雪崩.穿透.并发等5大难题的,以下,enjoy~ 缓存雪崩 数据未加载到缓存中, ...

  3. 想设计亿万级高并发架构,你要先知道高并发是什么?(转载)

    当前,数字化在给企业带来业务创新,推动企业高速发展的同时,也给企业的IT软件系统带来了严峻的挑战.面对流量高峰,不同的企业是如何通过技术手段解决高并发难题的呢? 0.引言 软件系统有三个追求:高性能. ...

  4. nginx 转发慢_为啥 Nginx 能轻松淦到几万并发?

    Nginx以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名.本文了解一下 Nginx为什么这么快! ❝为了防止不提供原网址的转载,特加原文链接:ningg.top/nginx-series ...

  5. jvm性能调优实战 - 32一个10万并发的BI系统,如何定位和解决频繁Young GC问题?

    文章目录 Pre 模拟代码的JVM参数设置 示例Code 如何在windows上执行命令? 通过jstat观察程序的运行状态 Pre jvm性能调优实战 - 26一个每秒10万并发的系统如何频繁发生Y ...

  6. java并发核心知识体系精讲_Java 面试突击之 Java 并发知识基础 amp; 进阶考点全解析

    版权说明:本文内容根据 github 开源项目整理所得 项目地址: https://github.com/Snailclimb/JavaGuide​github.com 一.基础 什么是线程和进程? ...

  7. 100万并发连接服务器

    100万并发连接服务器笔记之准备篇 前言 测试一个非常简单服务器如何达到100万(1M=1024K连接)的并发连接,并且这些连接一旦连接上服务器,就不会断开,一直连着.  环境受限,没有服务器,刚开始 ...

  8. 阿里云云盾抗下全球最大DDoS攻击(5亿次请求,95万QPS HTTPS CC攻击) ,阿里百万级QPS资源调度系统,一般的服务器qps多少? QPS/TPS/并发量/系统吞吐量...

    阿里云云盾抗下全球最大DDoS攻击(5亿次请求,95万QPS HTTPS CC攻击) 作者:用户 来源:互联网 时间:2016-03-30 13:32:40 安全流量事件https互联网资源 摘要:  ...

  9. php100万并发怎么优化,百万并发处理-100个并发需要多少带宽

    您的意思是用户总数或并发访问的数量,如果这是用户总数,则并发访问的数量应该很小,并且不需要太多带宽. 如果是同时访问的次数,就是这样. 假设平均页面大小为30K,要求每个页面在两秒内打开,因此每个页面 ...

最新文章

  1. PUSH进栈指令和POP出栈指令
  2. Ansible相关工具介绍、实例演示
  3. C++:12---运算符重载
  4. LeetCode 452. 用最少数量的箭打破气球(贪心)
  5. locktty锁终端的方法
  6. CenterNet原理详解
  7. 老肖有话说:如期而至的Swarm新工具Crane开源解读
  8. ASP.NET中登录功能的简单逻辑设计
  9. 织梦mysql安装教程视频教程_dedecms织梦模板安装教程视频/图文步骤(模板秀出品)...
  10. 业余剪辑——从拍摄到剪辑到加字幕
  11. 【51/STM32】详解控制系统中的继电器
  12. 五百万微商都在用微信智能获客小程序,你还不加入?
  13. PermissionError: [Errno 1] Operation not permitted: '../middle_result/df_cleaned.csv'
  14. 文献阅读---对β-三酮除草剂具有广谱抗性的一个水稻基因研究
  15. VC的监视窗口等调试窗口的使用
  16. css中的单位换算_css 长度单位转换器
  17. 岭南师范学院计算机证书,2017年岭南师范学院全国计算机等级考试网上报考通知第48次报考程序...
  18. “xxx”does not name a type 错误
  19. 进行数据分析时如何提高留存?
  20. java scp 上传文件_java基于Scp实现Linux下远程获取、上传文件

热门文章

  1. 使用IntelliJ IDEA搭建kafka源码环境时遇到Output path错误解决办法
  2. 分享一下杭州医院的看病流程(我去的杭州市第三人民医院)
  3. 关于最新版mumu模拟器(2.2.16)安装xposed框架
  4. 三阶魔方大中小魔公式_三阶魔方还原公式
  5. python运维脚本简书_通过python+selenium3实现浏览器刷简书文章阅读量
  6. 论文笔记-Understanding Convolution for Semantic Segmentation
  7. Linux内核之misc框架
  8. LeetCode:14. Longest Commen Prefix(Easy)
  9. 如何使用Keil5中的虚拟示波器进行软件仿真
  10. 国密算法 SM4 对称加密 分组密码 python实现完整代码