小机灵鬼|干货速来!透彻剖析微服务架构设计模式,深入开发Java有奇效( 二 )
单体地狱的银弹-微服务架构软件架构其实对功能性需求影响并不大 。 事实上 , 在任何架构甚至是一团糟的架构之上 , 你都可以实现一组用例(应用的功能性需求)架构的重要性在于它影响了应用的非功能性需求 , 也称为质量属性或者其他的能力。 随着 FTGO 应用的增长 , 各种质量属性和问题都浮出水面 , 最显著的就是影响软件交付速度的可维护性、可扩展性和可测试性 。训练有素的团队可以减缓项目陷入单体地狱的速度 。 团队成员可以努力维护他们的模块化应用 。 他们也可以编写全面的自动化测试 。 但是另一方面 , 他们无法避免大型团队在单体应用程序上协同工作的问题 , 也不能解决日益过时的技术栈问题 。 团队所能做的就是延缓项目陷入单体地狱的速度 , 但这是不可避免的 。 为了逃避单体地狱 , 他们必须迁移到新架构:微服务架构 。
今天 , 针对大型复杂应用的开发 , 越来越多的共识趋向于考虑使用微服务架构 。 但微服务到底是什么?不幸的是 , 微服务这个叫法本身暗示和强调了尺寸。 针对微服务架构有多种定义 。 有些仅仅是在字面意义上做了定义:服务应该是微小的不超过 100 行代码 , 等等 。 另外有些定义要求服务的开发周期必须被限制在两周之内 。 曾在 Netflix 工作的著名架构师Adrian Cockcroft 把微服务架构定义为面向服务的架构 , 它们由松耦合和具有边界上下文的元素组成 。 这个定义不错 , 但仍旧有些复杂难懂 。 立方体模型会是更好的定义 。
扩展立方体和服务
- X 轴扩展:在多个实例之间实现请求的负载均衡
- Z 轴扩展:根据请求的属性路由请求Z 轴扩展也需要运行单体应用程序的多个实例 , 但不同于 X 轴扩展 , 每个实例仅负责数据的一个子集 。 图 1-5 展示了 Z 轴扩展的工作原理 。 置于前端的路由器使用请求中的特定属性将请求路由到适当的实例 。 例如 , 应用程序可能会使用请求中包含的 userId 来路由请求 。 在这个例子中 , 每个应用程序实例负责一部分用户 。 该路由器使用请求 Authorization头部指定的 userId 来从 N 个相同的应用程序实例中选择一个 。 对于应用程序需要处理增加的事务和数据量时 , Z 轴扩展是一种很好的扩展方式
- Y轴扩展:根据功能把应用拆分为服务X 轴和 Z 轴扩展有效地提升了应用的吞吐量和可用性 , 然而这两种方式都没有解决日益增长的开发问题和应用复杂性 。 为了解决这些问题 , 我们需要采用 Y 轴扩展 , 也就是功能性分解 。 Y 轴扩展把一个单体应用分成了一组服务
微服务架构的好处和弊端优点大型的复杂应用程序可以持续交付和持续部署
- 拥有持续交付和持续部署所需要的可测试性 。 自动化测试是持续交付和持续部署的一个重要环节 。 因为每一个服务都相对较小 , 编写和执行自动化测试变得很容易 。 因此 , 应用程序的 bug 也就更少 。
推荐阅读
- 操作系统|干货分享:优麒麟系统上的硬盘读写性能测试
- 北京|北京晚高峰拥堵指数突破年度极值!司机灵魂拷问:我干嘛要开车?
- 尼康|索尼官微抖机灵“翻车”:国际空间站宇航员一直用尼康相机
- 比特币|2021年巴菲特股东大会15条干货出炉:承认卖错股票、给比特币定调
- 任豪|任豪发文回应言论争议 抖机灵发言令人费解 日本人看了都一脸懵
- 干货|全球上市的十大PD-1/L1用药信息大盘点!2020版
- 超多干货!新能源的“蔚来”疾驰而至 固态电池凭什么这么能打?
- 充满正能量的人生哲理语录,精辟透彻,让人幡然醒悟!
- 马未都是如何看待王刚在鉴宝现场砸藏品的他的回答很透彻
- 板绘鼻子详细画法干货详解!让人感到惊艳的鼻子绘製方法!