如何实现企业系统架构设计技术与互联网应用技术的结合

凤舞凰扬 2011-08-13
icewubin 写道

首先,Struts+Spring+Hibernate(iBatis)不是架构,这个离架构差的很远,这个只是某台app服务器上的一个很小的软件架构而已。

互联网企业很多使用这个软件架构,很多时候是考虑招人方便,工作移交成本低。

说些题外话:Struts2在互联网上使用,就像使用J2EE一样,只用很少的一些功能而已;对于访问量很小的一些系统或者互联网的内部后台系统,hibernate没什么不可以的。

第一点,赞成。
第二点,刚好相反。 稍微有点互联网企业没有几个使用这种方式,但是企业开发非常普遍。
第三点,你的题外话说明你根本没有了解企业级系统和互联网系统的区别。看看我的另外一个关于大规模并发问题分析的帖子吧。

icewubin 2011-08-13
凤舞凰扬 写道
icewubin 写道

首先,Struts+Spring+Hibernate(iBatis)不是架构,这个离架构差的很远,这个只是某台app服务器上的一个很小的软件架构而已。

互联网企业很多使用这个软件架构,很多时候是考虑招人方便,工作移交成本低。

说些题外话:Struts2在互联网上使用,就像使用J2EE一样,只用很少的一些功能而已;对于访问量很小的一些系统或者互联网的内部后台系统,hibernate没什么不可以的。

第一点,赞成。
第二点,刚好相反。 稍微有点互联网企业没有几个使用这种方式,但是企业开发非常普遍。
第三点,你的题外话说明你根本没有了解企业级系统和互联网系统的区别。看看我的另外一个关于大规模并发问题分析的帖子吧。

关于第二点,当然是要看是什么样的企业,PHP的高级人才是很难招的,我们公司又不是没有尝试过,我们公司之前有相当长的一段时间内是PHP和java齐头并进的,而且是PHP起家的,一路过来的部门经理说,当时就是因为中高PHP的人非常难招,迫不得已才用java的。

从另一个角度来说,由于分工越来越细,JS、CSS、和部分的HTML都是由前端工程师包办了,前台的后端(html输出和ajax服务端)、后端服务(有些人喜欢叫做中间件)这两层往往是是可以在一起的,用java很容易做到,PHP就不行,搞个自动任务还要依赖cron,而我们公司的dba和运维对历史上产生的无法维护的cron(写cron的人离职了,这东西很难接手),深恶痛绝。

上面一段写的有点问题,说岔了,再补充一下,由于前端工程师的细分,后端更重注重服务响应的速度、稳定性、后端和后端之间的通讯的一些问题,如果用PHP挡在所谓中间件的前面,没什么太大的意思,浪费人力而已,用java可以大大减少后端和后端所谓中间件的复杂度。我知道肯定有相当多的人和我意见相左,不过这个讨论开的话,话题太广。

第三点,你说我不了解?那你对我了解多少?做人不要太武断。我现在的公司,每天的访问量是亿级的。
同样,我对你也不了解,你说的大规模并发分析的帖子给个url我来瞻仰瞻仰。
icewubin 2011-08-13
凤舞凰扬 写道
icewubin 写道
凤舞凰扬 写道

4. 在架构师层面,扯淡的太多,什么SOA, MDA, 还有TOGAF。这些东西作为思维和方法的指导不为过,在技术层面,需要架构师理解业务,懂得环境,懂得如何让技术适用环境,依靠环境选择技术。

我的建议是,要谈企业架构,最好先界定边际范围,例如某个具体的行业甚至于一块具体的业务,泛泛的谈企业架构,好比谈IT架构那样同样空洞。

不同的企业,需求不一样的。

   你都没有明白什么是企业架构,千万别从某些地方看到这个概念就胡乱用啊(如果你有兴趣考个TOGAF认证,你可以好好去看看)。我们谈的,包括整个圈子谈的更加侧重的是技术层面。
   虽然我是TOGAF认证的架构师,我也不得不说TOGAF在某些方面害人不浅,误导了太多架构师或者想成为架构师的程序员,以为学到了个企业架构的新概念,因为它谈到的架构就是我们平日聊的架构,以为它是个银弹。

我有点明白了,你说的“企业架构”是你嘴中的企业架构,我们外人当然是不懂的,不如你说说你嘴中的“企业架构”的定义是什么?

作为“外人”,我的观点很简单,如果银行和股票交易系统都算是企业级么?需求天差地别,架构怎么会可能一样?
icewubin 2011-08-13
凤舞凰扬 写道
icewubin 写道
凤舞凰扬 写道
1. 企业电子商务化以及企业信息系统互联网化是企业信息化必然的转向,所以企业级系统的设计技术必须和互联网技术实现结合和融合。

你这个观点本身没错,但是隐含了一个需求,这个需求就是“企业信息系统互联网化是企业信息化必然的转向”,说的是没错,但是我认为国内大部分传统企业不会有这个需求,或者不需要这个需求。

之前为什么说了那么多你认为不找边际的东西,因为国内传统企业级从招标到实施,虽然有改善,但是还有带了太多和实际需求不符的因素掺杂在内,需求一旦偏差,势必影响最终架构设计。

   你认为大多数企业没有这样的要求,如果从数量上,似乎你的观点占有。但那是因为很多企业本身信息化建设还没到那一步。我可以告诉你,中国铁建、南航算是传统行业了吧、钢铁企业也算是传统行业了吧、物流行业呢?是实打实的需求让我,让我们需要去思考和面对。
   其次,对于一个技术人员,尤其是架构师来说,你的思维你的能力如果不走在方案实施的前面,难道要等着这样的项目和方案过来时,再来拍脑袋么?

1)你现在举个几个少数例子,就断言传统企业都有这个需求就是在拍脑袋,你先想想自己是不是经常在拍脑袋,或者说有很多隐含的边界条件自己都没有表达出来,其实你说的不过是国有大型而已。国内难道没有小的传统企业了?小企业的需求就不算企业级了么?

2)我不知道你在公司中属于什么职位,我可不认为来JE的技术人员中,能有多少比例的人幸参与中国铁建、南航的架构设计,并且最终凭借架构设计拿下订单。

3)对于一个技术人员,在没有实践的基础上,空谈架构,你以为这个技术人员通过培训就能参与中国铁建、南航的架构设计了么?
icewubin 2011-08-13
凤舞凰扬 写道
icewubin 写道
凤舞凰扬 写道
icewubin 写道
我来提几个问题吧:

1)互联网很多技术,例如最近很火的mongodb,在互联网环境可以不断的进行升级(mongodb版本升级速度很快的),进行数据迁移,但是传统企业级的甲方能容忍么?

2)企业级的甲方往往更倾向于成熟的经过检验的技术,而互联网的很多技术在这些人眼里,是达不到这个要求的,例如cassandra还没完全热起来,就被facebook半放弃了。

   第一个问题说到互联网和企业在做技术决策时的心态,第二个就比较有意思了,楼上认为Facebook的是互联网系统还是企业系统啊?

就谈谈第二个问题,因为facebook的名气,助长了nosql或者说助长了cassandra的热度,仅仅是助长了,助长的原因也不是facebook的企业类型,是由于facebook的知名度。

问题来了,从理论上来说,无论cassandra还是其他nosql,其架构中都有其闪光点的地方,理论上也有比较完善之处。对于这个例子,请问传统企业级如何借鉴?

1)如果是直接引入产品,大多都不成熟,或者都还没有一定的时间检验。

2)如果引入概念或者理论,估计更不靠谱,我是不知道如何这么做。

我就是想说,互联网的技术,传统企业能借鉴的,只能是冰山一角,本质上是因为需求背景差异太大导致的。

   回答你的两个问题,第一,引入产品,大多不成熟,那是你只看到了开源的非商业性支持产品。如果单纯从商业产品角度看,Oracle的Coherence已经非常成熟了;而非商业产品,Memcache, Squid也非常成熟了,我不清楚你所谓的时间检验是个什么检验法。
    其次,技术的结合不是一个概念,而是一个实践。如果传统企业的信息化走向互联网,那么互联网的技术可以借鉴的思维和实践有太多了。

1)oracle很成熟,那互联网企业用的为什么这么少呢?

2)Memcache很成熟么?自带的failover都没有,不能在不重启的情况下重新分配存储单元大小,不支持对数组类型的直接操作(可以极大的减少特定需求下的网卡流量),不支持可选的持久化(机房或机柜的偶然断电你听说过么)。squid成熟么?在我们公司的一个c大牛改写之前,经常性崩溃的(一般不能在高负载下撑过1个月不重启);某些情况下,某些跳转需求还需要apache来辅助,很多时候为了少装一个apache还不得不向squid妥协。时间检验说的也不是很精确,还是邓-小-平说得好,实践是检验真理的唯一标准。

3)能借鉴的当然很多,你不要误会,但是不要没有边界的直接空谈。我还是那句话,所谓企业架构之空洞和以前大谈IT架构、企业信息化一样空洞。
jxsgy 2011-08-16
企业级的对事物的要求高。对数据完整性的要求高
凤舞凰扬 2011-08-17
icewubin 写道

1)oracle很成熟,那互联网企业用的为什么这么少呢?

2)Memcache很成熟么?自带的failover都没有,不能在不重启的情况下重新分配存储单元大小,不支持对数组类型的直接操作(可以极大的减少特定需求下的网卡流量),不支持可选的持久化(机房或机柜的偶然断电你听说过么)。squid成熟么?在我们公司的一个c大牛改写之前,经常性崩溃的(一般不能在高负载下撑过1个月不重启);某些情况下,某些跳转需求还需要apache来辅助,很多时候为了少装一个apache还不得不向squid妥协。时间检验说的也不是很精确,还是邓-小-平说得好,实践是检验真理的唯一标准。

3)能借鉴的当然很多,你不要误会,但是不要没有边界的直接空谈。我还是那句话,所谓企业架构之空洞和以前大谈IT架构、企业信息化一样空洞。

  你都没理解互联网系统和企业级系统的差别,所以才会有上述所谓的疑问。没有failover就代表不成熟,就说明不能在企业级系统中用?你这相当于拿把大刀切菜,还怪大刀做的不好一样。
  SQuid不成熟,Squid是用来做负载均衡分发的么?用apache来辅助,呵呵,你连这两个东西定位都搞混了。 如果要代替apache,你应该使用的是ngix。
  既然谈到了这些产品,免得被你说空洞,我就来说说如何在企业级信息系统中使用这些产品。
  首先memcache, 做中央集中式的数据缓存,结合本地缓存(比如Hibernate的ehcache,或者oscache),避免多个应用节点间的数据同步造成节点间网络通信代销和网络堵塞。memcache根本不用考虑failover,你什么时候听说过缓存要做failover,更加不用担心缓存持久化。(你前面谈的遇到的问题是拿Memcache作为内存数据库,比较NoSQL和传统OLTP数据库的差别,企业级系统可以部分使用NoSQL,但没有任何人要你使用NoSQL代替OLTP数据库)
  其次,Squid,可以用在对数据同步不敏感的页面缓存,以及查询缓存。前者,可以用在报表展示页面,可以作为动态内容静态化的缓存;后者可以用在基于GET方式的查询(对数据同步性不敏感),避免重复过多地查询导致数据库访问(包括IO)及页面渲染。
   我之所以发出这个主题,就是想让更多地人讨论具体的问题,尤其是实际的问题。
icewubin 2011-08-17
凤舞凰扬 写道
icewubin 写道

1)oracle很成熟,那互联网企业用的为什么这么少呢?

2)Memcache很成熟么?自带的failover都没有,不能在不重启的情况下重新分配存储单元大小,不支持对数组类型的直接操作(可以极大的减少特定需求下的网卡流量),不支持可选的持久化(机房或机柜的偶然断电你听说过么)。squid成熟么?在我们公司的一个c大牛改写之前,经常性崩溃的(一般不能在高负载下撑过1个月不重启);某些情况下,某些跳转需求还需要apache来辅助,很多时候为了少装一个apache还不得不向squid妥协。时间检验说的也不是很精确,还是邓-小-平说得好,实践是检验真理的唯一标准。

3)能借鉴的当然很多,你不要误会,但是不要没有边界的直接空谈。我还是那句话,所谓企业架构之空洞和以前大谈IT架构、企业信息化一样空洞。

  你都没理解互联网系统和企业级系统的差别,所以才会有上述所谓的疑问。没有failover就代表不成熟,就说明不能在企业级系统中用?你这相当于拿把大刀切菜,还怪大刀做的不好一样。
  SQuid不成熟,Squid是用来做负载均衡分发的么?用apache来辅助,呵呵,你连这两个东西定位都搞混了。 如果要代替apache,你应该使用的是ngix。
  既然谈到了这些产品,免得被你说空洞,我就来说说如何在企业级信息系统中使用这些产品。
  首先memcache, 做中央集中式的数据缓存,结合本地缓存(比如Hibernate的ehcache,或者oscache),避免多个应用节点间的数据同步造成节点间网络通信代销和网络堵塞。memcache根本不用考虑failover,你什么时候听说过缓存要做failover,更加不用担心缓存持久化。(你前面谈的遇到的问题是拿Memcache作为内存数据库,比较NoSQL和传统OLTP数据库的差别,企业级系统可以部分使用NoSQL,但没有任何人要你使用NoSQL代替OLTP数据库)
  其次,Squid,可以用在对数据同步不敏感的页面缓存,以及查询缓存。前者,可以用在报表展示页面,可以作为动态内容静态化的缓存;后者可以用在基于GET方式的查询(对数据同步性不敏感),避免重复过多地查询导致数据库访问(包括IO)及页面渲染。
   我之所以发出这个主题,就是想让更多地人讨论具体的问题,尤其是实际的问题。

1)memcache不成熟的地方我说了不止一点,请不要避重就轻,我看你喜欢咬文嚼字,不如你先定义一下什么叫做“成熟”,“成熟”在互联网和企业级的定义是各不相同的,我这里说的“成熟”就是指企业级的成熟。

2)我有说squid是作负载均衡的么?我有说我们公司没有用ngix?请你不要排脑袋随意臆想行不行?我说的需要apache辅助,已经是ngix、webcache(这一层是squid缓存结构)、netscaler之后的,多个为了复用某2台app而已。这里也请不要比重就轻,squid用于缓存在高负载下也是有稳定性问题的,至少曾经有过,不清楚目前的官方版本是否fix了这个bug。

3)memcache不支持持久化,可以算半个问题,因为memcache本来就设计成不持久化的,不支持failover,就是因为我有后续的话,就等你接茬了,我们公司就碰到过这样的真实的事情,IDC机房的某个机房员工操作机器上机柜的时候,脚碰了电源,一台比较关键的memcache服务器断电了,由于不支持failover,导致整个网站各个应用连锁反应,进入半雪崩状态(数据库负载进入恶性循环,各app之间的调用越来越慢,导致app应用也进入恶性循环),虽然这台机器经过联系立马重启了,由于不像TT那样支持持久化,缓存填充需要8个小时,这8个小时中,整站一直处于一种不稳定的状态。

memcache是做什么用的呢?顾名思义,缓存用的,如果挂了呢?很多网站都没有很好的考虑这个问题的。后续又能接很多茬,如果你想继续深入单点故障和可降级服务的话。

有空你可以看看redis的一些memache没有的功能。

拿memcache当内存数据库?你也太小看我们公司的开发人员了,请别当他人是傻子好吧,我们好歹知道memcache断电是会丢数据的。
icewubin 2011-08-17
还有也请了解一下memcached的存储单元大小不能改变(不重启服务)的问题,这个才是大数据量存储中真正要命的,而很多人都不重视的问题。

一旦除了问题,还不知道是怎么回事,还会以为是memcached服务器内存不够了,会发现同样的memcached服务器,不同的数据缓存的命中率(其实是淘汰概率)不一样。
凤舞凰扬 2011-08-18
icewubin 写道

1)memcache不成熟的地方我说了不止一点,请不要避重就轻,我看你喜欢咬文嚼字,不如你先定义一下什么叫做“成熟”,“成熟”在互联网和企业级的定义是各不相同的,我这里说的“成熟”就是指企业级的成熟。

  什么叫企业级成熟?要运用在什么场景下才是企业级成熟?是不是大公司出的商业产品才叫企业级成熟?那么开源产品有没有你所谓的企业级成熟?
  我告诉你,淘宝也用Memcache,阿里巴巴也在用,腾讯拍拍也在用,也有很多企业系统也在用。告诉我们,什么场景下才是企业级成熟?莫非银行、金融、保险?
icewubin 写道

2)我有说squid是作负载均衡的么?我有说我们公司没有用ngix?请你不要排脑袋随意臆想行不行?我说的需要apache辅助,已经是ngix、webcache(这一层是squid缓存结构)、netscaler之后的,多个为了复用某2台app而已。这里也请不要比重就轻,squid用于缓存在高负载下也是有稳定性问题的,至少曾经有过,不清楚目前的官方版本是否fix了这个bug。

   呵呵,算是我误解你的意思,但你要先看看你自己的话先吧
icewubin 写道
squid成熟么?在我们公司的一个c大牛改写之前,经常性崩溃的(一般不能在高负载下撑过1个月不重启);某些情况下,某些跳转需求还需要apache来辅助,很多时候为了少装一个apache还不得不向squid妥协。

呵呵,Squid高负载下有稳定性问题,告诉我哪个软件在高负载下就没有稳定性问题?你指的高负载又是多大的负载?Squid本身就属于互联网应用的技术产品了,应对一般企业级互联网化访问负载根本是绰绰有余。当然了,我相信会有更合适的产品,那真还要请互联网技术公司的架构师们建议了。这更是我出此主题的初衷。

icewubin 写道

3)memcache不支持持久化,可以算半个问题,因为memcache本来就设计成不持久化的,不支持failover,就是因为我有后续的话,就等你接茬了,我们公司就碰到过这样的真实的事情,IDC机房的某个机房员工操作机器上机柜的时候,脚碰了电源,一台比较关键的memcache服务器断电了,由于不支持failover,导致整个网站各个应用连锁反应,进入半雪崩状态(数据库负载进入恶性循环,各app之间的调用越来越慢,导致app应用也进入恶性循环),虽然这台机器经过联系立马重启了,由于不像TT那样支持持久化,缓存填充需要8个小时,这8个小时中,整站一直处于一种不稳定的状态。

缓存不持久化算半个问题?我真无语了。你电脑CPU的二级缓存会持久化么?缓存干嘛要持久化啊?你谈到的断电导致缓存数据丢失,重新loading需要很大代销,导致数据库负载的恶性循环。不错,这是架构层次问题,但是和memcache以及缓存本身无关。你的所谓memcache可以持久化,是希望能够快速将缓存数据恢复,从而避免给后台IO存储带来直接的压力。可你却不懂得去从另外一个角度思考,如何弱化峰值。这种问题处理的一个基本思路是,保证一定压力下异步从数据库(或者IO存储)恢复数据,边使用边恢复。(因为你根本没有必要全部恢复所有缓存才去使用)这种处理方式和MQ断电恢复持久性消息的原理是一样的。

icewubin 写道

memcache是做什么用的呢?顾名思义,缓存用的,如果挂了呢?很多网站都没有很好的考虑这个问题的。后续又能接很多茬,如果你想继续深入单点故障和可降级服务的话。

   你谈得很好,很多架构师只会用产品,没有考虑可用性、伸缩性、可靠性及健壮性。我个人非常乐意大家把这些问题说出来,把经验分享出来。如果可以,看我建议你开多个主题,就这些架构问题进行更深入的讨论。
icewubin 写道

有空你可以看看redis的一些memache没有的功能。
拿memcache当内存数据库?你也太小看我们公司的开发人员了,请别当他人是傻子好吧,我们好歹知道memcache断电是会丢数据的。

呵呵,首先,我没有更不会有任何不尊敬的意思。对每一个技术人员,对每一项技术我都保持尊重。另外,你谈到了redis,我没有用过,很乐意看到你的分享。
Global site tag (gtag.js) - Google Analytics