分布式框架搭建

Posted cd-frank

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式框架搭建相关的知识,希望对你有一定的参考价值。

明确问题:

  (1)什么时候需要使用分布式 ?

  (2)分布式的实现?

  (2)做分布式我们需要注意什么?

第一点:

首先我们来说说什么时候我们需要使用到分布式,当项目集成越来越多,越来越庞大,单一服务器性能(数据库)不能满足数据读写及时响应的时候。

在说分布式的实现之前我们先看看基本的一些优化处理方式(对于项目的二次升级改变不大但有效的方式):

优化处理之前我们看看IO,内存,CPU,网络是否有瓶颈存在,再看看数据库中sql查询所使用的Max(Time),然后再是下面的基础处理

  (1)数据库的读写分离,减轻数据库的压力 →  读写分离对性能的影响原理

  (2)对于较大数据报表sql的查询统计定时缓存

  (3)数据库的表的记录在超过一定数量后性能下降严重,因此要维持单表数据量不过高,分表(年份来进行水平分表或者定量)

  (4)一个表的所有字段都是固定长度类型的,那么它就是定长表,定长表比动态长度表查询性能要高

更新中...

第二点:

分布式的实现:

(1)垂直扩展:即将一个大的系统进行模块划分,每一个都可以当成一个相对独立的子系统,每个独立的系统都可以做成一个服务器集群,使用nginx作反向代理,keepalived保证高可用性

技术分享图片

 

(2)水平扩展绝大多数都是针对数据存储(包括地区),我的见解:突破单节点数据库服务器的 I/O 能力限制,【数据库集群(学习中)】

技术分享图片

 

数据库水平拆分简单说来就是先将原数据库里的一张表在做垂直拆分出来放置在单独的数据库和单独的表里后更进一步的把本来是一个整体的表进一步拆分成多张表,每一张表都用独立的数据库进行存储

当表被水平拆分后,原数据表成为了一个逻辑的概念,而这个逻辑表的业务含义需要多张物理表协同完成,因此数据库的表被水平拆分后,那么我们对这张表的操作已经超出了数据库本身提供给我们现有的手段,换句话说我们对表的操作会超出数据库本身所拥有的处理能力,这个时候我就需要设计相关的方案来弥补数据库缺失的能力,这就是数据库水平拆分最大的技术难点  链接地址

Cobar、Atlas

第三点:

做分布式我们需要考虑注意的问题:

(1)数据的一致性(待改进)

  读写分离主从库数据的一致性,

(2)登录用户的Session同步

  教案众多,目前倾向的是Redis存储登录信息进行验证(IP+用户信息)比对Redis队列存储信息验证是否登录以及过期剔除

(3)反向代理负载均衡集群

  Nginx作为反向代理 Nginx基础版,需要搞定灾备处理

(4)数据库集群

  到了最后不得不对上亿以上的单表进行拆分了,每月或者每年数据新表方案,ID范围划分方案,数据库集群存储方案

(5)分布式事务的一致性

  文档1文档2

更新中...

 

参考博客:

http://www.cnblogs.com/yanweidie/p/4719692.html

http://www.roncoo.com/article/detail/131958#0-sqq-1-1579-9737f6f9e09dfaf5d3fd14d775bfee85

http://www.codes51.com/itwd/4270653.html

http://blog.csdn.net/hudashi/article/details/51007907

http://blog.csdn.net/xiongping_/article/details/47082609

 

以上是关于分布式框架搭建的主要内容,如果未能解决你的问题,请参考以下文章

基于 xNet 通信框架搭建的简易分布式系统 Demo ~~

Idea搭建Apache Dubbo开源分布式服务框架

UWA学堂上新|支持HotFix的分布式服务器框架搭建

dubbo分布式服务框架入门

微服务中基于Spring Boot的maven分布式项目框架的搭建

分布式日志框架之ExceptionLess:自行搭建帮助文档翻译