分布式学习
概念:一群计算机看出一群节点组成一个分布式系统。(我的粗略理解),这一群计算机也就是节点共同处理一堆服务。举个例子,一个人被安排了一个流水线项目,自己肯定完成不来啊,那怎么办呢?招人呗,找了一群无业游民来干,无业游民像无头苍蝇一样,也不行啊,给他们分小组,分成一个个小组,每个小组干一个任务。这个累死了还有别的顶上,不至于流水线停止工作。这样这一群人就构成了一个分布式的系统。那这个人管的还挺严,不允许小组之间交头接耳。那小组成员之间怎么交流啊,就必须请示啊,打小报告。这就是分布式系统中的调度中心(一般使用zookeeper,chubby等技术)得,先讲到这。
分布式系统中有大量的节点,这些节点会有断网,断电等突发情况的发生,这些即使是小概率事件,但是随着节点的增多,这些小概率事件会指数级增多,
网络通信也会出现连接不稳定,高延迟的情况发生,要处理这些‘意外’,需要较强的容错性。最简单的办法,就是冗余或者复制集(Replication),即多个节点负责同一个任务,最为常见的就是分布式存储中,多个节点复杂存储同一份数据,以此增强可用性与可靠性。同时,Replication也会带来性能的提升,比如数据的locality可以减少用户的等待时间。
分布式存储面临的问题: 数据一致性!
服务与服务之间通信就涉及到协调中心
协调中心最出名的就是chubby,zookeeper。
概念与实现
那么对于上面的各种技术与理论,业界有哪些实现呢,下面进行简单罗列。
当然,下面的这些实现,小部分我用过,知其所以然;大部分听说过,知其然;还有一部分之前闻所未闻,分类也不一定正确,只是从其他文章抄过来的。罗列在这里,以便日后或深或浅的学习。
负载均衡:
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现