文档章节

学习分布式架构感悟

luoxiaojun1992
 luoxiaojun1992
发布于 2016/03/17 20:34
字数 1723
阅读 2232
收藏 173

随着公司业务规模的扩大,网站访问量日益剧增,最初的系统架构可能已经没办法满足业务发展的需求了。这时候就要考虑将系统架构改造成扩展性更强,能够承受更大访问量的分布式架构。

本文从大致三个方面谈谈分布式架构的概念、原理和相关的解决方案。为什么要做分布式?举个栗子,就好比原来城市的道路是双车道,同一时间只能容纳很小一部分车流量,但是改成多车道后,道路的容量就提升了几倍,网站也是相同的道理,用户的访问请求就是汽车,分布式架构就是在构建一个多车道的网站系统。接下来我们具体聊一聊各个层面的分布式技术解决方案。首先讲业务层的分布式,最简单的就是部署几台业务服务器,部署Apache或者Nginx,配置相同(vhost、域名解析、代码目录等),然后使用负载均衡技术将这几台服务器组成集群,达到对用户分流的效果。需要注意的是SESSION会话需要保存到数据库或者缓存系统中,保证SESSION的一致性,至于数据库,有统一的数据层,不需要担心数据不一致的问题。负载均衡有很多种解决方案,比较常见的是LVS(阿里巴巴章文嵩博士开发)、Nginx(阿里巴巴优化的Tengine)、HAProxy等。LVS是负责在4层网络实现负载均衡,有DR、隧道等方式,可以根据自身需求选择合适的方式。Nginx和HAProxy是负责7层网络的负载均衡,可以和LVS配合组成一套覆盖4层和7层网络的负载均衡解决方案。当然还可以配合Keepalived和Heartbeat等技术实现对后端业务服务器的健康检查,对出现故障的服务器,可以及时从集群中剔除,保证整个系统的高可用。如果还是不能满足流量的需求,还可以考虑在业务层的负载均衡之前再部署一套代理缓存服务器(Varnish、Squid等),代理缓存服务器也可以实现负载均衡,方法与业务服务器相同。

接下来谈谈服务层的分布式,与服务层相关的技术也有很多,比如SOA、Docker、Webservice、RPC、SOAP、消息队列(ActiveMQ、RabbitMQ、ZeroMQ、Kafka、Redis等)等,实现服务层的目的是降低系统的耦合度,便于扩展和维护,在必要时还可以降级提供服务,保证系统的高可用,提高系统的可靠性。目前比较流行的是Docker技术,许多互联网大厂,例如阿里巴巴、新浪云、网易云、灵雀云等都推出了基于Docker的云服务,没有推出Docker服务的也都在研发或者计划研发。网上关于Docker实现微服务的技术文章也有很多(Mesos、Kubernetes等),这里就不在赘述了。这些服务层技术都有各自内置的分布式解决方案可供选择,这里就不在详细展开论述了。

最后谈谈数据层的分布式,数据库可以简单地分为关系型数据库(SQL型)和非关系型数据库(NoSQL型)。最常用的关系型数据库是MySQL。MySQL的分布式技术有主从复制、分库分表等等。数据库的主从就是部署一台主数据库和若干台从数据库(具体数量可以根据业务需求决定),从数据库利用主数据库的bin日志同步数据,主数据库可以提供读写服务,从数据库只提供读的服务。但是,主从并不能缓解数据库的写入压力,可以采用分库分表的技术。分库指将数据库拆分几个小数据库(根据业务模块划分,比如订单模块、评论模块、购物车模块等),当然业务层也需要配合做调整才行。分表就更复杂一些,要对数据表做垂直拆分,比如会员表member有id、name、age、mobile、sex等字段,比如可以拆分成member1(id、name、age)和member2(id、mobile、sex),当然拆分方式和数量也需要根据实际的业务需求决定。由于数据表的拆分,会使业务层的逻辑变得十分复杂,因此一般采用MySQL分布式代理中间件,来完成对查询语句的适配,降低业务层的复杂度。比如Cobar是阿里巴巴开源的兼容MySQL协议的分布式数据库中间件,但是遇到join、group等查询时不能实现跨表。除此以外,也可以采用同城双活、异地多活等技术实现容灾备份。除了MySQL,还有MongoDB、Redis、Memcache等非关系型数据库。MongoDB有内置的分布式解决方案,比如主从(不推荐)、sharding和副本集,主副本集挂了,会自动选举新的主福本集,可以通过设置W和J参数保证数据的一致性和完整性。Redis本身也有内置的主从方案,类似MySQL的主从,也有豌豆荚公司开源的Codis数据库中间件,可以根据需要选用。Memcache本身不支持分布式,但是可以通过一些中间件,比如PHP的Memcached扩展(与Memcache扩展不同),或者自己用一致性hash算法实现。

除了后端的分布式技术,还有与前端相关的单个CDN、对象存储、块存储、多CDN等等技术。涉及到大数据,还有Hadoop、HDFS、Spark、Storm等技术的分布式解决方案。

总结一下,没有最完美的分布式结构,架构设计必须从业务需求出发,逐步演进,不断调整。但是遵循一些经验规律,可以为今后的扩展打下坚实的基础。在必要时可以选用云服务来降低架构实现的难度,也可以省去一部分研发和运维成本,专注于自己的核心业务系统的研发。最后声明,本人水平有限,请勿吐槽,如有建议,欢迎交流,如有雷同,纯属巧合。

 

© 著作权归作者所有

共有 人打赏支持
luoxiaojun1992
粉丝 10
博文 12
码字总数 7835
作品 0
后端工程师
私信 提问
加载中

评论(13)

luoxiaojun1992
luoxiaojun1992

引用来自“ivxivx1234”的评论

按列的拆分是垂直拆分
多谢,已更正!
i
ivxivx1234
按列的拆分是垂直拆分
ericsoul
ericsoul
多车道的距离不够贴切,加油站,收费站等都比多车道的举例要好
commonum
commonum
牛逼逼!
51pansou
51pansou
写的赞
小虫0302
小虫0302

引用来自“DavidWho”的评论

79说得很清晰,不涉及具体业务的架构思想,验证了很多自己的想法
haha
zcoder
zcoder
感谢分享 赞一个
tomener
tomener
写的深入点更好
baozhuni
baozhuni
空谈误国,实干兴邦
GuoYJ
GuoYJ
普及了很多知识79
【Web 渗透】【机器学习】【知识付费】【接口设计】| Chat · 预告

1 Web 渗透测试入门 作者简介: Mr.time,从事信息安全相关工作多年,长期进行风险评估、等保测评、渗透测试等项目的实施,有丰富的实战经验。 专注于研究web安全、熟知常见Web安全漏洞;目前...

gitchat
2017/11/30
0
0
学习分布式架构感悟

随着公司业务规模的扩大,网站访问量日益剧增,最初的系统架构可能已经没办法满足业务发展的需求了。这时候就要考虑将系统架构改造成扩展性更强,能够承受更大访问量的分布式架构。 本文从大...

问题达人
2016/03/31
48
0
双十二大前端工程师读书清单

本文最早为双十一而作,原标题“双 11 大前端工程师读书清单”,以付费的形式发布在 GitChat 上。发布之后在读者圈群聊中和读者进行了深入的交流,现免费分享到这里,不足之处欢迎指教,也可...

韩亦乐
2017/12/12
0
0
干货系列1:Java互联网网站开发工程师 的技术提高与晋升路线(技术专精)

前几天写了自己对于Java软件开发工程师职业发展规划方面的一些感悟,陆续收到一些反馈,希望我能再就Java工程师不同的开发(职责)方向谈谈职业发展问题。(上一篇:Java软件开发工程师的自我...

半饱即好
06/26
0
0
大型网站架构系列:20本技术书籍推荐

学习是技术人员成长的基础,本次分享20本技术方面的书籍,这些书不是每一本都是经典,但是每一本都有其特点。以下20本大部分本人都看过,因此推荐给大家。(本次推荐的20本只是一个参考,比如...

xumaojun
05/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

什么是自然语言处理技术

自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计...

本宫没空2
1分钟前
0
0
移动端关闭虚拟键盘

$("#select_date").focus(function(){ document.activeElement.blur(); });

niuhongxia
1分钟前
0
0
Ubuntu18.04安装RabbitMQ(正确安装)

1、安装erlang 由于rabbitMq需要erlang语言的支持,在安装rabbitMq之前需要安装erlang sudo apt-get install erlang-nox 2、安装Rabbitmq 更新源 sudo apt-get update 安装 sudo apt-get ins...

hansonwong
10分钟前
0
0
如何在以太坊开发发行自己的ERC-20数字货币

今天我将向你展示如何在以太坊区块链上开发你自己的加密货币并将其出售!我将向你展示如何使用以太坊智能合约逐步创建自己的ERC-20代币和众筹销售,如何测试智能合约,如何将智能合约部署到以...

geek12345
11分钟前
0
0
Vlock用于有多个用户访问控制台的共享 Linux 系统

当你在共享的系统上工作时,你可能不希望其他用户偷窥你的控制台中看你在做什么。如果是这样,我知道有个简单的技巧来锁定自己的会话,同时仍然允许其他用户在其他虚拟控制台上使用该系统。 ...

linuxprobe16
12分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部