学习记录html
一、适应多web服务器集群、数据库分布式集群的大型分布式系统
二、采用mongodb内存数据库,提升并发量
三、多服务器共享缓存、分布式共享Session
四、适应于软负载均衡(LVS/HAProxy/Nginx)和硬负载均衡等环境
五、能够以5000并发量/1亿条记录大数据为单位,线性扩展负载均衡服务器,支撑千万级pv并发java
1、引言mysql
一般咱们认为静态网页html的网站速度是最快的,可是自从有了动态网页以后,不少交互数据都从数据库查询而来,数据也是常常变化的,除了一些新闻资讯类的网站,使用html静态化来提升访问速度是不太现实的方案。咱们不得不在代码与数据库之间寻求一种更合适的分布式系统解决方案。linux
减小数据库访问次数,文件和数据库分离,大数据分布式存储,服务器的集群负载均衡,页面缓存的使用,nosql内存数据库代替关系型数据库,这些方案措施都是提升系统高并发性能的关键,构建分布式系统下面一一分解。web
2、分解sql
(1) 分布式服务器集群mongodb
A) 文件服务器集群数据库
图片、视频、其余下载文件,它们的下载一般是占用网络带宽的罪恶魁首,构建分布式系统时这些资源必定要独立放在带宽好的文件服务器上,能提供http协议访问地址使用,不至于在下载文件时影响web服务器的cpu运算。json
分布式系统文件服务器最好使用磁盘阵列中心存储,好比阿里云提供的文件云服务器,这样使用简单,使用多大带宽多大存储空间选择就行了。windows
若是没有中心存储,也能够作文件服务器集群,以下图
说白了就是每一个文件服务器都安装一个简单的web api做为文件传输和访问的接口,能够手动分配服务器地址给 web 程序使用,固然也能够作一层简单的负载均衡器供web程序统一接口调用。
须要注意的是:web api 接口上传文件结果必定要返回特定服务器完整的http文件下载地址,这个地址要存入数据库。
文件服务器的数量:分布式系统文件服务器之间都相对独立,没有数据关联,所以数量的多少主要是看带宽的承载量和硬盘空间的大小,动态扩展服务器后,只需把服务器地址加入 分布式系统web程序的调用列表便可达到无限扩展容量的机制。
B) Web服务器集群
不论是windows系统,仍是linux系统,单台服务器的性能和资源都是有限的,支持的链接并发数都有上限,所以必须采用多服务器集群的方法才能提升链接并发数。链接并发数的容量计算也很容易:
链接并发数= 服务器1并发数+服务器2并发数+……+ 服务器n并发数
固然,咱们不能都给每台web服务器分配一个域名地址访问,确定是同一个域名同一个入口,例如百度后面有成百上千台web服务器,可是咱们都是使用 www.baidu.com 一个入口,至于这个入口会自动给咱们分配一台web服务器访问,咱们不会在乎这台web服务器的具体地址是多少,这就是负载均衡器的做用。
可是,web服务器集群并不像文件服务器集群那么简单,由于web服务器的程序使用的数据是共享的,具备一致性和实时性的要求。
若是获取数据时都从数据库读取数据,能够保证数据的一致性,但数据量大时,影响性能而又不能保证明时性,这就是咱们后面说到的使用缓存技术解决这个问题。
Web服务器类型:微软的.net iis ,阿帕奇 tomcat 都是出名的轻量级web服务器
C) 数据库服务器集群
一般大型的关系型数据库 oracle ,mysql , sqlserver 都已经提供了集群的功能,可是,因为磁盘读写速度的限制,难以胜任高并发实时性的要求,咱们建议使用带有集群功能的内存数据库。
Mongodb内存数据库:
Mongodb是一个开源的nosql 内存数据库,基于json格式的文档存储,数据对象经过json的序列化与反序列化传输。在服务器内存足够大时,把全部的数据装载到内存中,便于快速访问;当内存不够大时,把不常使用的数据持久化到磁盘文件;最新版本的mongodb 3.0 已经提供了服务器集群的功能,而且引入了hadoop大数据的mapreduce并行运算模式,这让海量数据所有存储与多台服务器的内存上提供很好的解决方案。
如今服务器内存的硬件价格已经十分低廉,配置128G内存的服务器已经很广泛,可是咱们仍是建议一台服务器存储数据量不要超过1亿条记录,便于提升并行计算的效率。
在硬件充裕的状况下,分布式系统mongodb集群建议采用多副节点的集群模式,不只提升访问性能,也保证了数据安全完整性能。
Gemfire内存数据库
Gemfire是不少年前就已经商业化了的nosql内存数据库,通过了多家大型机构的使用考验,更幸运的是,在2015年4月发布其开源版本Geode,可能在不久的未来获得更普遍的使用。
除了开源nosql内存数据库,国内外的巨头都已经在研究本身的内存数据库,好比oracle, ibm , 阿里等等,nosql内存数据库大有代替关系型数据库的趋势。
构建分布式系统朋友们能够去研究每一个内存数据库的优劣势,无论使用那种产品,咱们无非就是解决两个问题:一、内存数据库保证快速访问;二、服务器集群存储大数据。至于如何搭建环境你们能够查找相关资料。
(2) 负载均衡器
负载均衡服务器分为硬件均衡服务器和软件均衡服务器,目的就是统一提供一个访问入口来访问服务器集群,而且可以动态监控每一个服务器的负载,把新的用户请求转给负载小的服务器。
硬件服务器就是直接购买独立的服务器做为负载均衡服务器,例如阿里云已经提供。
软件服务器使用具备代理功能的软件做为转发服务器,好比Nginx,HAProxy,LVS 等等,具体安装部署你们能够搜索相关资料。
(3) 缓存技术
从上面咱们能够看出,分布式系统web服务器与数据库服务器是分布在不一样的服务器上的,也就是web程序从数据库获取数据时,经过网络tcp/ip协议进行网络数据传输,当查询的数据量过大时,网络带宽速率极可能变为瓶颈,高并发在线时,将会很大影响总体系统的效率。
咱们使用缓存技术解决这个问题。这里就涉及到相关业务了,通常来讲,咱们根据具体的业务,把数据分为两类:
一、 一类是不常常变的数据,好比表结构,公共设置数据,省市县名录等等,这些数据咱们将会做为永久缓存数据,咱们将会一次性读取数据库所有记录缓存到web服务器本地长久保存,而且定时检测数据库是否有更新的数据,若是有更新,则再更新本地缓存数据;
二、 另外一类是常常变的数据,对于这种数据,须要每次读取时都从数据库读取,每每这类数据也包含海量的数据,读取数据库时将不能一次性读取,只能分页读取,缓存数据保存的时间也不宜太长。
缓存的工具也不少,好比 .net里自带的MemoryCache,java 的有 ehcache ,都是比较出名的缓存。
3、综合
综上所述,咱们就能够设计咱们的分布式系统总体方案图以下: