关于 J2EE 转型 Python 的相关请教

2014-07-06 20:51:49 +08:00
 tan9le
刚刚发了一篇,把Golang其实也是带上的,写了半天,点了创建,没有任何错误提示,但是缺没有创建成功?@Livid 是现在有审核/延迟机制,还是我操作不当?总之我在我自己发布的主题里也找不到。

情况是这样的,我们公司大多数的项目都是使用Struts2+Spring+Mybatis进行开发的,由于今年又新进了一些小白(校招进来的,有一部分是纯小白),我最近在琢磨着拉出一只小团队,使用Python把我们的部分产品进行重写,一方面是做技术积累,另外一方面其实是看中了Python的开发速度和便捷性。

在V2EX中潜水了这么长时间以后,我初步的想法是使用Tornado+sqlalchemy,但是心中还存在几个比较大的疑惑希望各位V友给予解惑

1.有无像Spring面向切面和依赖注入的成熟技术方案或者框架?

2.我搜索到Python方面进行事物控制基本都依赖于手动提交数据库事物,有没有分布式的事务管理和面向切面的事务管理?

3.在数据库访问方面,JAVA的JDBC非常方便,但是在Python上我目前的调研结果是比较复杂,就比如访问Oracle,JAVA只需要将JDBC的jar包放在类路径内就可以直接访问,我可以在应用中打包mysql、mssql、oracle等等的jar包,而Python好像每种数据库都对应着不同的配置方式,就比如Oracle的连接,就依赖于Oracle客户端和Oracle的一些环境变量的配置,这一块有没有不依赖于环境的,比较简单的解决方案?

3.在应用发布方面,J2EE将所有的第三方类库都可以打包进应用,或者统一配置在类路径下就可以,Python我好像没有搜索到什么简便的办法,都在说使用VirtualENV+pip来构建环境,能不能象JAVA一样打包进工程内,而摆脱服务器环境的依赖?这点其实蛮重要的,我们的研发和实施是两个团队,实施团队已经习惯了扔个war包进行就可以运行。

4.我们目前采用了Dubbo+Zookeeper的架构来应对高并发场景,Python在高并发、分布式上有没有成熟的技术方案?

希望这次主题能够发成功,请各位V友多给点意见,谢谢!
6503 次点击
所在节点    Python
40 条回复
zava
2014-07-06 20:56:41 +08:00
听lz这样描述, 感觉你们的技术栈都是 java(JVM) 生态的啊. 何苦要换成 Python, 成本代价很大的.
Livid
2014-07-06 21:03:55 +08:00
如果你在写帖子的过程中打开了其他主题,或者是回复过其他主题,那么会造成你写帖子的页面上的 CSRF token 失效。
Livid
2014-07-06 21:04:32 +08:00
如果是出现这种情况,那么你只要继续点提交就可以发送成功的。
tan9le
2014-07-06 21:07:10 +08:00
@zava JAVA作为主要的技术支撑,但是J2EE对于纯小白来说,学习代价还是有些大的,而且随着业务的逐渐发展,有些项目已经不是由客户提供环境,我们进行部署的这种方式来实施了,有一部分客户是直接委托我们进行开发、运营。
算是做一部分技术积累和尝鲜吧,也不可能大规模,一个小组来做。
tan9le
2014-07-06 21:08:53 +08:00
@Livid 我在写帖子过程中开了一个标签页,又打开了一次v2ex,并按了一次Command+R,莫非是这个原因?
Livid
2014-07-06 21:09:29 +08:00
@tan9le Yes.
reeco
2014-07-06 21:29:42 +08:00
javaEE程序猿飘过
est
2014-07-06 21:40:44 +08:00
这个不叫转型到Python。。这个叫用Java的框去套python。。。。。Zookeeper没有替代,python也得继续用zookeeper的客户端。
n37r06u3
2014-07-06 21:41:53 +08:00
最近面试一家公司 也准备转python开发 不过python做企业级应用 经验确实不丰富
skybr
2014-07-06 21:42:59 +08:00
要发挥tornado的异步优势, 得找容易被嵌进ioloop的driver. 配sqlalchemy会被坑的.
tan9le
2014-07-06 21:43:02 +08:00
@est 感谢,我比较关心的是分布式以及事务控制,有无成熟点的解决方案呢?
tan9le
2014-07-06 21:44:16 +08:00
@skybr 感谢,同上一个回复,在分布式和事务控制方面,Python有没有成熟的解决方案?
tonyluj
2014-07-06 21:47:23 +08:00
1.对于这个问题,可以参考 http://stackoverflow.com/questions/2461702/why-is-ioc-di-not-common-in-python
3.数据库连接方面,cx_oracle确实依赖一些Oracle client或env,上次开发配置Oracle就花费了不少时间,最后还是用docker
3.这个把依赖的库放到工程目录就可以了吧
4.高并发的话,集群可以用lvs,也可以在单机用Nginx+supervisor+N个tornado,数据库用memcached+Mysql,数据库写的话加一层rabbitmq

LZ可以参考一下豆瓣、Dropbox这些使用Python的公司是怎么解决的。
palmers
2014-07-06 21:50:50 +08:00
围观下
tan9le
2014-07-06 21:59:17 +08:00
@tonyluj 非常感谢,针对第一点,我想是我的思维模式已经习惯了J2EE导致的
依赖方面,比如我在开发环境中使用了virtualenv,然后通过pip安装了10个第三方库,那么我将virtualenv中的Lib目录下的py/pyc/pyd拷贝至生产环境就可以使用了么?
最后一点我可能没有表述的很清楚,LVS/Nginx,或者F5都可以实现负载均衡,但是我还是比较关注服务路由,服务治理/管理,还有多版本服务共存等等的解决方案,当然这一块可以通过自行编码实现,但是指望一个新的团队去造轮子可能会不太现实,请问这一块有没有什么建议呢?
JoshuaJin
2014-07-06 22:23:40 +08:00
看了LZ的问题觉得如果只是做一些技术积累的话完全没必要用python去重写java版本的应用。本来JAVA EE提供很多现成的功能还要在python体系内去找,功能稳定不稳定另说,能不能找到还是个问题。不太清楚LZ看中python在企业应用中有什么优势,如果是说开发效率,部署灵活性的问题,为什么不考虑scala, clojure呢?framework也有,和java也能互通,觉得很有优势。
tan9le
2014-07-06 22:32:01 +08:00
@JoshuaJin 我没看中Python在企业应用中的优势,而且这个主题就是来问问大家Python在企业应用中有没有优势的。
其实我是有私心的啦,首先我自己对Python比较感兴趣;其次,Python的学习难度比较低,如果新人想系统的学习J2EE,耗费的时间也比较长,换句话说,我现在想用Python的一大原因就是他的门槛低,学习速度快
est
2014-07-06 22:47:03 +08:00
@tan9le 我告诉你实话把:

> 注服务路由,服务治理/管理

python这一块基本是靠——手动。因为Java冷启动慢,需要编译才能部署,所以那么麻烦,python呢,一般都是新功能直接杀掉worker重启容器即可。载入时间基本不成问题。甚至有在服务器上直接修改.py文件在线调试的(喂喂喂这样干过的不要不承认!)

服务治理/管理还是很原始——用环境变量、Redis、SQLite搞的多的是,甚至配置就直接写成一个.py文件然后项目去import即可。其实.py文件可读性比较高了可以直接人工修改。没有Zookeeper那种高大上的。
tan9le
2014-07-06 22:52:50 +08:00
@est 好吧,那照这么说来,实际上我想让一帮小白去做这些事情就是不靠谱的了,最起码也是有一定设计的能力的人才可以。

感谢你的指点。
wuxqing
2014-07-06 23:21:12 +08:00
个人观点:
python入门简单,但要用好,也是不易的
python做最短平快(或者1、2个人)的项目挺好,但是大点的项目,对人员要求还是蛮高的。可能会写出很难维护的项目,我已经经历过了
纯小白还是用你成熟的技术(架构)吧,用python不见得省心

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/121246

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX