大并发服务器开发学习笔记_01大并发服务器架构介绍

大并发服务器架构介绍

一、服务器设计目标
(1)高性能(High Performance):快速请求响应;
(2)高可用(High Availability):能7X24小时工作,能够进行故障转移;
(3)伸缩性(Scalability):能跨机器通信;
二、分布式
(1)负载均载
(2)分布式存储
(3)分布式计算

三、C/S结构

      任何网络系统都可以抽象为C/S结构

四、一个典型的服务器结构

      网络I/O + 服务器高性能编程技术 + 数据库

1.超出数据库连接数:
(1)问题描述:

  数据库并发连接数10个,应用服务器这边有1000个并发请求,将会有990个请求失败;

(2)解决方案:

  我们可以加一个队列进行排队,中间层DAL数据访问层(队列服务+连接池)。

2.超出时限:

(1)问题描述:

  数据库并发连接数10个,数据库1秒钟之内最能处理1000个请求,应用服务器这边有10000个并发请求,会出现0-10秒的等待;

(2)解决方案:

  主要的业务逻辑挪到应用服务器处理,数据库只做辅助的业务处理,利用缓存cache。

3.缓存更新(缓存同步)

(1)如果缓存失效(timeout),重新去数据库查询,这种方法实时性比较差;

(2)将热点数据存至缓存,一旦数据库中数据更新,立即通知前端的缓存更新,这种方法实时性比较高。

4.缓存换页:

  内存不够,将不活跃的数据换出内存。常见换出算法有:FIFO(先进先出) LRU(最近最少使用) LFU(最不频繁使用换出),这些在大家的操作系统课程中应该有介绍过。

5.nosql:

  key/value 存放非关系数据,一致性要求不是很高的数据,可以把nosql当做缓存来使用,比如分布式缓存开源软件:redis memcached等。

6.数据库读写分离:

  对大部分应用来说数据库的读操作,>写操作,对数据库进行负载均衡,master(主人) slave(奴隶)实现主从机制,主库负责写的操作,从库负责读的操作,利用大部分数据库都有的replication机制。

7.应用服务器的负载均衡:

 增加一个任务服务器来实现,任务服务器查询可以监视应用服务器当前的负载。如CPU高、IO高、并发高、内存换页高等情况。

(1)应用服务器被动接收任务:查询到这些信息之后,选取负载最低的服务器分配任务;
(2)应用服务器主动接收任务:更公平。

8.数据分区(分库、分表):
(1)垂直分区:分库,数据库可以按照一定的逻辑,把表分散到不同的数据库,如分为用户表、业务表、基础表;
(2)水平分区:如把用户表的10条记录分到10个数据库,每个数据库分到一条记录。这种方式更常用。

9.服务器性能的四大杀手:

(1)数据拷贝:尽量减少数据拷贝,服务器内部一些缓存解决;

(2)环境切换(理性创建线程): 该不该用多线程,单线程好还是多线程好,例如单核服务器(采用状态机编程,效率最佳) 采用多线程编程时不能并发,反而增加了线程间的切换开销;多核服务器使用多线程能够充分发挥多核服务器的性能;

(3)内存分配: 内存池;
(4)锁竞争:尽可能减少锁的竞争;

  欢迎大家学习交流,如有不足恳请批评指正,转载请注明出处,感谢您的支持。如果您也喜欢我的博客可以持续关注我,让我们一起成长,共同进步。

  生活很精彩 剔除杂质,留下对编程的穷极探索 纯粹追求。

时间: 2024-12-24 11:52:19

大并发服务器开发学习笔记_01大并发服务器架构介绍的相关文章

Kinect开发学习笔记之(一)Kinect介绍和应用

Kinect开发学习笔记之(一)Kinect介绍和应用 [email protected] http://blog.csdn.net/zouxy09 一.Kinect简单介绍 Kinectfor Xbox 360,简称 Kinect,是由微软开发,应用于Xbox 360 主机的周边设备.它让玩家不须要手持或踩踏控制器,而是使用语音指令或手势来操作 Xbox360 的系统界面.它也能捕捉玩家全身上下的动作,用身体来进行游戏,带给玩家"免控制器的游戏与娱乐体验".其在2010年11月4日于

ios7开发学习笔记-包括c oc 和ios介绍

请查看我的新浪资料分享 http://iask.sina.com.cn/u/2430843520 ios7开发学习笔记-包括c oc 和ios介绍,布布扣,bubuko.com

Android开发学习笔记之四大组件---Activity的介绍,创建以及生命周期

最近重新温习关于android开发的基础知识,还是分享到博客里,一方面分享给有需要的同学,一方面方便自己后期查看 一.什么是Activity 通俗来讲,一屏的界面就是一个Activity,套用比较教科的话,在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应.Activity之间通过Intent进行通信,Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View

C++ Primer 学习笔记_108(大结局!!!)_特殊工具与技术 --固有的不可移植的特征[下]

特殊工具与技术[大结局] --固有的不可移植的特征[下] 三.链接指示:extern "C" C++ 程序有时需要调用用其他程序设计语言编写的函数,最常见的一语言是C 语言.像任何名字一样,必须声明用其他语言编写的函数的名字,该声明必须指定返回类型和形参表.编译器按处理普通 C++ 函数一样的方式检查对外部语言函数的调用,但是,编译器一般必须产生不同的代码来调用用其他语言编写的函数.C++ 使用链接指示指出任意非 C++ 函数所用的语言. 1.声明非C++函数 链接指示不能出现在类定义

Lucas定理--大组合数取模 学习笔记

维基百科:https://en.wikipedia.org/wiki/Lucas%27_theorem?setlang=zh 参考:http://blog.csdn.net/pi9nc/article/details/9615359 http://hi.baidu.com/lq731371663/item/d7261b0b26e974faa010340f http://hi.baidu.com/j_mat/item/8e3a891c258c4fe9dceecaba 综合以上参考,我做的一下总结:

spss C# 二次开发 学习笔记(四)——Spss授权

Spss的授权方式有两种,单机版和网络版. Spss的激活,在联网的情况下,通过20位的激活码激活,在未联网的情况下,Spss根据机器获取一个类似4-XXXX的锁定码,然后由激活码和锁定码算出一个授权码,来激活程序. 整个激活过程,可以在IBM网站上处理,申请一个单号,然后注册,然后逐步操作,也可以直接打服务电话,由IBM相关人员帮助处理. 网络版的授权模式为,在证书服务器上安装证书授权管理程序,然后客户机通过证书服务器进行授权,允许在任意客户机上安装Spss并授权,但并发数目收到购买的数量的限

嵌入式开发学习笔记 ( java - c/c++ :从入门到入门 )

发现放到Blog之后排版全乱套了.. 已经把PDF上传到资源页了  http://download.csdn.net/detail/lyy289065406/8934637 那边排版好看一点...看官们随意吧 >...< · 目 录 导 航 1. 引言 1.1. 编写目的 1.2. 阅读范围 1.3. 声明 1.4. 缩写词/名词解释 1.5. 参考资料 2. 嵌入式开发学习笔记 2.1. 开发环境/测试环境 2.2. 开坑:提要 2.3. 入坑:JNI 2.3.1. navicate 接口定

Cocos Studio1.5.0.1开发学习笔记(一)

听说Cocos Studio很久了,主要是因为骨骼动画.目前看来Cocos2d-x播放动画的方式只有2种: 第一种:是播放序列帧动画,即将动画的每一帧都加载进缓存里,需要播放时再使用Animation类来播放,这种方法简单暴力,应对一些细节要求低的动画场景的时候,这么干无伤大雅.但是当动画帧数稍高的时候就会需要大量的图片,消耗资源很大. 第二种:是由Cocos2d-x提供的Action类来播放动画,这种动画是在帧循环中靠调整每次渲染的坐标来打到动画效果,由于帧循环是1/60秒刷新一次,会让这样播

Android开发学习笔记:数据存取之SQLite浅析

一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java.C++..Net等,还有ODBC接口,同样比起 Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的