企业微服务化势在必行,这样改造保你事半功倍

image.png
image.png

大李是A公司的架构师,正在主导一款线上打车软件的架构,下面有好几个团队一块儿协做开发,已经忙了好几个月。spring

但大李最近有点烦,由于他主导的这个打车软件出现了不少问题,进展很不顺利。竞争对手D公司不断推出新功能,大李的团队只能疲于跟随,同时还得应对内部的各类问题。他感受很疲惫,决定找公司技术总监老张聊聊。架构

一走进老张办公室,大李便开门见山地说:“张总,咱们目前的开发速度很难跟上竞争对手的步伐。想找您聊聊看怎么作才能加快咱们的进度?”并发

“好啊,那你能把咱们如今的架构先拿出来看看吗?”老张答道。框架

因而,大李向老张展现了下面的架构图:运维

▲Figure 1 – A公司打车软件架构▲微服务

老张仔细看了看后说:“目前咱们的软件架构已经作了数据存储分离,而且把计算模块和存储模块都搬到了京东智联云上,用虚拟机来代替物理机。咱们的计算单元也能够作横向扩展来应对高峰流量,架构已经很灵活了,那么如今面临的问题是什么呢?”学习

大李思索了一下娓娓道来:“咱们如今面临的问题不少,我印象最深入的大概有这几类:测试

1、发布困难:咱们的计算单元和存储单元是须要分布在三个办公地点的六个团队共同合做,因此每次发布版本都会是一个艰难工做。须要高级别的管理人员来统筹发布计划,上次发布就是由您来统一指挥规划的。spa

一个模块的微小问题均可能会致使整个项目延迟,而现实中每一个模块都会出现问题,因此一般要准备多轮回归测试来保证全部模块都没有大问题。上次就是小王最后合并进来的计费模块的代码竟然影响了客户管理模块,而后你们拼命加班测试修复问题仍然延迟两天交付。线程

若是任何一个模块出现了问题,都须要整个应用一块儿调试,再发布上线。而每一个新版本发布都会很困难,致使不少小问题的修复都要等很长时间。

2、模块之间依赖问题:不少模块都在一台虚拟机中运行,它们之间的依赖关系错综复杂。因此各个模块的启动顺序很是关键,必须十分当心地排列,而每次模块改动均可能致使启动顺序的更改。启动顺序的问题几乎每次发布新版都会有问题。

3、模块之间优先级问题:一样由于每一个模块都在同一台虚拟机中运行,它们运行的线程优先级会变得很是敏感,须要很是当心地来设置优先级。不然在并发量大的状况下,互相之间抢占CPU资源会致使某些模块得不到CPU资源处理的状况。为了调整线程优先级,各个团队花了大量时间来测试和制定各个线程的优先级,但仍然不能在全部状况达到预期效果。

_4、扩容难:_在并发量大的状况下,某些处理单元可能须要扩容。那么扩容的机器上必须复制全部的模块。若是任何一个模块在扩容过程当中出现问题,扩容就会失败。不须要的模块进行扩容自己就是一种浪费,而且增长了没必要要的风险。

全部模块的数据都存在一样的存储节点中,使得计算节点和存储节点的关系变得很是复杂且难于管理。

5、难于维护:由于整个系统变得很是庞大复杂,各个模块的关系又错综复杂。如今几乎没有人能对整个系统的各个部分都了解,致使每次改动(新功能或者修复bug)都有可能直到最后才发现有没考虑到的状况,加重了发布的延迟。若是再发生核心人员的离开,将会使这个状况雪上加霜。上次老金的离职就是个有力证实,他负责的模块虽然接替的人还比较熟悉,可是和别的模块的关系很复杂,结果是修复了一个bug,却引入了两个新bug。

综上所述,我认为必须改变咱们的架构,让架构更简单,模块之间更独立,更易于维护、发布和扩容。”

“你说的这些问题其实我也意识到了,最近我正在研究微服务架构和各类微服务平台。”老张点点头表示赞同:“根据我初步的研究,若是想解决上述那些问题,就要考虑向微服务架构演进。微服务应该能解决咱们的大部分问题而且能提升咱们的生产力。我给你推荐一篇文章,你能够先研究一下,回头咱们再细致讨论。”

微服务小白扫盲:《微服务的理想与现实》

大李听到老张的回答,一会儿转忧为喜:“那太好了!我先回去研究研究。过几天再找您讨论。”

一星期后,大李又找到了老张:“张总,我仔细研究了微服务的理论和框架。按照个人理解,咱们的架构若是能演变成这张微服务架构图,就差很少能解决咱们目前面临的问题。”

大李一边说着,一边给老张展现他画出的微服务架构图:

▲Figure 2 – 微服务架构图▲

_从架构图能够看出,基本上原来全部的模块都变成了松耦合的微服务,它们均可以进行独立部署、发布、扩容_。全部困扰咱们的发布难、扩容难、模块CPU资源竞争问题、模块依赖问题全均可以解决。这样咱们每一个微服务能够独立发布新版本,新功能的发布和bug修复的流程都会快不少。”大李眼睛闪着光,兴奋地说道。

“同时,独立部署后也再也不须要进程管理模块,各个微服务也没必要共享基础架构模块,能够根据本身的须要来选择技术。另外由于各个服务如今界限清晰,每一个微服务负责的功能相对简单内聚,开发人员很容易理解单个模块内部逻辑,因此维护难问题也能够获得很好解决。”大李继续补充着。

老张的脸上露出了满意的笑容:“那看起来咱们的问题都获得了解决。另外咱们公司已经开始使用敏捷开发,组建了scrum团队,而且咱们有了Devops的经验。因此三地的各个团队能够变成独立的scrum团队,负责独立的微服务,这样人员之间的协同工做问题也能够获得解决。那咱们是否是能够马上开始微服务化了呢?”

大李的眉头又皱了起来,难为地说道:“张总,虽然微服务化很好,咱们确定要朝着这个方向演化。可是微服务也会给咱们带巨大的挑战。”

“嗯,天下确定没有免费的午饭。”老张随即问道,“说说看,咱们的挑战主要是什么?”

大李早已调研清楚,为老张一一分析:“首先,咱们须要把现有的应用拆分红多个微服务。这是咱们的业务内容,很是关键,须要咱们本身慢慢来作。可是微服务架构自己有不少的东西,好比这张服务注册发现图,若是咱们采用springcloud架构,咱们集成后须要本身部署维护注册中心。而注册中心集群也必须是高可用的。若是咱们本身来部署维护注册中心集群,那这就是咱们的短板,由于咱们没有eureka或者consul的专业知识,部署和后期的运维工做都将须要更多的工程师。这将大大增长咱们的成本,咱们的组织结构也会更复杂。”

▲Figure 3 – 服务发现图▲

“除了注册中心,还有别的关于微服务基础架构的问题吗?”老张问。

大李思考了一下回答道:“还有很多问题,好比咱们拆分红微服务后,不少服务之间的调用分析是很是须要的东西。因此就须要调用链分析,这将让咱们面临一样的问题。好比咱们使用jaeger来做为调用链分析,那么就像调用链这张图展现的,咱们也须要来维护复杂的jaeger集群,而且要作到高可用。”

▲Figure 4 – 调用链(来自jaeger官网)▲

大李又打开了一张微服务网关的架构图,指给老张看:“另一个就是微服务网关。我和团队讨论了,微服务化仍是要一步一步来。先把不重要的服务微服务化,一步一步演进,随着咱们不断学习,再把重要的模块微服务化。这样风险会比较小。因此咱们须要微服务网关来把微服务化的服务暴露给没有微服务化的应用。例如咱们能够先把通知服务微服务化,别的核心逻辑不变,能够经过微服务网关来调用微服务化的通知服务。这样咱们又须要维护微服务网关集群了。”

▲Figure 5 – 微服务网关▲

“另外,咱们也须要配置中心集群来进行配置管理。咱们还须要快速部署咱们的应用到虚拟机上。须要控制台来进行应用部署、配置、以及服务治理如鉴权路由等管理。”大李继续补充。

老张听完大李的介绍后陷入沉思:“你说的这些很是对,看来微服务化仍是给咱们带来了很大的挑战。好比微服务网关确实咱们须要考虑慢慢演进架构,来保证服务的稳定性。全部这些都由咱们本身去培养团队搞,短时间看来不太现实啊,更重要的是咱们更应该专一于咱们本身的服务而不是微服务的基础设施。”

“那有没有现成的微服务平台呢?能替咱们解决这些问题,而咱们本身只专一于本身的业务呢?”大李问。

“这个问题很是好,我据说京东智联云推出了一个JDSF微服务平台,你能够研究研究。我大概看了一下,感受应该能知足咱们对微服务基础架构的需求。”老张一边建议,一边打开了京东智联云的JDSF产品页给大李看:

扫码了解京东智联云 JDSF

大李眼前一亮:“好,我这就去研究一下。”

两天后,大李兴冲冲来到老张的办公室:“张总,我仔细研究了京东智联云JDSF,这个平台彻底能解决咱们目前对微服务基础架构的要求。我总结了一下,主要有如下几点:

  • JDSF有注册中心和配置中心/调用链分析/和微服务网关,所有由京东智联云来帮助咱们部署和进行后期维护,而且保证高可用。
  • JDSF支持SpringCloud、Dubbo、JSF,咱们能够选择其中的任何一个,只须要把JDSF SDK集成进来就能够。
  • 咱们能够上传jar/war包,而后JDSF能够帮助咱们部署在虚拟机上,而且支持滚动部署。
  • 在微服务控制台上,能够轻松进行配置管理和服务治理的管理(如鉴权和路由)。就像这个路由图展现的,咱们能够进行灰度发布。

▲Figure 6 – 路由▲

有了这套方案,这样咱们就能够轻松使用微服务架构来改造咱们的应用了。”

大李兴奋地继续介绍他的想法:“这样咱们整个架构就会演进到这个最终架构,这里面灰色的部分都是京东智联云JDSF帮咱们作的事情。而咱们只须要关注本身的业务逻辑就能够了。完成了这套架构,咱们就能快速发布新功能,集中精力和D公司在市场上PK。”

▲Figure 7 – A公司最终架构图▲

“太赞了!我从京东的朋友打听到他们内部的协同办公平台也在用这套微服务平台,京东但是有几十万员工在使用这套协同办公软件的。相信咱们也能很快集成完毕的。”老张当下拍板,安排大李当即开始同京东智联云一块儿进行微服务改造。

你的公司是否也面临着大李和老张同样的问题?当一个很是复杂的应用须要快速快速响应市场,须要有动态扩容能力,而应用自己面临不能快速发布、难于维护等问题,进而不能适应需求时,就须要考虑微服务架构来解决问题。

但须要注意的是,微服务架构虽然能解决问题,但同时也带来了架构层面的复杂性,而且须要微服务基础设施的支持,因此也将为企业架构带来巨大的挑战。

京东智联云JDSF微服务平台正是为了知足微服务化的简单可行,而提供了基础组件以及服务治理、应用管理等功能,能够极大简化企业微服务转型而且规避架构转化中的风险。若是你也对JDSF微服务平台感兴趣,不妨点击_【阅读原文】_来试用吧。