小机灵鬼|干货速来!透彻剖析微服务架构设计模式,深入开发Java有奇效

什么是微服务模式随着网络基础设施的高速发展 , 以及越来越多的个体接入互联网 , 在考虑构建支持海量请求以及多变业务的软件平台时 , 微服务架构成为多数人的首选 。 微服务架构的出现时服务事物发展规律的:当问题足够大 , 有足够多的的不确定因素时 , 人们习惯于把大的问题拆分成小的问题 。 通过分割 , 抽象和重用小而可靠的功能模块来构建整体方案 。 但是当这些小的 , 可重用的部分多来越多的时候 , 又会出现新的问题 。 再相似的阶段 , 人们遇到的问题也是相似的 , 这个时候人们需要一些共识 , 需要用一些通用的词汇来描述问题以及解决方案 , 这也是人们知识的总结 , 微服务模式就是这样的总结和概括 , 是一种可以通用的共识 , 用于描述微服务领域的中的问题及解决方案 。
单体结构的历程在企业发展的初期 , 应用程序相对较小 , 所有的代码运行在一个应用程序中有以下好处

  • 应用的开发很简单:IDE 和其他开发工具只需要构建这一个单独的应用程序 。
  • 易于对应用程序进行大规模的更改:可以更改代码和数据库模式 , 然后构建和部署 。 测试相对简单直观:开发者只需要写几个端到端的测试 , 启动应用程序 , 调用 REST API , 然后使用 Selenium 这样的工具测试用户界面 。
  • 部署简单明了:开发者唯一需要做的 , 就是把 WAR 文件复制到安装了 Tomcat 的服务器上 。
  • 横向扩展不费吹灰之力:FTGO 可以运行多个实例 , 由一个负载均衡器进行调度 。
不幸的是 , 开发人员已经意识到的 , 单体架构存在着巨大的局限性 。 每一次开发冲刺(Sprint) ,开发团队就会实现更多的功能 , 显然这会导致代码库膨胀 。 而且 , 随着公司的成功 , 研发团队的规模不断壮大 。 代码库规模变大的同时 , 团队的管理成本也不断提高 。
小机灵鬼|干货速来!透彻剖析微服务架构设计模式,深入开发Java有奇效
  1. 过度的复杂性吓退开发者系统本身过于庞大和复杂 , 以至于任何一个开发者都很难理解它的全部 。 因此 , 修复软件中的问题和正确地实现新功能就变得困难且耗时 。 各种交付截止时间都可能被错过 。 更糟糕的是 , 这种极度的复杂性正在形成一个恶性循环:由于代码库太难于理解 , 因此开发人员在更改时更容易出错 , 每一次更改都会让代码库变得更复杂、更难懂
  2. 开发速度缓慢巨大的项目把开发人员的 IDE 工具搞得很慢 , 构建一次应用需要很长时间 , 更要命的是 , 因为应用太大 , 每启动一次都需要很长的时间 。 因此 , 从编辑到构建、运行再到测试这个周期花费的时间越来越长 , 这严重地影响了团队的工作效率 。
  3. 从代码提交到实际部署的周期很长 , 而且容易出问题从代码完成到运行在生产环境是一个漫长且费力的过程 。 一个问题是 , 众多开发人员都向同一个代码库提交代码更改 , 这常常使得这个代码库的构建结果处于无法交付的状态 。 当我们尝试采用功能分支来解决这个问题时 , 带来的是漫长且痛苦的合并过程 。 紧接着 , 一旦团队完成一个冲刺任务 , 随后迎接他们的将是一个漫长的测试和代码稳定周期 。
  4. 把更改推向生产环境的另一个挑战是运行测试需要很长时间 。 因为代码库如此复杂 , 以至于一个更改可能引起的影响是未知的 , 为了避免牵一发而动全身的后果 , 即使是一个微小的更改 , 开发人员也必须在持续集成服务器上运行所有的测试套件 。 系统的某些部分甚至还需要手工测试 。 如果测试失败 , 诊断和修复也需要更多的时间 。 因此 , 完成这样的测试往往需要数天甚至更长时间 。
  5. 需要长期依赖某个可能已经过时的技术栈单体地狱的最终表现 , 也体现在团队必须长期使用一套相同的技术栈方面 。 单体架构使得采用新的框架和编程语言变得极其困难 。 在单体应用上采用新技术或者尝试新技术都是极其昂贵和高风险的 , 因为这个应用必须被彻底重写 。 结果就是 , 开发者被困在了他们一开始选择的这个技术之内 。 有时候这也就意味着团队必须维护一个正在被废弃或过时的技术所开发的应用程序 。