apco是什么意思 apark具体是指什么意思( 三 )


一个请求可能包含诸多操作,即在服务A上做一些操作,然后在服务B上做另一些操作 。比如简化版的 *** 购物,在订单服务上发货,在账户服务上扣款 。这两个操作需要保证原子性,要么都成功,要么都不操作 。这就涉及到分布式事务的问题,分布式事务是从应用层面保证一致性:某种守恒关系 。
上面说道一个请求包含多个操作,其实就是涉及到多个服务,分布式系统中有大量的服务,每个服务又是多个节点组成 。那么一个服务怎么找到另一个服务(的某个节点呢)?通信是需要地址的,怎么获取这个地址,最简单的办法就是配置文件写死,或者写入到数据库,但这些 *** 在节点数据巨大、节点动态增删的时候都不大方便,这个时候就需要服务注册与发现:提供服务的节点向一个协调中心注册自己的地址,使用服务的节点去协调中心拉取地址 。
从上可以看见,协调中心提供了中心化的服务:以一组节点提供类似单点的服务,使用非常广泛,比如命令服务、分布式锁 。协调中心最出名的就是chubby,zookeeper 。
回到用户请求这个点,请求操作会产生一些数据、日志,通常为信息,其他一些系统可能会对这些消息感兴趣,比如个性化推荐、监控等,这里就抽象出了两个概念,消息的生产者与消费者 。那么生产者怎么讲消息发送给消费者呢,RPC并不是一个很好的选择,因为RPC肯定得指定消息发给谁,但实际的情况是生产者并不清楚、也不关心谁会消费这个消息,这个时候消息队列就出马了 。简单来说,生产者只用往消息队列里面发就行了,队列会将消息按主题(topic)分发给关注这个主题的消费者 。消息队列起到了异步处理、应用解耦的作用 。
上面提到,用户操作会产生一些数据,这些数据忠实记录了用户的操作习惯、喜好,是各行各业最宝贵的财富 。比如各种推荐、广告投放、自动识别 。这就催生了分布式计算平台,比如Hadoop,Storm等,用来处理这些海量的数据 。
最后,用户的操作完成之后,用户的数据需要持久化,但数据量很大,大到按个节点无法存储,那么这个时候就需要分布式存储:将数据进行划分放在不同的节点上,同时,为了防止数据的丢失,每一份数据会保存多分 。传统的关系型数据库是单点存储,为了在应用层透明的情况下分库分表,会引用额外的 *** 层 。而对于NoSql,一般天然支持分布式 。
一个简化的架构图下面用一个不大精确的架构图,尽量还原分布式系统的组成部分(不过只能体现出技术,不好体现出理论)

apco是什么意思  apark具体是指什么意思

文章插图
概念与实现那么对于上面的各种技术与理论,业界有哪些实现呢,下面进行简单罗列 。
当然,下面的这些实现,小部分我用过,知其所以然;大部分听说过,知其然;还有一部分之前闻所未闻,分类也不一定正确,只是从其他文章抄过来的 。罗列在这里,以便日后或深或浅的学习 。
负载均衡: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:【apco是什么意思apark具体是指什么意思】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
总结写这篇文章,我曾在 *** 上搜索过“如何学习分布式系统”,但实话说,没有很认同的答案 。也许,这确实是一个难以回答的问题 。于是,我想自己写出一个答案,但写完这篇文章,感觉自己的回答也很混乱,也没有说清楚,不过对我自己还是有一些指导意义的,比如,理清了分布式系统中会遇到的各种技术、理论、协议,以及通过一个例子展示他们是如何协作的,接下来就是各个击破了 。

推荐阅读