Dubbo整合,阿里用什么替代了dubbo( 三 )


spring cloud和dubbo哪个会被淘汰?
事实上,很多系统根本就没必要用什么所谓微服务 。目前过度设计已经泛滥,明明是一个用户数量有限,功能并不复杂的系统,也要套用所谓的微服务架构,或者要大搞所谓中台,既浪费时间,又浪费金钱,最后系统运维还比较复杂,需要持续投入运维 。以服务调用的方式,固然可以有更好的复用性,也可以解耦复杂系统 。但实际上,我认为微服务也仅仅是组件化的一种实现方式 。
对于组件化,广义的讲,有多种实现方式:第一种,最原始的方式就是以静态函数库或者包的形式存在 。这种形式优点是开发方式简单,调用效率高,数据以参数方式进行传递,但耦合度也高,底层组件函数一旦发生变化,则需要重新编译整个工程 。通常对于不经常发生变化的基础函数库,可以用这种形式进行开发,形成所谓的公共函数库,供大家使用 。
第二种,称之为动态函数库,在windows环境下以dll形式存在,linux环境下以so形式存在 。动态函数库相对于静态函数库,优势在于可以在运行时动态加载,可以在不用重新启动整个应用的情况下进行更新 。缺点是动态函数不能共享原应用程序的存储空间,导致动态函数调用有时需要传递大量参数,导致一些不便 。动态函数库也具有一定耦合度,函数名和参数必须严格按照约定调用,否则会报错 。
在早期单体架构下,动态函数库还是有大量使用的 。第三种,就是目前所谓的微服务架构了 。微服务事实上也是可以看作是一种函数调用方式,提供基于RPC和restful远程调用方式 。调用时需要传递调用的服务名称及数据报文 。这种方式耦合度自然是比较低一些的,但是调用效率肯定低于函数调用方式,主要是数据传输和报文解析方面消耗的时间 。
此外还需要考虑通讯流量控制,超时机制,服务寻址,服务可用性等方面的问题 。因而降低耦合度,事实上是以增加了系统的整体复杂度和降低调用效率为代价的 。个人认为不应该过度解耦,或者仅仅强调可复用性 。要知道,任何事情都是有代价的,必须要充分评估这种代价是否值得 。第四种,就更进一步,即以独立的系统存在,该系统具有独立性和完备性,可以不过于依赖其他外部系统独立运行,对外部以服务或api的形式进行交互 。
例如,单点登录系统,信贷系统,核心系统等 。因而,在系统架构设计和建设过程中,必须认真进行评估,不应该过分侧重于某一方面特性的实现,否则就是过犹不及,最后导致整体出现问题 。个人认为,目前大部分所谓基于微服务的中台系统就是陷入了过于强调解耦的误区,导致过度的解耦设计,而忽略了由此带来的弊端,最后陷入了泥潭 。

推荐阅读