大李是 A 公司的架构师,正在主导一款线上打车软件的架构,上面有好几个团队一起合作开发,曾经忙了好几个月。
但大李最近有点烦,因为他主导的这个打车软件呈现了很多问题,停顿很不顺利。竞争对手 D 公司一直推出新性能,大李的团队只能疲于追随,同时还得应答外部的各种问题。他感觉很疲乏,决定找公司技术总监老张聊聊。
一走进老张办公室,大李便单刀直入地说:“张总,咱们目前的开发速度很难跟上竞争对手的步调。想找您聊聊看怎么做能力放慢咱们的进度?”
“好啊,那你能把咱们当初的架构先拿进去看看吗?”老张答道。
于是,大李向老张展现了上面的架构图:
▲Figure 1 – A 公司打车软件架构▲
老张认真看了看后说:“目前咱们的软件架构曾经做了数据存储拆散,并且把计算模块和存储模块都搬到了京东智联云上,用虚拟机来代替物理机。咱们的计算单元也能够做横向扩大来应答顶峰流量,架构曾经很灵便了,那么当初面临的问题是什么呢?”
大李考虑了一下娓娓道来:“咱们当初面临的问题很多,我印象最粗浅的大略有这几类:
一、公布艰难:咱们的计算单元和存储单元是须要散布在三个办公地点的六个团队独特单干,所以每次公布版本都会是一个艰巨工作。须要高级别的管理人员来兼顾公布打算,上次公布就是由您来统一指挥布局的。
一个模块的渺小问题都可能会导致整个我的项目提早,而事实中每个模块都会呈现问题,所以通常要筹备多轮回归测试来保障所有模块都没有大问题。上次就是小王最初合并进来的计费模块的代码竟然影响了客户治理模块,而后大家拼命加班测试修复问题依然提早两天交付。
如果任何一个模块呈现了问题,都须要整个利用一起调试,再公布上线。而每个新版本公布都会很艰难,导致很多小问题的修复都要等很长时间。
二、模块之间依赖问题:很多模块都在一台虚拟机中运行,它们之间的依赖关系盘根错节。所以各个模块的启动程序十分要害,必须非常小心地排列,而每次模块改变都可能导致启动程序的更改。启动程序的问题简直每次公布新版都会有问题。
三、模块之间优先级问题:同样因为每个模块都在同一台虚拟机中运行,它们运行的线程优先级会变得十分敏感,须要十分小心地来设置优先级。否则在并发量大的状况下,相互之间抢占 CPU 资源会导致某些模块得不到 CPU 资源解决的状况。为了调整线程优先级,各个团队花了大量工夫来测试和制订各个线程的优先级,但依然不能在所有状况达到预期成果。
_四、扩容难:_在并发量大的状况下,某些处理单元可能须要扩容。那么扩容的机器上必须复制所有的模块。如果任何一个模块在扩容过程中呈现问题,扩容就会失败。不须要的模块进行扩容自身就是一种节约,并且减少了不必要的危险。
所有模块的数据都存在同样的存储节点中,使得计算节点和存储节点的关系变得非常复杂且难于治理。
五、难于保护:因为整个零碎变得十分宏大简单,各个模块的关系又盘根错节。当初简直没有人能对整个零碎的各个局部都理解,导致每次改变(新性能或者修复 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 微服务平台感兴趣,无妨点击_【浏览原文】_来试用吧。