Architect_022:如何把传统应用架构迁移到微服务架构?(摘录+整理)

标签: 软件设计模式与架构 | 发表时间:2016-06-12 02:11 | 作者:noreply@blogger.com (千红一窟)
分享到:
出处:http://maping930883.blogspot.com/
1. 第一步:停止让单体式应用继续变大

相反,应该采取逐步迁移单体式应用的策略,通过逐步生成微服务新应用,与旧的单体式应用集成,随着时间推移,单体式应用在整个架构中比例逐渐下降直到消失或者成为微服务架构一部分。
当开发新功能时不应该为旧单体应用添加新代码,应该是将新功能开发成独立微服务。

除了新服务和传统应用,还有两个模块:
其一是请求路由器,负责处理入口(http)请求,有点像之前提到的API网关。路由器将新功能请求发送给新开发的服务,而将传统请求还发给单体式应用。
其二是胶水代码(glue code),将微服务和单体应用集成起来,微服务很少能独立存在,经常会访问单体应用的数据。胶水代码,可能在单体应或者为服务或者二者兼而有之,负责数据整合。微服务通过胶水代码从单体应用中读写数据,单体应用需要提供的远程API。

胶水代码也被称为容灾层(anti-corruption layer),这是因为胶水代码保护微服务全新域模型免受传统单体应用域模型污染。胶水代码在这两种模型间提供翻译功能。

将新功能以轻量级微服务方式实现由很多优点,例如可以阻止单体应用变的更加无法管理。微服务本身可以开发、部署和独立扩展。
然而,这方法并不解决任何单体式本身问题,为了解决单体式本身问题必须深入单体应用​做出改变。
 
2. 第二步:将前端和后端分离减小单体式应用复杂度的策略是将表现层和业务逻辑、数据访问层分开。典型的企业应用至少有三个不同元素构成:
  • 表现层 处理HTTP请求,要么响应一个RESTAPI请求,要么是提供一个基于HTML的图形接口。对于一个复杂用户接口应用,表现层经常是代码重要的部分。
  • 业务逻辑层 完成业务逻辑的应用核心​
  • 数据访问层 访问基础元素,例如数据库和消息代理​。
前端和后端分离后,表现层逻辑应用远程调用业务逻辑层应用,下图表示迁移前后架构不同:​


3. 第三步:抽取模块成为独立微服务
一个巨大的复杂单体应用由成十上百个模块构成,每个都是被抽取对象。
(1)可以先抽取容易的模块,让开发者积累足够经验,这些经验可以为后续模块化工作带来巨大好处。可以抽取经常变化的模块,这样获益较大。
(2)可以抽取资源消耗大的模块,例如,将内存数据库抽取出来成为一个微服务会非常有用,可以将其部署在大内存主机上。同样的,将对计算资源很敏感的算法应用抽取出来也是非常有益的,这种服务可以被部署在有很多CPU的主机上。
(3)可以抽取有有粗粒度边界的模块,例如,只与其他应用异步同步消息的模块。

那么,该如何抽取模块呢?

(1)定义好模块和单体应用之间粗粒度接口
由于单体应用需要微服务的数据,反之亦然,因此更像是一个双向API。
因为必须在负责依赖关系和细粒度接口模式之间做好平衡,因此开发这种API很有挑战性,尤其对使用域模型模式的业务逻辑层来说更具有挑战,因此经常需要改变代码来解决依赖性问题。

在本例中,准备抽取使用Y模块的Z模块,X模块引用了Z模块的对象,第一步是定义一套粗粒度APIs,第一个接口应该是被X模块使用的内部接口,用于激活Z模块;第二个接口是被Z模块使用的外部接口,用于激活Y模块。
(2)将模块转换成独立服务。
​一旦完成粗粒度接口,也就将此模块转换成独立微服务。为了实现,必须写代码使得单体应用和微服务之间通过使用进程间通信(IPC)机制的API来交换信息。

在本例中,将Z模块整合成一个微服务基础框架,例如服务发现。


参考文献:
1. http://dockone.io/article/1266

相关 [architect_022 传统 应用] 推荐:

Architect_022:如何把传统应用架构迁移到微服务架构?(摘录+整理)

- - 热爱Java ,热爱生活
第一步:停止让单体式应用继续变大. 相反,应该采取逐步迁移单体式应用的策略,通过逐步生成微服务新应用,与旧的单体式应用集成,随着时间推移,单体式应用在整个架构中比例逐渐下降直到消失或者成为微服务架构一部分. 当开发新功能时不应该为旧单体应用添加新代码,应该是将新功能开发成独立微服务. 除了新服务和传统应用,还有两个模块:.

【转载】HTML5能否颠覆传统Web应用?

- - HTML5研究小组
前段时间我们曾报道了一篇HTML5分裂成两标准,许多开发者对此看法不一,有的认为HTML5是一门刚兴起的技术,很多项目都在磨合期,如今分裂不利于其发展;而有的则认为W3C对未来HTML5反应太过迟缓,WHATWG能够加快HTML5的发展速度. Todoist 网站创始人Amir Salihefendic向我们讲述了利用HTML5开发有很多优势,此外,他还认为HTML5将颠覆Web应用.

7个挑战传统企业的新兴移动应用——你值得关注!

- - 人人都是产品经理
提起最近兴起的一些专注年轻人群的移动应用,相信大家不会陌生,如Airbnb租房,Tinder交友,Yplan(类似豆瓣)等,最近用户增长迅速,但似乎对传统旅游社交市场并没有带来很大的冲击. 究其原因,是这些移动应用自身新开发了新的市场空间,挖掘了年轻人的消费市场. 它们的关注点都在以下几个方面:年轻人,智能手机用户,注重视觉设计的网页和应用外观,并且强调产品的人性化.

以HTML5应用的形式把企业级传统IT应用移动化,Gizmox获融资750万美元

- - 36氪 | 关注互联网创业
移动设备早已渗到企业商用/办公领域,员工持有更多的手机及平板电脑,可企业级IT应用仍多限于Windows平台. Gizmox就是帮企业把传统IT应用云端化和移动化,转成HTML5应用. 它刚获得由Atlas Venture领投的750万美元融资. 为什么会选HTML5而不是针对移动平台做对应的原生应用.

通过优衣库和国家地理的“另类”应用,看传统厂商如何玩转移动互联网

- - PingWest
原本通过实体店卖商品的商户,在移动平台开发一款电子商城App;从事报纸杂志发行的媒体,在iOS平台推出一款电子版的阅读App. 这些司空见惯的跨界做法,都已经是过去时,看看如今还有哪些跨界的新玩法:. 优衣库食谱Uniqlo Recipt:美食、衣着与音乐的完美融合. 本月初,日本快时尚服装品牌优衣库,继优衣库闹钟之后,又推出了一款新的美食App—— 优衣库食谱.

机器学习(非传统统计方法如回归)到底在量化金融里哪些方面有应用?

- - 知乎每日精选
尝试回答一下这个问题,也算是对自己阅读的一些论文的总结,顺带谈下一点自己的思考. 前一阵子被吐槽说中英夹杂,也不是为了装逼,因为其实翻译过来,意思反而有了偏差. 如果你去搜索早期的神经网络、SVM的相关论文,会发现不少是做股票预测的. 原因很简单,因为似乎我们可以天然地把股票投资的问题看成一个分类问题或者回归问题.

Spring boot传统部署

- - 企业架构 - ITeye博客
使用spring boot很方便,一个jar包就可以启动了,因为它里面内嵌了tomcat等服务器. 但是spring boot也提供了部署到独立服务器的方法. 如果你看文档的话,从jar转换为war包很简单,pom.xml的配置修改略去不讲. 只看source的修改,很简单,只要一个配置类,继承自SpringBootServletInitializer, 并覆盖configure方法.

大数据和传统BI

- - 人月神话的BLOG
对于传统企业内部,更多的应该是使用了大数据技术的传统BI平台,或者是融合了传统BI+大数据的混合平台,而不能单纯说是大数据平台. 在谈大数据平台的时候,一味去否定传统BI是不合适的. 在没有和互联网打通的传统企业内部,更多接触的仍然是结构化数据, 优先要解决的是围绕企业核心价值链的数据建模和企业战略,各业务域KPI体系的建立,决策支持和分析这些内容.

传统IT卖场死于谁手?

- pilgrim - cnBeta.COM
一年之前,如果你让我讨论这样的话题,我打死也不会说出来,那时候我还在从华硕产品经理到东芝业务的挣扎转型中,我为什么不愿意做业务. 因为业务不能说真 话,有时还得偏偏违背自己的良心.

传统文化中的糟粕

- Blanboom - 时间堂—GTD学习实践小屋
  我相信,最初提出在传统文化中取其精华,去其糟粕的人,是有着深邃见地和良好用意的. 但之后的实际执行只怕是大大偏离了正确的方向. 但在这个社会中有为数不少痛恨纲常的人,巴不得借着去糟粕的名义摆脱某种限制. 但正如我们在动物园里看到的,有时候牢笼般的限制恰恰是我们的朋友,而且当有限制存在的时候,那些被限制的对象显得很可爱;一旦限制解除,我们会面临许多不可预知的东西.