2019-10-15 18:16:01 卢浮宫 版权声明:本文为站长原创文章,转载请写明出处
什么是分布式系统?
传统系统的三层架构,项目项目跑在一个tomcat(还有其他形式)中,但是随着业务及客户的增加,单个服务器是无法满足需求的。
这个时候按照功能点把系统拆分成多个功能模块同时为某些模块(节点)分配服务器,然后构建服务器之间的通信协同工作完成业务操作。
这就可以称之为分布式。
1、集群
简单来说集群就是多个人做同一个事情。比如随着用户量增大,你担心你的网站挂掉,然后你买了三个服务器同时跑你的项目,
通过负载均衡在一个挂掉后指向另一个服务器以保证用户正常访问。
2、分布式
随着业务的增加,你的网站从单一的文字浏览增加到用户注册、用户订阅、留言、搜索...同时又是在单一的服务器。
那么在某个用户注册峰值时就可能回影响到其他模块的体验,或则你的服务器不能同时满足多个模块的同时高效工作。这个时候你
把聊天,浏览,搜索单独拆分出来并分配服务器。这就是分布式
3、一个很有意思的图(侵删)
1、优点
①增大了系统容量
简而言之就是业务太多,一台机器已经无法满足需求了。使用分布式系统以缓解这一问题。
②增强系统的可用性
一个大型的系统是不允许存在单点故障的(一点出错,整个系统崩了)。分布式可以在某些节点出错时继续使用。
从某种角度说,这分散了软件系统的故障影响,但是增加了硬件出错的概率。
③提升模块重用度
单独模块可以提取单独复用
④开发效率高
可以并行开发以提升效率
2、缺点
①项目架构复杂度增加
②部署量增加
③节点之间通信一定程度上增加响应时间
④项目维护复杂度增加
1、当服务越来越多时,相应的URL增加导致分配越来越困难
2、随着业务的发展,服务间的依赖关系会越来越复杂
3、随着服务的增加,容量问题暴露,需要多少机器支撑?什么时候增加机器?
4、服务越来越多,沟通成本也会越来越大。如:参数约定等
5、问题排查,出现问题后应该找谁?
6、核心功能出现问题后故障影响过大。
1、负载均衡:控制网关进行请求分发
Nginx:高性能、高并发的web服务器;功能包括负载均衡、反向代理、静态内容缓存、访问控制;工作在应用层
LVS: Linux virtual server,基于集群技术和Linux操作系统实现一个高性能、高可用的服务器;工作在网络层
2、负载均衡算法
常用的分布式算法有:随机、轮询、最小资源数、hash
3、分布式缓存
当DB负载过高时既要为机器增加缓存以减轻DB压力
常用的分布式缓存有:memcache、redis等
4、分布式文件系统
项目中资源文件共享。
常用的分布式文件系统:MogileFS/TFS/HDFS/Amazon S3/OpenStack Swift等
PS:可以使用CDN或第三方支持解决效率问题
5、分布式RPC
分布式一个很基础的问题就是通信。机器之间的底层通信是TCP/IP,Socket。
其实现的最简单的就是http。同时也有一个RPC框架
如Facebook的Thrift, 阿里的Dubbo,点评的Pigeon等
6、分布式数据库
一个良好的分布式数据库会设计到分库、分表。同时业界也有比较成熟的解决方案。
这里引入几个概念:
7、分布式消息中间件
主要用于解决异步消息、应用耦合、流量削峰等问题。
比较常用的有:老一辈的ActiveMQ/RabbitMQ, 新一点的,阿里的RocketMQ,LinkedIn的Kafka等
8、分布式session
分布式session把session存放在所有Tomcat(也可以是其他形式)都可以访问的地方。
比较常用的有:分布式缓存session,保存到数据库,主从复制,session服务器等。