分布式系统概要和用到的技术

分布式几个经常使用概念html

1. 分布式和集群
分布式和集群在一般状况下不作严格区分,正如同并发和并行同样,应用状况下不多会去考究它的区别,许多大公司面试也直接问分布式集群怎样怎样,通常都拿等同来说了。在这里只在概念上作一下区别,使你们更合理的去理解,没有对错之分。
分布式:一个电商系统,用户模块部署在server1, 订单模块部署在server2, 促销模块部署在server3, 商品模块部署在server4,他们之间经过远程rpc实现服务调用,这就叫分布式。强调的是不一样功能模块,单独部署在不一样的server上,全部server加起来是一个完整的系统。mysql

集群:更多强调的是灾备,一个电商系统,完整的部署在server1上一个,完成的部署在server2上一个,server1宕机后,server2仍然能够正常提供请求服务,这叫集群。一样对于某一功能模块,好比用户模块部署在server1上,一样部署在server2上,也叫作集群。分布式系统的每一个功能模块节点,均可以用多机作成集群。nginx

抽象问题具体化:拿作菜示例,假如一个厨师作菜要经历切菜,炒菜两个功能,饭店为了提升速度招了两个厨师,每一个厨师的工做同样,都是切菜,炒菜,这是集群。还有另外一种方法提升效率,饭店招了一个切菜师傅,配合厨师,厨师无论切菜,只管炒菜了,和切菜师傅共同配合把菜作好,这叫分布式。web


2. nginx
做用是反向代理和负载均衡。
反向代理是指请求真实是到server1的,可是系统中为了统一或者作好比单点登陆,会在server2服务器上安装一个nginx,里面配置到server1的反向代理,那么以后请求url就能够写server2的地址,发出后到server2, server2会转发到server1上,相似一种代理的模式。面试

负载均衡是指若是一个系统的请求不少,咱们能够把请求转发到不一样的服务器上,用来分流。就相似于接了一个水管放水,水流量很大时候,水压大极可能会让一个水管爆炸,这时候接三个水管,就没问题了(这三个水管就是一个集群)。相似的在nginx服务器中配了3个tomcat服务器,每一个tomcat服务器上都部署了整个系统,那么当请求数大的时候,能够分发到不一样的tomcat。(其实这里每一个tomcat上部署同一个功能模块也叫集群)redis


3. rpc(远程过程调用)
对于分布式系统来说,tomcat1上部署了用户模块,tomcat2上部署了订单模块,当用户下单时,请求到tomcat2,这时候可能要判断这个用户是不是vip,或者是否有优惠券,这些方法是在tomcat1用户模块上的,那么tomcat2调用tomcat1的服务获取这些信息,就叫rpc调用。
常见的rpc框架:轻量级的hessian, 阿里dubbo(当当dubbox), 新浪Motan, apache的Thrift,google的grpc, 百度的brpc, 腾讯的tars。
rpc调用底层涉及到对象的序列化,反序列化,http/tcp传输,网络异步传输netty。spring


4. 消息中间件
mq消息中间件在分布式系统中的做用有不少,可是常常用到的仍是异步解耦。
好比天猫下单流程,当用户支付后,后台接口执行的操做可能包括:1 验签,2 支付密码校验,3 扣库存,4 用户积分增长等等操做,其实咱们但愿的是2操做执行成功后当即给用户结果提示,而不是等到后续各个操做完成后才去提示,由于后续的操做每每大部分是rpc调用,方法执行时间相对较长。另外对于下单支付这个操做,3和4是后续业务的须要,在设计上不能和下单支付自己出现强耦合度。因此这里咱们能够引入mq解决,也就是说1和2执行完成后,生产者只须要通知下3和4,把后续的操做扔给消息队列,当即返回。这里的mq起到的做用一个是异步调用,一个是解耦。sql

5. NoSQL
NoSQL是全部非关系型数据库的统称,在分布式系统中用到不少,主要用来提升QPS(query per second)。
redis: 咱们讲缓存,或者内存数据库,小巧强大,什么数据适合放在redis也就是缓存中,一个是常常查询的,须要频繁磁盘io的,例若有个快件系统,有个需求是当快件状态为异常时候,须要发送邮件提醒给系统管理员。接口入参是快件id,一般作法咱们须要拿到id,去数据库查状态,而后发送,可是快件基数很大时候天天的问题件也可能会不少,接口调用频繁时候就须要改进作法,这时咱们能够把快件状态信息放在redis里面,key是快件id, value是快进状态,每次进入接口时候直接redis里面取status就能够,速度很快。另外一个是查询数据缓慢的,能够放在缓存中。
mongoDB: 可称为分布式文件数据库,可用来存储海量数据,它是NoSQL里面最像关系型数据库的,它的数据的存储形式能够就理解为json格式。docker

 

用到的一些技术概念数据库

  • 负载均衡:

Nginx:高性能、高并发的web服务器;功能包括负载均衡、反向代理、静态内容缓存、访问控制;工做在应用层
LVS: Linux virtual server,基于集群技术和Linux操做系统实现一个高性能、高可用的服务器;工做在网络层

  • webserver:

Java:Tomcat,Apache,Jboss
Python:gunicorn、uwsgi、twisted、webpy、tornado

service:  
SOA、微服务、spring boot,django

  • 容器:

docker,kubernetes

  • cache:

memcache、redis等

  • 协调中心:

zookeeper、etcd等
zookeeper使用了Paxos协议Paxos是强一致性,高可用的去中心化分布式。zookeeper的使用场景很是普遍,以后细讲。

  • rpc框架:

grpc、dubbo、brpc
dubbo是阿里开源的Java语言开发的高性能RPC框架,在阿里系的诸多架构中,都使用了dubbo + spring boot

  • 消息队列:

kafka、rabbitMQ、rocketMQ、QSP
消息队列的应用场景:异步处理、应用解耦、流量削锋和消息通信

  • 实时数据平台:

storm、akka

  • 离线数据平台:

hadoop、spark
PS: apark、akka、kafka都是scala语言写的,看到这个语言仍是很牛逼的

  • dbproxy:

cobar也是阿里开源的,在阿里系中使用也很是普遍,是关系型数据库的sharding + replica 代理

  • db:

mysql、oracle、MongoDB、HBase

  • 搜索:

elasticsearch、solr

  • 日志:

rsyslog、elk、flume

 

参考:

https://blog.csdn.net/u012491783/article/details/79489221

https://www.cnblogs.com/xybaby/p/7787034.html

相关文章
相关标签/搜索