摘要: 1、服务器集群、负载均衡 毫无疑问,程序写得再好,只能最大利用一台服务器的性能,让单台服务器能够支持更多的人访问请求。但别忘了,单台服务器性能再高也是有限的,带宽也是有限的,要想支撑更多的并发量,只能采用多服务器集群方式,每台服务器支撑一定数量的并发,这就是负载均衡概念。

看了很多文章,都是关注微观细节上优化,而我喜欢从大的往小的说。

1、服务器集群、负载均衡

毫无疑问,程序写得再好,只能最大利用一台服务器的性能,让单台服务器能够支持更多的人访问请求。但别忘了,单台服务器性能再高也是有限的,

带宽也是有限的,要想支撑更多的并发量,只能采用多服务器集群方式,每台服务器支撑一定数量的并发,这就是负载均衡概念。

负载均衡分为硬件负载均衡(如F5、dns负载均衡)和软件负载均衡(如Nginx/LVS/HAProxy),硬件级负载均衡转发到的必须是具有外部ip的服务器,而这台服务器又是一台软件负载均衡服务器,转发给内部局域网的多台服务器,最终接入web系统。

一般来说,一台搭建有Nginx/LVS/HAProxy 的软件负载均衡服务器,支撑的并发数在5万以内(理论最高值),正常在一半(2.5万)左右,要考虑并发量在千万级,那就需要400台以上的具有外部ip的软件负载均衡服务器。

2、web网站集群、缓存集群、session集群

每一台最终用户接入的服务器都部署完全一样的web服务,这些web程序虽然可以统一连接数据库作为数据全局共享,但是数据库连接操作影响了很大的性能,所以需要使用缓存数据提高性能,这些缓存数据可能分布在不同的服务器中,为了保持数据的一致性,必须同步共享。个人数据保存在Session中也一样,每台服务器保存的Session数据也需要同步。

这些数据的集群共享,已经有很多成熟的方案,比如 mecached session manager 等。

3、数据库集群

数据库服务器集群无非也是想达到负载均衡提高吞吐量的作用,传统的数据库如 MySQL /oracle/ sqlserver 等,可以采用分布式安装部署,通过分表分区技术达到负载均衡,但是,为了保护数据的一致性,只能均衡读操作的负载,无法均衡写操作的负载,也就是插入数据库时,还是采用只在中心服务器插入,然后复制到其他服务器,这就导致了瓶颈出现在中心服务器的插入性能上。

4、内存数据库

内存操作比传统数据库采用的磁盘读写操作,速度上不是一个量级的,如果中心数据库采用内存数据库,那么将会很好地解决插入瓶颈的问题,大大提高并发量。

gemfire是比较成熟商业化的内存数据库,现在已经有了开源版本,据说12306就是采用它,缺点是开发文档比较少。

mongodb是开源的比较有影响力的内存数据库,基于类json格式结构数据库,比较靠近关系型数据库,用于统计查询过滤的系统是很好的选择。

redis 是纯key-value的缓存数据库,结构比较单一,用作缓存比较合适。

5、缓存数据集群

缓存数据可以减少数据库的频繁操作,提高性能,但是为了保证数据的一致性,这些分布在不同服务器的缓存数据需要集群共享。

mecached 是不错的分布式缓存。

6、session集群

用户数据一般保存在session中,类似于缓存数据,Session数据也需要集群共享。

mecached session manager 是值得推荐的 集群Session方案。

7、独立文件存储服务器

说完了服务器集群,现在该说怎么优化单台服务器性能了。

下载文件,显示图片,这些都是占用很大带宽的资源,带宽不够,还会消耗cpu性能。

我们把文件和图片都保存到独立的文件服务器里,这样web服务器就会只负责运算和传输少量文字内容,显示图片或下载文件转向文件服务器,显示图片或下载文件慢也不会影响后面的用户操作,增加高并发量。当然,文件服务器也可以多台镜像服务器负载均衡提高下载速度。

8、html静态化

很多数据库里的固定资源(比如新闻内容)可以查询出来后转成html页面,这样就不需要每次都去查询数据库,直接访问html页面提高速度。

值得注意的是,html静态化只适用于某些特定场合,很多系统是无法静态化的,不要抱以太高的希望。

就这些了,可能还有些没想到的方面。

关注我写的开源框架  ErpCore & BigCore ,

下载源码到  http://www.8088net.com

承载千万级并发的分布式系统架构设计思想相关推荐

  1. 【大型分布式网站】抗住千万流量的大型分布式系统架构设计

    一.大型分布式网站架构技术 1.1 大型网站的特点 用户多,分布广泛 大流量,高并发 海量数据,服务高可用 安全环境恶劣,易受网络攻击 功能多,变更快,频繁发布 从小到大,渐进发展 以用户为中心 免费 ...

  2. 淘宝从百个并发到千万级并发情况下架构的十四次演进

    1.概述 本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则. ...

  3. 抗住千万流量的大型分布式系统架构设计

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 本文是学习大型分 ...

  4. 照抄不翻车:抗住千万流量的大型分布式系统架构设计

    作者介绍 烂猪皮,十余年工作经验,曾在 Google 等外企工作过几年,精通 Java.分布式架构.微服务架构以及数据库,最近正在研究大数据以及区块链,希望能突破到更高的境界. 本文是学习大型分布式网 ...

  5. 淘宝从几百到千万级并发的十四次架构演进之路!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:用好Java中的枚举,真的没有那么简单!个人原创+1博客:点击前往,查看更多 链接:https://segmen ...

  6. 淘宝千万级并发分布式架构的14次演进

    一.概述 本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则. ...

  7. 知乎技术分享:知乎千万级并发的高性能长连接网关技术实践

    本文来自知乎官方技术团队的"知乎技术专栏",感谢原作者faceair的无私分享. 1.引言 实时的响应总是让人兴奋的,就如你在微信里看到对方正在输入,如你在王者峡谷里一呼百应,如你 ...

  8. 千万级并发实现的秘密:内核不是解决方案,而是问题所在!

    既然我们已经解决了 C10K并发连接问题,应该如何提高水平支持千万级并发连接?你可能会说不可能.不,现在系统已经在用你可能不熟悉甚至激进的方式支持千万级别的并发连接. 要知道它是如何做到的,我们首先要 ...

  9. 千万级并发实现的秘密:内核不是解决方案而是问题所在!

    摘要:C10K问题让我们意识到:当并发连接达到10K时,选择不同的解决方案,笔记本性能可能会超过16核服务器.对于C10K问题,我们或绕过,或克服:然而随着并发逐渐增多,在这个后10K的时代里,你是否 ...

最新文章

  1. 使用Powershell 来创建新邮箱帐号
  2. 《JAVA与模式》之策略模式
  3. 【攻防世界009】流浪者
  4. AD20学习笔记5---PCB设计规则设置及PCB手工布线
  5. Cocos2d-x3.1TestCpp之NewRenderTest Demo分析
  6. 用Webbench进行网站压力测试
  7. 我就是一根儿筋 也许问题很简单
  8. design短语的用法总结_中考英语常考的重点句型及短语汇总,考前必备
  9. 小白记事本--链表--loading
  10. Atitit 部署了个webdav服务 as root 目录 1.1. WEB-INF copy to root dir only a web.xml use... 1 1.2. Java.ba
  11. 系统编程之文件IO(一)——概述
  12. 命令方块召唤别墅指令_我的世界:如何在MC召唤实体303?告示牌的数字,才是关键!...
  13. MFC自绘带背景颜色标题栏
  14. php编写的旅游网站
  15. navicat premium 快捷键
  16. Oracle数据库的整体结构
  17. Pixhawk RPi CM4 Baseboard 树莓派CM4安装Ubuntu20.04 server 配置ros mavros mavsdk
  18. 数据结构与算法常见笔试题
  19. Solar-PuTTY修改背景、字体颜色和字体大小
  20. 背景透明css样式,CSS 背景(background)+背景透明(CSS3)

热门文章

  1. 华为语音助手怎么关闭_一直觉得华为语音助手挺鸡肋的,直到用了这个功能!真香...
  2. Python_基础_5
  3. 8.局部变量/全局变量global/内嵌函数/闭包nonlocal
  4. 【Linux】39.nslookup查看域名与其对应的ip
  5. 《漫画算法2》源码整理-5 二维数组螺旋输出
  6. 被人画是怎样一种体验?
  7. 简明python教程 --C++程序员的视角(二):函数及作用域
  8. 图形处理(七)基于热传播的测地距离计算-Siggraph 2013
  9. 趣味编程:函数式链表的快速排序
  10. 快速了解Scala技术栈