分布式系统框架

学习记录

1、适应多web服务器集群、数据库分布式集群的大型分布式系统
2、采用mongodb内存数据库,提高并发量
3、多服务器共享缓存、分布式共享Session
4、适应于软负载均衡(LVS/HAProxy/Nginx)和硬负载均衡等环境
5、可以以5000并发量/1亿条记录大数据为单位,线性扩展负载均衡服务器,支撑千万级pv并发

【分布式系统框架】实现原理

一、引言

通常我们认为静态网页html的网站速度是最快的,但是自从有了动态网页之后,很多交互数据都从数据库查询而来,数据也是经常变化的,除了一些新闻资讯类的网站,使用html静态化来提高访问速度是不太现实的方案。我们不得不在代码与数据库之间寻求一种更合适的分布式系统解决方案。

减少数据库访问次数,文件和数据库分离,大数据分布式存储,服务器的集群负载均衡,页面缓存的使用,nosql内存数据库代替关系型数据库,这些方案措施都是提高系统高并发性能的关键,构建分布式系统下面一一分解。

二、分解

(1)       分布式服务器集群

A) 文件服务器集群

图片、视频、其他下载文件,它们的下载通常是占用网络带宽的罪恶魁首,构建分布式系统时这些资源一定要独立放在带宽好的文件服务器上,能提供http协议访问地址使用,不至于在下载文件时影响web服务器的cpu运算。

扫描二维码关注公众号,回复: 4983876 查看本文章

分布式系统文件服务器最好使用磁盘阵列中心存储,比如阿里云提供的文件云服务器,这样使用简单,使用多大带宽多大存储空间选择就好了。

如果没有中心存储,也可以做文件服务器集群,如下图

分布式大数据高并发的web开发框架

说白了就是每个文件服务器都安装一个简单的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亿条记录,便于提高并行计算的效率。

分布式系统大数据高并发的web开发框架 

在硬件充裕的情况下,分布式系统mongodb集群建议采用多副节点的集群模式,不仅提高访问性能,也保证了数据安全完整性能。

Gemfire内存数据库

Gemfire是很多年前就已经商业化了的nosql内存数据库,经过了多家大型机构的使用考验,更幸运的是,在2015年4月发布其开源版本Geode,可能在不久的将来得到更广泛的使用。

除了开源nosql内存数据库,国内外的巨头都已经在研究自己的内存数据库,比如oracle, ibm , 阿里等等,nosql内存数据库大有代替关系型数据库的趋势。

构建分布式系统朋友们可以去研究每个内存数据库的优劣势,不管使用那种产品,我们无非就是解决两个问题:1、内存数据库保证快速访问;2、服务器集群存储大数据。至于如何搭建环境大家可以查找相关资料。

(2)       负载均衡器

负载均衡服务器分为硬件均衡服务器和软件均衡服务器,目的就是统一提供一个访问入口来访问服务器集群,并且能够动态监控每个服务器的负载,把新的用户请求转给负载小的服务器。

硬件服务器就是直接购买独立的服务器作为负载均衡服务器,例如阿里云已经提供。

软件服务器使用具有代理功能的软件作为转发服务器,比如Nginx,HAProxy,LVS 等等,具体安装部署大家可以搜索相关资料。

(3)       缓存技术

从上面我们可以看出,分布式系统web服务器与数据库服务器是分布在不同的服务器上的,也就是web程序从数据库获取数据时,通过网络tcp/ip协议进行网络数据传输,当查询的数据量过大时,网络带宽速率很可能变为瓶颈,高并发在线时,将会很大影响整体系统的效率。

我们使用缓存技术解决这个问题。这里就涉及到相关业务了,一般来说,我们根据具体的业务,把数据分为两类:

1、  一类是不经常变的数据,比如表结构,公共设置数据,省市县名录等等,这些数据我们将会作为永久缓存数据,我们将会一次性读取数据库全部记录缓存到web服务器本地长久保存,并且定时检测数据库是否有更新的数据,如果有更新,则再更新本地缓存数据;

2、  另一类是经常变的数据,对于这种数据,需要每次读取时都从数据库读取,往往这类数据也包含海量的数据,读取数据库时将不能一次性读取,只能分页读取,缓存数据保存的时间也不宜太长。

缓存的工具也很多,比如 .net里自带的MemoryCache,java 的有 ehcache ,都是比较出名的缓存。

三、综合

综上所述,我们就可以设计我们的分布式系统整体方案图如下:

  分布式系统大数据高并发的web开发框架

 
 
出自:http://www.8088net.com/system.html

猜你喜欢

转载自www.cnblogs.com/nocry/p/10292068.html