#技术分享# SOA 个人一点愚见

Wesley13
• 阅读 652

自去年加入新的公司到现在整一年了,职涯过程有些迂回,但总体实在曲折中攀升,首先谈谈我所参与公司的产品,该产品定位于SOA架构(SOA这玩意其实不是很新鲜的事物,大体上对其有一定的认知)。但是没有实操的经验,所以一路走来到现在,感觉是失败居多,同时也印证了古语:“失败是成功之母”,特别是最近的一段时间,我一直在反思这一年来SOA下如何设计与架构以及实施,多少有点自己的体会,记录下来,算是自己成长的步伐。
第一、业务的成熟度,SOA下最核心的一条就是 服务的可重用性。撇开技术不谈,首先服务发布是为了满足某一特定的业务实现,所以,业务的成熟度直接影响到SOA架构下服务的设计与可实施程度,选择SOA架构的背景是业务具有一定的成熟度,而且在相对的一段时间内,该业务是趋于稳定的,而不是变化的。另外一种情景就是作为产品设计者,对产品进行了高度的抽象,可以把底层公用的服务进行明确的描述说明,在这种模式下,SOA的引入才可能体现其复用的价值。否则,接口满天飞,每个业务的变更都需要对接口进行一次修正,而与之关联的服务都必须对此做出适应性的调整。其后果无法想象。
第二、渠道与业务服务剥离,首先这里定义的渠道是以总狭隘的渠道,是技术上的渠道,例如 http表单、WS服务、Restful、socket、ftp、MQ等,这些都是作为数据传输的技术实现,仅仅是一种数据通信的载体,在SOA模式下,一定要把渠道与服务做明确的切割,这里角度的讨论的粒度比较细致一些。服务是业务逻辑的实现,渠道仅仅是数据传输的通道,渠道可以多种,但是业务实现只有一种,把这种思维投影与传统的J2EE架构上,则表现为四层架构(web层、应用层、服务层、数据层),这种也是个人比较推崇的架构模式,传统的三层架构是一种被一些专家定义为是贫血模型,其实我也赞同这种观点。而这种投影在SOA架构则体现为( web层、应用层、服务BPEL、服务提供层、数据层 ),唯一去别的一点就是 传统的四层架构 服务层的服务提供了一个整体的业务实现,而SOA下,可以把服务切割的更加细致,通过BPEL的组装实现一个完整的业务逻辑。三层架构下,实施SOA,对服务的粒度切割带来了更多的限制。
第三、服务消息的设计,记得以前有这样的一个面试笑话:问:什么是J2EE,答曰:增删改查 就是J2EE。无论是什么复杂的系统以及应用,都是围绕数据展开,这就带了一个新的话题:业务建模。在SOA模式下,为了实现其服务的灵活组装,必然要对服务之间的数据进行适配处理,如何符合接口之间消息设计没有一定的规则与逻辑,对于服务流程定制是一种能够噩梦,要分别针对不同的服务之间进行数据适配,显然这种是不可取的,特别是针对产品性的开发。一开始要内部业务流转的模型进行高度的抽象,从而定义出合理的接口消息协议。从而更好地实现服务的组装。

    第四、 事务控制,在SOA下,技术挑战之一就是事务的控制,这一点我也没有很好的答案,一种是基于JTA的跨库事务,一种是基于跨域的数据库事务,两者无法同时满足,这个也是一直困扰我的一点,无解。
第五、安全性考虑,安全在SOA下显得尤为重要,因为其分布式部署带来的一些问题,例如消息的完整性、消息的不可抵赖性、接口的容错性等这些都直接影响SOA运行的健壮性。

   第六、SOA下数据服务的提供,在SOA下,数据层是一个什么样的角色,如何定位数据层、以及数据层在SOA模式下提供什么方式的服务可以更好的满足系统,目前对于现在的我还是有所难度,例如SOA模式数据共享问题,元数据管理等等此类的问题。

     
   写完这些,都11点半了·~~ 收拾一下,买菜做饭。技术在重要也是为了生活。坚持不做技术男。哈哈~~~~~~

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
SOA认知和方法论 | 京东物流技术团队
架构的范畴太大太广,本文尝试从一个点切入阐述一下个人的认知。有太多相关性的问题想去阐述,比如SOA与BPM的结合、实践过程中遇到的细节问题等等,为了比较干净的剖析SOA还是删除掉了。希望各位看官有所收获
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这