分布式架构的演进
系统架构演化历程-初始阶段架构
系统架构演化历程-应用服务和数据服务分离
系统架构演化历程-使用缓存改善性能
系统架构演化历程-使用应用服务器集群
系统架构演化历程-数据库读写分离
系统架构演化历程-反向代理和CDN加速
系统架构演化历程-分布式文件系统和分布式数据库
系统架构演化历程-使用NoSQL和搜索引擎
系统架构演化历程-业务拆分
系统架构演化历程-分布式服务
Q:分布式服务应用会面临哪些问题?
A:
(1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。
(2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
(3) 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?
(4) 服务多了,沟通成本也开始上升,调某个服务失败该找谁?服务的参数都有什么约定?
(5) 一个服务有多个业务消费者,如何确保服务质量?
(6) 随着服务的不停升级,总有些意想不到的事发生,比如cache写错了导致内存溢出,故障不可避免,每次核心服务一挂,影响一大片,人心慌慌,如何控制故障的影响面?服务是否可以功能降级?或者资源劣化?
Java分布式应用技术基础
<img data-rawheight="545" data-rawwidth="700" src="https://pic1.zhimg.com/50/b7cdb7ac16e2719f5fefe9503f85ad69_hd.jpg" class="origin_image zh-lightbox-thumb" width="700" data-original="https://pic1.zhimg.com/b7cdb7ac16e2719f5fefe9503f85ad69_r.jpg">分布式服务下的关键技术:消息队列架构
<img data-rawheight="318" data-rawwidth="732" src="https://pic1.zhimg.com/50/9236baf21c201ec37b5cc089b8e09b3c_hd.jpg" class="origin_image zh-lightbox-thumb" width="732" data-original="https://pic1.zhimg.com/9236baf21c201ec37b5cc089b8e09b3c_r.jpg">消息对列通过消息对象分解系统耦合性,不同子系统处理同一个消息
分布式服务下的关键技术:消息队列原理
<img data-rawheight="332" data-rawwidth="847" src="https://pic2.zhimg.com/50/24eac9966e7bb9c38ffd44952194727a_hd.jpg" class="origin_image zh-lightbox-thumb" width="847" data-original="https://pic2.zhimg.com/24eac9966e7bb9c38ffd44952194727a_r.jpg">分布式服务下的关键技术:服务框架架构
分布式服务下的关键技术:服务框架原理
分布式服务下的关键技术:服务总线架构
<img data-rawheight="344" data-rawwidth="430" src="https://pic1.zhimg.com/50/6e28f7b7020b9968ec02ae8f680e81a8_hd.jpg" class="origin_image zh-lightbox-thumb" width="430" data-original="https://pic1.zhimg.com/6e28f7b7020b9968ec02ae8f680e81a8_r.jpg">服务总线同服务框架一样,均是通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务启用
服务总线是一个总线式的模型
服务总线面向同构、异构系统
适合:内部系统
分布式服务下的关键技术:服务总线原理
<img data-rawheight="349" data-rawwidth="428" src="https://pic2.zhimg.com/50/fa80a813b449147587541aca676bf6af_hd.jpg" class="origin_image zh-lightbox-thumb" width="428" data-original="https://pic2.zhimg.com/fa80a813b449147587541aca676bf6af_r.jpg">分布式架构下系统间交互的5种通信模式
request/response模式(同步模式):客户端发起请求一直阻塞到服务端返回请求为止。
Callback(异步模式):客户端发送一个RPC请求给服务器,服务端处理后再发送一个消息给消息发送端提供的callback端点,此类情况非常合适以下场景:A组件发送RPC请求给B,B处理完成后,需要通知A组件做后续处理。
Future模式:客户端发送完请求后,继续做自己的事情,返回一个包含消息结果的Future对象。客户端需要使用返回结果时,使用Future对象的.get(),如果此时没有结果返回的话,会一直阻塞到有结果返回为止。
Oneway模式:客户端调用完继续执行,不管接收端是否成功。
Reliable模式:为保证通信可靠,将借助于消息中心来实现消息的可靠送达,请求将做持久化存储,在接收方在线时做送达,并由消息中心保证异常重试。
五种通信模式的实现方式-同步点对点服务模式
<img data-rawheight="496" data-rawwidth="653" src="https://pic4.zhimg.com/50/f011bc4e6c08825bbc2b8dabd28ae0aa_hd.jpg" class="origin_image zh-lightbox-thumb" width="653" data-original="https://pic4.zhimg.com/f011bc4e6c08825bbc2b8dabd28ae0aa_r.jpg">五种通信模式的实现方式-异步点对点消息模式1
<img data-rawheight="503" data-rawwidth="638" src="https://pic2.zhimg.com/50/94df9d25af1fff1987e5f9db7fcfe534_hd.jpg" class="origin_image zh-lightbox-thumb" width="638" data-original="https://pic2.zhimg.com/94df9d25af1fff1987e5f9db7fcfe534_r.jpg">五种通信模式的实现方式-异步点对点消息模式2
<img data-rawheight="509" data-rawwidth="864" src="https://pic4.zhimg.com/50/312b8ea9e93da3fdf610428f8d613369_hd.jpg" class="origin_image zh-lightbox-thumb" width="864" data-original="https://pic4.zhimg.com/312b8ea9e93da3fdf610428f8d613369_r.jpg">五种通信模式的实现方式-异步广播消息模式
<img data-rawheight="485" data-rawwidth="778" src="https://pic1.zhimg.com/50/af5cf474d7574ba087a2e5c05e7bbba5_hd.jpg" class="origin_image zh-lightbox-thumb" width="778" data-original="https://pic1.zhimg.com/af5cf474d7574ba087a2e5c05e7bbba5_r.jpg">分布式架构下的服务治理
服务治理是服务框架/服务总线的核心功能。所谓服务治理,是指服务的提供方和消费方达成一致的约定,保证服务的高质量。服务治理功能可以解决将某些特定流量引入某一批机器,以及限制某些非法消费者的恶意访问,并在提供者处理量达到一定程度是,拒绝接受新的访问。
基于服务框架Dubbo的服务治理-服务管理
道你的系统,对外提供了多少服务,可以对服务进行升级、降级、停用、权重调整等操作
可以知道你提供的服务,谁在使用,因业务需求,可以对该消费者实施屏蔽、停用等操作
基于服务框架Dubbo的服务治理-服务监控
基于服务框架Dubbo的服务治理-服务路由
<img data-rawheight="494" data-rawwidth="485" src="https://pic4.zhimg.com/50/053c0060ad2ee373608bee75fb550486_hd.jpg" class="origin_image zh-lightbox-thumb" width="485" data-original="https://pic4.zhimg.com/053c0060ad2ee373608bee75fb550486_r.jpg">基于服务框架Dubbo的服务治理-服务保护
<img data-rawheight="474" data-rawwidth="538" src="https://pic3.zhimg.com/50/67bd8f13a79c16ce80ae247e98ac5bd5_hd.jpg" class="origin_image zh-lightbox-thumb" width="538" data-original="https://pic3.zhimg.com/67bd8f13a79c16ce80ae247e98ac5bd5_r.jpg">基于服务总线OSB的服务治理-功能介绍
<img data-rawheight="461" data-rawwidth="653" src="https://pic1.zhimg.com/50/9f5dd3e20262563604076397530beb60_hd.jpg" class="origin_image zh-lightbox-thumb" width="653" data-original="https://pic1.zhimg.com/9f5dd3e20262563604076397530beb60_r.jpg">基于服务总线OSB的服务治理
<img data-rawheight="559" data-rawwidth="947" src="https://pic3.zhimg.com/50/b34ab3a4c21e813e4b0dfba15414b615_hd.jpg" class="origin_image zh-lightbox-thumb" width="947" data-original="https://pic3.zhimg.com/b34ab3a4c21e813e4b0dfba15414b615_r.jpg">Q:Dubbo到底是神马?
A:
淘宝开源的高性能和透明化的RPC远程调用服务框架
SOA服务治理方案
Q:Dubbo原理是?
A:
-结束-
分布式计算就是通过计算机网络将计算工作分布到多台主机上,多个主机一起协同完成工作。
我试着列一下相关知识吧。题主问的是 Java,不过这个问题其实不局限于 Java,因此我试着以“分布式”本身来回答。
一、三个步骤完成华丽转身——任意软件变为“分布式”
蹬蹬蹬蹬~大功告成。哈哈别打我,这真的是很严肃的通用型三步骤大杀器,对付任何软件,是任何软件都可以的。接下来我当然要解释清楚为什么。
二、跳出误区——分布式不等于并行计算
人们常常把分布式系统自然而然的和并行计算联系起来。然而这并不正确。实际上,分布式系统并不一定是并行的,举个简单的例子就能理解——
某软件,功能如下:很简单吧?这三个步骤是无法并行的。它们需要被依次执行。但是这个软件依然可以被改为分布式的,方法就是用前面提到的方法,把步骤 2 的计算过程独立为一个 Process 移动到另外一台计算机上完成。
如果我们从整个系统流程的观点来看,并没有什么并行。整个过程都是顺序执行的。只不过执行时出现了“跨设备”的现象而已。可见,分布式本身就只如其字面意思所指,指的仅仅是从结构角度的分散而已。
当然啊,现实世界中,我们更多的时候钟情于分布式,还是因为它与并行之间可以相互配合。例如实现既是分布同时也是并行的系统。
好了,理解这一点之后就不难解释为什么我会说前文提到的三步骤是万用大法了。接下来我们继续讨论分布式本身。
三、拆分+连接是分布式系统的本质
所谓分布式,无非就是”将一个系统拆分成多个子系统并散布到不同设备“的过程而已。
本质上而言,实现一个分布式系统,最核心的部分无非有两点:四、为什么你要使用分布式?
分布式系统并非灵丹妙药,解决问题的关键还是看你对问题本身的了解。通常我们需要使用分布式的常见理由是:在以提供 Service 为主的服务端软件开发过程中常常遇到这些问题。
五、一些分布式方案能解决你的问题,另一些却不能,要学会的其实是选择
笼统的讨论分布式没有太大的意义,就如我刚才所谈的,实际上分布式很容易实现。真正难的地方在于如何选择正确的分布方案。
例如,当你想要建立一个分布式的数据管理系统的时候,你就必须得面对“一致性”问题。如果你对数据一致性要求很高,你就不得不容忍一些缺陷例如规模伸缩困难;而如果你放弃它,你可以轻松伸缩规模,但你必须解决好由此带来的一系列数据不一致导致的问题。(CAP 问题)
于是你会意识到,有许多种分布方案,为了正确解决你的问题,你需要对每一个方案都进行了解,并评估,选择不同的方案有时候区别不大,有时候却会深刻的影响整个系统中其他部分的工作方式,甚至影响用户界面中用户操作时的流程。这是我们学习分布式系统的重点所在。
六、分布式学习入门——基础知识要点
如我前面所讲,分布式入门不难。主要包含如下知识点:好了,如果这些你都学的差不多了,那咱们“纸上谈兵”也就告一段落了。接下来进入实战演练。
七、实战演练?其实你已经开发过分布式系统了
你有没有开发过简单的增删改查软件?这类软件通常都需要搭配一个独立的数据库管理系统共同完成功能。实际上,只要你开发过这么简单的软件,那么你就已经开发过分布式系统了。“什么,基于数据库管理系统开发出来的软件就可以算分布式呀?我做了很多这类软件,怎么我从来没听过这种说法?真的,我没开玩笑。还记得我们前面提到的吗,什么是分布式?不就是一个大系统拆分成多个小系统分散到不同的设备上吗。回想一下,当你写一个简单的增删改查软件时,只要用到数据库管理系统,是不是具有如下特点:
“啊,原来如此,可是我印象里一说分布式的话,应该会讲「集群」啊啥的吧,这么简单的也算?”
关于「集群」的问题我们之后会谈到,它也是分布式系统的一个应用,但谈集群的时候,我们谈的往往是更具体的东西。但咱们看问题,需要抓住本质。别看麻雀小,五脏却俱全。
不过,你已经熟悉的东西,我们在这里就不再展开了,我们不妨关注其他一些更有趣的话题。