这个问题已经收藏了一个多月了,一直在考虑如何回答这个问题,总结了很长时间终于有了一些感悟(之前一直都是只可意会不可言传的感觉),和大家分享一下,如果有不同的建议,欢迎大家留言指正。
分布式和微服务
首先 ,我认为微服务就是分布式框架的一种。
-
分布式的思想就是把一个系统的不同模块,部署在不同的服务器上,以应对高并发的问题。
-
SOA是一种分布式架构,把业务系统分成多个子系统,提供不同的服务,再通过服务组合、编排实现业务流程;通常在SOA架构中,ESB企业服务总线扮演了重要的角色。
-
微服务是SOA的升华,如果非要说点儿不同的,那么微服务更加强调服务的细分和专业,去ESB总线、去中心化,部署粒度更细,服务扩展更灵活。
微服务不只是技术架构
很多同学一说微服务,就说这是一种技术架构,有的推荐使用Dubbo,有的推荐使用Spring Cloud。
我认为,微服务不单单是一种技术架构,也涉及到了管理、组织架构。
大多数的公司,需求、开发、测试、运维都是独立的团队,这实际上是有悖于微服务快速迭代的思想;在微服务的架构下,一个服务应该是由一个团队全权负责的。
不过组织架构方面的事情,真的不是我们能说了算的。
必须要用微服务?
- 我觉得没有必要为了微服务,而微服务;有的公司把服务拆分,但是数据库依然是同一个库,依然是一个项目直接掉另外一个项目的接口,然后对外就宣称完成了微服务的改造...
-
架构设计还是要根据需求背景、团队开发能力、软硬件实力综合来考虑。
-
好的架构是可以进化的,而不是一步到位建成的。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
微服务框架spring cloud和dubbo有什么区别?
首先,从严格意义上来说,Dubbo和SpringCloud的定位是不一样的。Dubbo是一个高性能的、基于java的开源RPC框架,注意它的定位是是高性能和RPC框架。SpringCloud提供了一系列通用工具来帮助开发者在分布式系统里快速构建一些常见模式,比如分布式配置管理、服务发现、熔断降级、智能路由、微代理、控制总线、一次性令牌、全局锁、分布式选主、分布式session等一些列解决方案,它的设计目标是提供一整套服务治理能力,它具有一套完整的微服务解决方案体系。
dubbo只是一个分布式的 RPC 框架,如果一定要按照分布式系统架构里的功能来定义的话,只是解决了服务发现、服务路由、服务降级和负载均衡方面的能力,新版本里也提供了动态配置中心和服务治理相关的能力,但相比 Spring Cloud 而言,还是差了相当一部分的能力。
从功能支持上来说,dubbo 的角色定位可能更像是另外一个大名鼎鼎的框架,那就是 gRPC,而且两者在使用的方式以及工作原理上都非常相似,都是基于序列化协议来解决分布式系统中的远程调用问题,在使用上可以通过约定接口或者通过 proto 文件生成代码文件来“提升用户的使用”。
如果你在系统设计之初就已经考虑到了后续可能会涉及到各种服务治理能力,比如分布式配置、全局锁、分布式session等常见需求,那么使用 SpringCloud 将会减少你很多的工作,因为这些基本上都是"套件",相互配合使用会非常顺畅。如果你想要的只是解决分布式架构后的远程调用问题,那么 Dubbo 是一个不错的选择。
SpringCloud 和 Dubbo 的基本差异大概就是如上所述,如果你不知道该如何做选择,这里再补充几个比较关键的差异点,希望能帮助你更好的结合自身业务做出选择:
能力支持方面
上文也提到,SpringCloud 提供了一整套微服务治理的功能组件,很多组件基本上都是"开箱即用"的,并且相互之间能很好的兼容,举个例子,如果要在 Spring Cloud 里实现服务发现、负载均衡和熔断降级,你只需要引用SpringCloud 的依赖组件即可,直接通过注解便可使用,基本上零配置;而 dubbo 框架,除了上述提到的能力支持之外,如果想要使用熔断降级,那你可能需要额外引用 hystrix 或者 resilience4j 来实现;温馨提示,hystrix 官方目前也已经宣布不再更新,并且推荐使用 resilience4j 。
协议兼容方面
SpringCloud 里并没有限制服务之间的通信协议,但是主流的一些客户端比如 restTemple、feign 等都是直接支持使用 Ribbon 来做服务注册发现和智能路由的,其底层通信的协议都是HTTP;而dubbo框架缺省是基于NIO异步传输使用 TCP 长连接并采用 Hessian 二进制序列化方式通信的;
这会涉及后续系统在扩展上的兼容性问题,比如需要调用一个三方系统或者是被第三方系统调用,相比而言 HTTP 协议可能更加通用。
模型定义方面
dubbo 在模型设计上将一个接口定义为一个服务,而 SpringCloud 里则是将一个应用定义为一个服务,这两者在模型上是存在很大差异的,你也许会奇怪,这个对使用会有影响吗?从现有使用方面来说是没有什么影响的,但是你如果有关注 Service Mesh 最新微服务技术的话,目前对 Dubbo 协议这块可能支持暂时还不完善,其中很大一部分原因就是因为在服务模型上与 K8S 的服务模型有差异;
调用性能方面
如果分布式系统中比较关注远程调用的性能,那 Dubbo 可能是一个较好的选择,基于 NIO 和 TCP 长连接的通信传输方式,在性能上相比 HTTP 协议是有绝对优势的;当然基于 SpringCloud 你也可以使用 gRPC 协议来解决性能问题,那就是另外一个问题了。
"
什么是分布式系统?
带你了解最前沿的互联网资讯
过去24小时,大数据、人工智能、机器学习、科技领域,那些你不知道的动态,在这里将精彩呈现!
昨日
1、5G套餐收费详情出炉:最低月租128元起:
从运营商内部人士处获悉,三家运营商5G套餐每月均不低于128元。同时,运营商首次采取按上网速度定价的方式,中国联通分了两个5G网速档次,中国移动分了三个5G网速档次。如中国联通199元及以下价格的5G套餐,上网速度限制在500Mbps,299元及以上5G套餐速度可达1Gbps,超出套餐外的流量为3元每GB。
2、新浪回应推出“ADA社区”:与绿洲分属不同团队:
针对新浪于近日上线一款3D时尚社交新产品“ADA社区”的消息,新浪负责“ADA社区”的工作人员表示,绿洲是由微博出品的,而“ADA社区”是新浪网时尚频道在做,两者分属不同团队。同时,该工作人员表示,目前入驻到“ADA社区”中的品牌都是一线奢侈品牌,用户门槛比较高,未来不会大规模发放邀请码,只会定向邀请时尚和科技领域的媒体或朋友。
3、腾讯、信通院、深圳税务局联合代表中国主导制定区块链发票国际标准:
近日,腾讯和中国信通院、深圳税务局联合代表中国在ITU-T SG16 Q22会议上首次提出《General Framework of DLT based invoices》(基于区块链分布式账本的电子发票通用框架)标准立项,获得了成员国家的支持,顺利通过新标准立项。接下来,腾讯、中国信通院和深圳税务局将联合代表中国主导制定区块链发票的标准工作,包括草案讨论、修订,直至标准发布。
昨日要闻
✲百度大脑联名老舍茶馆推出“AI茶馆”
✲快手推出短视频App“态赞”
✲支付宝宣布将帮助1000家支付服务商完成数字化转型
✲迷你生鲜暂停运营,发布会员费及订单退款计划
✲广州区块链新政:将设10亿产业基金,“无币”公有链项目最高补1000万
✲大疆发布御Mini航拍小飞机,售价2699元
✲三星推出竖屏可折叠手机概念机型
✲Facebook与英监管机构达成协议,为数据泄露支付64.3万美元
分布式技术
有互联网大佬用 IMABCDE 这七个字母总结归纳了当今最流行的前沿技术,他们分别是 IoT 物联网、Mobile 移动计算、AI 人工智能、Blockchain 区块链、Cloud 云计算、Data 大数据、Edge 边缘计算。乍一眼看上去眼花缭乱,给人无穷的学习压力,但其实,这七大技术全都是以分布式技术为基石的。
分布式(distributed),就是将不同的服务模块部署在多台不同的服务器上,然后通过远程调用协同工作,共同对外提供服务。对于用户来说,就像是一台计算机在服务一样。
我们知道,初代的服务器架构往往比较简单,应用程序、数据库、文件、代码等所有资源都放在一台服务器上,也就是单机结构。随着企业业务量的增多,一台服务器已经难以满足数据处理的需求了,那么就对单机进行“复制粘贴”,就能收获一个处理能力高出好几倍的“服务器集群”。不过,集群式扩展很容易到达物理上限,最直接的反映就是无论怎么增加节点,整个集群的性能似乎也没有被提升多少,这时候,就需要分布式系统登场了。
在实际业务中,分布式系统可以将不同的业务功能对应到一个个独立的子系统中去,比如针对电商平台,可以将用户服务、产品服务、店铺管理、数据分析等不同的数据处理项目部署在不同的计算机集群上。这些独立的集群可能是在不同的机房,甚至是不同的城市中,有的大型数据中心还会分布在不同的国家和地区。它们之间通过RPC消息传递进行通信和协调,再向用户提供服务。
通过几种架构的运行逻辑不难发现,分布式系统至少具备三个特点:
首先是能够实现高并发、低延迟的网络服务需求。面对超大规模的访问请求,很容易造成网页打开很慢、游戏拥堵卡顿甚至App直接宕机的情况。这时候需要多台服务器共同高效协作,去处理尽可能多的任务,才能达到相应流量的吞吐量。这就要企业需要将多个服务器部署在不同的地域,才有可能规避全球用户可能导致的网络拥堵和延迟问题。换句话说,分布式系统是全球网络业务发展的基础前提。
另外,分布式系统的可扩展性能够大幅度降低企业的网络成本。由于分布式系统的多台计算机可以在空间位置上随意分布,机器性能也可以独立运行和随时变动,这就使得多个独立服务可以得到针对性地升级,而不是传统架构下的“大锅饭”。比如在商城大促期间,只需要针对产品系统、订单系统等跟下单量级直接相关的节点,其他服务模块维持原有水平,可以有效降低网络使用成本。一些基础模块也可以为其他新增服务所复用,无需重复开发,又进一步降低了企业的经营风险。可以说,在各行业竞争进入精益时期和白热化的当下,分布式系统无疑是竞争力的前提。
更关键的一点,是分布式系统的高安全性。由于该系统中计算机没有主/从之分,也就是说所有计算机节点都是对等的,在对外服务时分布式系统都会对数据和服务进行副本处理,从而直接有效地防止了企业关键数据丢失无法找回等“惨剧”,也因此成为网络防灾的重要保障。
今天,我们看到万物智联已经在AI、5G、云计算等基础设施的共同铺陈下,展示出了越来越清晰的未来图景。
如何让其变得可靠、可用、可信,还需要像分布式技术这样的助攻搀扶下,迈出实用化的关键一步。