sofastack / sofa-jarslink

Jarslink is a sofa ark plugin used to manage multi-application deployment
Apache License 2.0
3.04k stars 706 forks source link

一些想法 #4

Closed kimmking closed 6 years ago

kimmking commented 6 years ago
  1. 模块跟框架的代码太紧耦合了,一个简单的类加载封装,感觉不像是模块化,更像是业务组件容器(Component)。
  2. 太轻量级了,模块缺乏生命周期管理,缺乏组件的运维性管理。需要对模块的状态和生命周期进行定义。
  3. 缺乏依赖管理机制和模块相互调用机制。
kiral commented 6 years ago

非常感谢你的建议。 1:目前的版本主要是一个模块加载引擎,并提供了调用模块的API。 2:生命周期管理后续会加上。 3:依赖管理像OSGI这种方式非常复杂,在复杂场景下的确是有用处,JarsLink的考虑比较简单轻量级,在复杂场景下还没考虑到好的依赖管理方式,不知道你有没有什么建议? 4:模块互相调用机制后续会加上,初步打算用深克隆的方式,目前在公司内部用的RPC的方式。

weixliu commented 6 years ago
  1. 如果是RPC的方式进行模块之间的调用,感觉和微服务的思路很像,但是微服务目前注册管理,服务调用都有很强力的工具了。
  2. 希望能有文档更多解释一下应用的场景,我可能没有接触过这方面的项目,希望能够解释一下模块化开发解决的痛点,热缓存的系统不希望冷启动嘛。我能想要的主要优势运行时能够进行模块的热插拔,局部重新部署。
wyuxiao729 commented 6 years ago

1、热加载是一点,osgi相似,目前与微服务比起来热加载的优势在慢慢消失。 2、粒度太细,模块之间的划分,依赖管理会很麻烦 3、不能做到cpu,内存,磁盘等资源的隔离是个硬伤。A模块与B模块部署同一个JVM, B模块升级有可能导致JVM内存溢出影响到A模块。

kimmking commented 6 years ago

楼上同学提到的其实是定位问题,jarlink的模块化定位与开发层面的,还是jvm内运行层面的,业务功能组件层面的,还是jvm层面的,还是os vm/docker层面的? 目前看来是前3个。

kiral commented 6 years ago
  1. 我会单独写一篇文章介绍下应用场景来介绍下模块化开发的优点,以及我们的解决方案。
  2. 资源隔离后续会考虑解决,模块之间会因为资源问题互相影响。
  3. 本地调用也支持的。微服务一个服务一个进程,调试需要断点多个端口,比较麻烦,JarsLink可以加载多个fatJar,并把请求路由给多个Jar,这样只需要启动一个进程,DEBUG会更简单,部署又可以按照多进程部署。
weixliu commented 6 years ago

大家回复受益良多。@kiral 期待你的介绍模块化开发优点的文章,希望有一些方便理解的场景。

xingguangsixian commented 6 years ago

今天刚看到这开源组件,正好最近两周正在设计这种“微内核+插件”的框架,主要场景就是解决我们的多数据源采集问题。 目前也是考虑到模块通信的问题,暂时考虑采用“发布订阅”异步通信模式,能满足需求 看到这个jarslink,正在考虑是否可以采用,按我们需求缺一个插件管理系统了

jiangmitiao commented 6 years ago

你好,在oschina看到你的项目。有几个问题请教一下 1、这些模块是跑在同一个jvm中的吧,看你有地方写是多进程,应该是多线程? 2、jvm内如何监控/约束一个模块占用的系统资源? 3、springmvc的优势在你这里好像被削弱了很多,参数绑定好像不好用了?

基于以上这些问题,我现在还没有采用这种模块化/插件化开发方案。

kiral commented 6 years ago

1、这些模块可以跑在一个jvm中,也可以跑在多个JVM中,一个系统有多个模块,系统之间的模块通讯就是跨进程的。 2、目前ALIJVM已经支持多租户,为某个线程分配CPU和内存资源。 3、springmvc我们没有在模块里用,而是在系统里集成SpringMvc,然后基于一定的规则把HTTP请求路由到模块。


方腾飞/kiral Email:tengfei@ifeve.com weibo:@方腾飞-清英 Web:http://ifeve.com

On 12 Mar 2018, at 3:51 PM, zhangheng notifications@github.com wrote:

你好,在oschina看到你的项目。有几个问题请教一下 1、这些模块是跑在同一个jvm中的吧,看你有地方写是多进程,应该是多线程? 2、jvm内如何监控/约束一个模块占用的系统资源? 3、springmvc的优势在你这里好像被削弱了很多,参数绑定好像不好用了?

基于以上这些问题,我现在还没有采用这种模块化/插件化开发方案。

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/alibaba/jarslink/issues/4#issuecomment-372219942, or mute the thread https://github.com/notifications/unsubscribe-auth/ADpZWAPWwvjAQg7Y-WJ_waWvEYrMmfWkks5tdijzgaJpZM4R-ylD.

sd4324530 commented 6 years ago

能不能不要依赖spring呢?

kiral commented 6 years ago

目前需要依赖,因为实例隔离是用Spring实现的

方腾飞/kiral Email:tengfei@ifeve.com weibo:@方腾飞-清英 Web:http://ifeve.com

On 22 Mar 2018, at 9:58 AM, Pei Yu notifications@github.com wrote:

能不能不要依赖spring呢?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/alibaba/jarslink/issues/4#issuecomment-375153422, or mute the thread https://github.com/notifications/unsubscribe-auth/ADpZWOgx93kkGmGm3dvzOE_uqVOMMRoYks5tgwVKgaJpZM4R-ylD.

wjp609922192 commented 6 years ago

希望作者能详细讲解下相比osgi模块化的区别和优势,是否支持热更新等等。

slieer commented 6 years ago

做这个项目有多少意义? java9已经支持 module ! jboss module , OSGi 早已成熟商用, 为什么?

kiral commented 6 years ago

1:有很多系统还是用JAVA6或JAVA8,很难升级到JAVA9。 2:OSGI比较重,不够轻量级,很多团队都不愿意使用。

方腾飞/kiral Email:tengfei@ifeve.com weibo:@方腾飞-清英 Web:http://ifeve.com

On 27 Mar 2018, at 1:35 PM, zhaixiaobin notifications@github.com wrote:

做个项目, 有多少意义? java9已经支持 module ! jboss module , OSGi 早已成熟商用, 为什么?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/alibaba/jarslink/issues/4#issuecomment-376402704, or mute the thread https://github.com/notifications/unsubscribe-auth/ADpZWE8te0WCiT6MZPWSH9biMU35vNFdks5tic-tgaJpZM4R-ylD.

wyuxiao729 commented 6 years ago

我几年前用osgi实现过类似的开源服务管理平台 osmp, 感觉模块化与微服务化其实并不冲突。模块化更强调的是公共组件,基础组织,业务组件的划分和依赖管理,模块的动态加载,模块的注册发现等,微服务的实施需要强有力的团队推进,并且我理解的微服务并简简单单的就是以进程隔离,实现服务注册、发现、负载、融断,不管是基于springboot还是k8s来讲,我认为微服务更应该是一个环境,一个生态,一个持久交付并可运营,可监控的一样一个持久交付的环境。

frankies commented 6 years ago

昨天晚上读了源代码,有几个疑问:

  1. 多模块后,事务管理怎么保证一致?
  2. 模块管理器什么时候关闭?是JVM Shutdown的时候?
  3. 模块A 依赖模块B 的 B1 方法,似乎都得在模块A 编写 Action.exec方法的代码,这不就已经紧耦合了?
  4. 这个功能太像OSGI了,是不是 Mini 型的OSGI?

以上,请指教!

kiral commented 6 years ago

1:优先在模块内部实现事务,如果跨模块调用保证事务可以考虑用分布式事务框架。或者通过重试保证最终一致性。 2:Spring上下文关闭的时候。 3:没明白你想问的点。A调用B系统,A系统肯定依赖B,模块之间的隔离性目标是他们的隔离性和两个系统是一样的。


方腾飞/kiral 并发编程网创始人

Email:tengfei@ifeve.com 微信公众号:ifeves weibo:@方腾飞-清英 Web:http://ifeve.com

On 11 Apr 2018, at 4:18 PM, frankies notifications@github.com wrote:

昨天晚上读了源代码,有几个疑问:

多模块后,事务管理怎么保证一致? 模块管理器什么时候关闭?是JVM Shutdown的时候? 模块A 依赖模块B 的 B1 方法,似乎都得在模块A 编写 Action.exec方法的代码,这不就已经紧耦合了? 以上,请指教!

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/alibaba/jarslink/issues/4#issuecomment-380368383, or mute the thread https://github.com/notifications/unsubscribe-auth/ADpZWECWFRJ7hwpP6d1LErCF4CbP65Hgks5tnbxsgaJpZM4R-ylD.