Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nacos 1.4.0 多平台兼容性疑问 #4336

Open
lltx opened this issue Nov 26, 2020 · 54 comments
Open

nacos 1.4.0 多平台兼容性疑问 #4336

lltx opened this issue Nov 26, 2020 · 54 comments
Assignees
Labels
area/Document Category issues or prs related to document. dependencies Pull requests that update a dependency file follow up this problem requires continuous follow-up

Comments

@lltx
Copy link
Contributor

lltx commented Nov 26, 2020

Describe the bug

	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788)
	... 105 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'persistentServiceProcessor' defined in URL [jar:file:/C:/Users/Administrator/.m2/repository/com/pig4cloud/nacos/nacos-naming/1.4.0/nacos-naming-1.4.0.jar!/com/alibaba/nacos/naming/consistency/persistent/impl/PersistentServiceProcessor.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.naming.consistency.persistent.impl.PersistentServiceProcessor]: Constructor threw exception; nested exception is java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\librocksdbjni3732491341899342270.dll: Can't find dependent libraries
	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:313)
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:294)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:884)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788)
	... 119 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.naming.consistency.persistent.impl.PersistentServiceProcessor]: Constructor threw exception; nested exception is java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\librocksdbjni3732491341899342270.dll: Can't find dependent libraries
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:217)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:309)
	... 133 common frames omitted
Caused by: java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\librocksdbjni3732491341899342270.dll: Can't find dependent libraries
	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1934)
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1817)
	at java.lang.Runtime.load0(Runtime.java:809)
	at java.lang.System.load(System.java:1086)
	at org.rocksdb.NativeLibraryLoader.loadLibraryFromJar(NativeLibraryLoader.java:78)
	at org.rocksdb.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:56)
	at org.rocksdb.RocksDB.loadLibrary(RocksDB.java:64)
	at org.rocksdb.RocksDB.<clinit>(RocksDB.java:35)
	at com.alipay.sofa.jraft.storage.impl.RocksDBLogStorage.<clinit>(RocksDBLogStorage.java:75)
	at com.alipay.sofa.jraft.core.DefaultJRaftServiceFactory.createLogStorage(DefaultJRaftServiceFactory.java:50)
	at com.alipay.sofa.jraft.core.NodeImpl.initLogStorage(NodeImpl.java:545)
	at com.alipay.sofa.jraft.core.NodeImpl.init(NodeImpl.java:961)
	at com.alipay.sofa.jraft.core.NodeImpl.init(NodeImpl.java:137)
	at com.alipay.sofa.jraft.RaftServiceFactory.createAndInitRaftNode(RaftServiceFactory.java:47)
	at com.alipay.sofa.jraft.RaftGroupService.start(RaftGroupService.java:129)
	at com.alibaba.nacos.core.distributed.raft.JRaftServer.createMultiRaftGroup(JRaftServer.java:267)
	at com.alibaba.nacos.core.distributed.raft.JRaftProtocol.addLogProcessors(JRaftProtocol.java:163)
	at com.alibaba.nacos.naming.consistency.persistent.impl.PersistentServiceProcessor.init(PersistentServiceProcessor.java:149)
	at com.alibaba.nacos.naming.consistency.persistent.impl.PersistentServiceProcessor.<init>(PersistentServiceProcessor.java:143)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:204)
	... 135 common frames omitted

Desktop (please complete the following information):

  • OS: win7 企业 X64
  • Version nacos-1.4.0

Additional context
在上述环境下 nacos 1.4 提示缺少相关依赖dll , 当然在参考 jraft、rocksdb issue 问题得到解决
Microsoft Visual C++ 2015 Redistributable"

https://github.com/facebook/rocksdb/wiki

但问题在其他操作系统 例如 此条 issue 报告:

以上问题是 100%可以复现 ,所以jraft协议取代自实现raft协议,这个对nacos 作为java 中间件的普适性冲击较大。

感觉以上兼容性报告issue,官方没有得到重视,特此提出 欢迎大伙交流哈

@lltx
Copy link
Contributor Author

lltx commented Nov 26, 2020

facebook/rocksdb#7710

当然在 M1 上也不能正确运行

@paderlol paderlol added area/Nacos Core kind/question Category issues related to questions or problems kind/research labels Nov 26, 2020
@KomachiSion KomachiSion added dependencies Pull requests that update a dependency file area/Document Category issues or prs related to document. and removed area/Nacos Core kind/question Category issues related to questions or problems kind/research labels Nov 26, 2020
@KomachiSion
Copy link
Collaborator

We can add some description and F&Q in document.

The problem is a dependency problem.

@lltx
Copy link
Contributor Author

lltx commented Nov 26, 2020

We can add some description and F&Q in document.

The problem is a dependency problem.

可能大家都在 mac 下开发,这个问题影响不大。 但是对于大部分window用户来讲体验并不好,昨天尝试去装 vc++ 2015 好难
,乱七八糟的依赖 。 window下还有解决方案、arm 或者 M1 就很难搞了、、、、

重构raft 技术选型有待商榷 个人看法

@KomachiSion
Copy link
Collaborator

KomachiSion commented Nov 26, 2020

技术选型肯定是向前看,对于旧版本系统有一定的不支持或者依赖包安装是必然的。
M1是因为刚出,系统中有一些非兼容修改很正常,等待更新即可。
window也是普适系统,肯定优先使用更新更好的依赖包来运行,也没有问题。

至于ARM 中标麒麟(龙芯)操作,很抱歉,我们实在不知道还有这么个操作系统,甚至都不知道他是基于什么系统修改的。这种系统没法兼容。

@lltx
Copy link
Contributor Author

lltx commented Nov 26, 2020

技术选型肯定是向前看,对于就版本系统有一定的不支持或者依赖包安装是必然的。
M1是因为刚出,系统中有一些非兼容修改很正常,等待更新即可。
window也是普适系统,肯定优先使用更新更好的依赖包来运行,也没有问题。

至于ARM 中标麒麟(龙芯)操作,很抱歉,我们实在不知道还有这么个操作系统,甚至都不知道他是基于什么系统修改的。这种系统没法兼容。

arm 啊

@lltx
Copy link
Contributor Author

lltx commented Nov 26, 2020

window也是普适系统,肯定优先使用更新更好的依赖包来运行,也没有问题。


为啥普适性系统 这么多报告兼容性的问题的?? 现在只有报告的少是因为 SCA 那边还是1.3.X 没有 1.4

@lltx
Copy link
Contributor Author

lltx commented Nov 26, 2020

我觉着兼容性问题 还是没有得到重视啊 兄弟

@KomachiSion
Copy link
Collaborator

那您有什么办法能够解决兼容性吗?

@lltx
Copy link
Contributor Author

lltx commented Nov 26, 2020

自研的raft 有啥问题?为啥一定要切到sofa 上去 去耦合rocksdb

@chuntaojun
Copy link
Collaborator

首先你需要了解nacos自己写的raft,严不严格,是不是标准raft 的实现,在考虑说为什么我们当初要重新对raft选型

@lltx
Copy link
Contributor Author

lltx commented Nov 26, 2020

首先你需要了解nacos自己写的raft,严不严格,是不是标准raft 的实现,在考虑说为什么我们当初要重新对raft选型

哦,没艾特你把? 严不严格和你兼容性有什么问题?eureka paxos 搞出来兼容性问题了 ?

@chuntaojun
Copy link
Collaborator

首先呢,当初nacos自己写的raft是非标准的,没有经过证明的变种Raft实现,因此需要重新实现raft,raft 优秀的实现有很多,这一块当初选型了两款,但是jraft团队的沟通成本低,可以相互演进,因此选择jraft,至于普适性的问题,rocksdb不是强耦合,只是默认的存储而已,如果你需要,你可以参与贡献实现一个具有普适性的存储,或者等待rocksdb的升级或nacos官方对于这一块raft协议log存储的处理。

@KomachiSion
Copy link
Collaborator

自研raft存在很多问题,比如不符合raft语意,性能低,数据多启动速度慢等。而且重复造轮子本身就不可取,别人已经有很好的实现了,没有必要再造一次轮子。

至于你说的所谓兼容性问题,其实是大家都不可避免的,软件更新,肯定向着更新更好更标准的方向发展。
解决方法应该考虑是否需要兼容,如果需要兼容怎么推动其兼容,如果推不动,最后再考虑是否绕开。

@lltx
Copy link
Contributor Author

lltx commented Nov 26, 2020

@KomachiSion @chuntaojun 感谢两位答疑, 此issue 目的是引起官方对兼容性问题的重视, 无论是使用jraft 还是兼容性 最终目标提高终端用户使用体验 。

再次感谢

附 vc++ 2015 下载链接 https://www.microsoft.com/zh-CN/download/details.aspx?id=48145

@chuntaojun chuntaojun added the follow up this problem requires continuous follow-up label Nov 26, 2020
@wgchao16
Copy link

wgchao16 commented Dec 2, 2020

今天在linux跟windows服务器上搭建集群也碰到了该问题,很头疼,只能在另一台linux服务器上搭建了集群

@cqboyone
Copy link

技术选型肯定是向前看,对于旧版本系统有一定的不支持或者依赖包安装是必然的。
M1是因为刚出,系统中有一些非兼容修改很正常,等待更新即可。
window也是普适系统,肯定优先使用更新更好的依赖包来运行,也没有问题。

至于ARM 中标麒麟(龙芯)操作,很抱歉,我们实在不知道还有这么个操作系统,甚至都不知道他是基于什么系统修改的。这种系统没法兼容。

m1处理器运行nacos报错。感觉应该是兼容问题。请问什么时候能做适配呢?

@22GNUs
Copy link

22GNUs commented Oct 27, 2022

M1多版本jdk共存也可以考虑用 sdkman

可以参考这个配置 How to install x86 and Arm JDKs on the Mac M1 (Apple Silicon) using SDKMAN

不过sdkman默认看不出来是arm还是x86,可以把兼容rosetta跟不兼容两种模式都打开,然后用diff工具看下哪个jdk支持x86

比如 8.0.332.fx-librca 这个版本自己测试下来是可以的

@Huangbinghui
Copy link

然而现在2023年了m1还没支持。

@BR-Liu
Copy link

BR-Liu commented Feb 22, 2023

oh my god

@techwn
Copy link

techwn commented Feb 25, 2023

哈哈,M1都出来18个月了,还没有适配。难道逼我用1.4.2?

@Sandaman2015
Copy link

arm这架构估计得等到我退休才能很好的适配

@amendgit
Copy link

我是M1,用这个跑成功了,不知道有没有帮助。

#9286 (comment)

@tangzhi1996
Copy link

arm这架构估计得等到我退休才能很好的适配

我也很伤心,我也遇到了

@amendgit
Copy link

23年4月了,macos m1上有办法绕过去吗?

@yoyo837
Copy link

yoyo837 commented Apr 28, 2023

23年4月了,macos m1上有办法绕过去吗?

我自己在m1用nacos2可以

@yoyo837
Copy link

yoyo837 commented Nov 10, 2023

用 1.8 361的x86版本在arm上可以跑, 391的x86_64无法安装, 只能安装arm的, 但arm又不能跑nacos.

@yoyo837
Copy link

yoyo837 commented Dec 13, 2023

经验证 Nacos 2.2.4 已经可以直接运行在 ARM 平台的JDK下了。rocksdbjni 从 6.29.3 支持 ARM,Nacos 2.2.4 内置 rocksdbjni-7.7.3.jar。

@Kevinboy2020
Copy link

当前我们在中科麒麟也遇到了同样的问题?是否解决了呢

image

我看这个close了,是重复,还是解决了,谢谢

@Kevinboy2020
Copy link

当前我们在中科麒麟也遇到了同样的问题?是否解决了呢

image

我看这个close了,是重复,还是解决了,谢谢

通过降低版本的方式,在麒麟上安装

@qq31715879
Copy link

2024年了, 2.3.2最新版本还是依旧启动报错

@3054308729
Copy link

3054308729 commented Aug 24, 2024

大家在服务器安装 Microsoft Visual C++ 2015 Redistributable 后如果还不行。
请访问 https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170
如果已经安装过,请先卸载原先的安装文件再,下载最新的安装文件。
我这边安装的nacos版本是:2.3.0。
服务器:windows 2016 datacenter
附上vc安装文件
VC_redist.x64.zip

@dove2021
Copy link

dove2021 commented Sep 5, 2024

我也遇到相同的问题,不过我是将jdk8升级到jdk17,解决,可以参考。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/Document Category issues or prs related to document. dependencies Pull requests that update a dependency file follow up this problem requires continuous follow-up
Projects
None yet
Development

No branches or pull requests