一个简化的分布式系统架构图

链接

写这篇文章,我曾在网络上搜索过“如何学习分布式系统”,但实话说,没有很认同的答案。也许,这确实是一个难以回答的问题。于是,我想自己写出一个答案,但写完这篇文章,感觉自己的回答也很混乱,也没有说清楚,不过对我自己还是有一些指导意义的,比如,理清了分布式系统中会遇到的各种技术、理论、协议,以及通过一个例子展示他们是如何协作的,接下来就是各个击破了。

  网上的诸多回答,上来就是看各种论文,google三大件、paxos什么的,个人觉得不是很实用。更好的过程,是先有一个整体的把握,然后自己思考会有什么问题,带着问题去寻求答案,在寻求答案的时候再去看论文。

 

https://www.zhihu.com/question/23645117

 

总的来说,分布式系统要做的任务就是把多台机器有机的组合、连接起来,让其协同完成一件任务,可以是计算任务,也可以是存储任务。如果一定要给近些年的分布式系统研究做一个分类的话,我个人认为大概可以包括三大部分:

1. 分布式存储系统
2. 分布式计算系统
3. 分布式管理系统



作者:马超
链接:https://www.zhihu.com/question/23645117/answer/124708083
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

下面用一个不大精确的架构图,尽量还原分布式系统的组成部分(不过只能体现出技术,不好体现出理论)

  一个简化的分布式系统架构图_第1张图片

 

概念与实现

  那么对于上面的各种技术与理论,业界有哪些实现呢,下面进行简单罗列。

  当然,下面的这些实现,小部分我用过,知其所以然;大部分听说过,知其然;还有一部分之前闻所未闻,分类也不一定正确,只是从其他文章抄过来的。罗列在这里,以便日后或深或浅的学习。

 

  • 负载均衡:

    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

 

 

如果你觉得我的文章帮助到了你并节省了开发时间,请扫描下方二维码随意打赏❥(^_^)

您的支持是我最大的鼓励

一个简化的分布式系统架构图_第2张图片

 

一个简化的分布式系统架构图_第3张图片

 

你可能感兴趣的:(java)