深圳幻海软件技术有限公司 欢迎您!

微服务架构怎么选?

2023-03-20

​微服务是应用现代化趋势下的必然选择随着数字经济的不断发展,企业面临着更加多样化、敏捷化的新时代IT需求。用户行为的变化:业务应用的用户访问不可预估,突发性访问增多,存在临时热点事件或大促期间等不可控业务高峰期。业务模式的变化:所有业务访问都是通过互联网渠道,包括Web、手机App、微信小程序等。业

​微服务是应用现代化趋势下的必然选择

随着数字经济的不断发展,企业面临着更加多样化、敏捷化的新时代IT需求。

  • 用户行为的变化:业务应用的用户访问不可预估,突发性访问增多,存在临时热点事件或大促期间等不可控业务高峰期。
  • 业务模式的变化:所有业务访问都是通过互联网渠道,包括Web、手机App、微信小程序等。
  • 业务系统开发的变化:应用再也不像以前半年或一年进行规划,随时会有需求变化,两周一个迭代成为常态。业务应用交付周期短,质量要求高。
  • 运维模式的变化:要求全天候值守,在线升级和快速响应,不同团队特别是外包团队使用不同的技术栈,无法统一管控。

因此,评估一家企业是否需要采用微服务架构,往往考察这五大关键条件:数据量和业务复杂度,团队规模,应对业务流量变化,是否需求足够的容错容灾,以及功能重复度和差错成本。

在日益激烈的数字化竞争下,企业必须更快地拥抱市场变化、随时响应新的用户需求,比对手更迅速地将产品推向市场。

微服务作为加速企业提升敏捷创新能力的重要抓手,能够帮助企业快速实现独立更新和部署应用,快速应对市场变化,逐渐成为企业加速应用现代化的必然选择。

微服务架构怎么选?

Dubbo

Dubbo是比较早期的一款微服务架构,可以使得应用通过高性能的 RPC 实现服务的输出和输入功能,和Spring框架无缝集成。

优点是RPC长连接+NIO,性能更高;但协议的局限性,会限制生态发展和兼容性。

Spring Cloud

Spring Cloud是基于Spring Boot的一整套实现微服务的框架,提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线等组件。Spring Cloud包含了非常多的子框架,其中,Spring Cloud Netflix是其中一套框架,由Netflix开发后来又并入Spring Cloud大家庭,它主要提供的模块包括:服务发现、断路器和监控、智能路由、客户端负载均衡等。

Spring Cloud拥有更成熟的Spring社区生态,更多成熟的企业应用案例;但也存在一定不足,比如跨语言平台问题、微服务治理对代码侵入性较强。

Istio

Istio 是当前Service Mesh形态上比较热门的实现方案,能够和K8s深度结合,更快速、更便捷地实现服务治理。Istio 提供了一种简单的方法,来创建一个提供负载均衡、服务间认证、监控等的服务网络,且不需要对服务代码进行任何更改。通过在整个环境中部署专门的 sidecar 代理服务,来拦截微服务间的所有网络通信,整个配置和管理通过 Istio的控制面板来做。

作为新一代的微服务架构,它的微服务治理与开发更彻底解耦,适应场景更广泛,很多企业都正在逐步从Spring Cloud向 Service Mesh过渡;但也正是因为技术比较新,企业自研需要一定的学习成本,打破传统IT运维/开发壁垒,考虑引入专业的技术厂商则能够完美地解决这一问题。

上图为Istio的基本运行原理:

当用户向 Kubernetes 提交一份新的配置,首先会触发 galley 注册在 kubernetes 中的webhook,webhook 会检查配置是否合法,如图中的步骤1。

若配置无法通过校验,则 kubernetes将拒绝用户提交的配置,并给出相应的错误信息。如图步骤2。

当配置通过校验后,通过 kubernetes 的通知机制,galley得到配置变更信息。

Galley 将变更的配置/服务信息转换为 MCP 的格式通过 MCP 协议推送给pilot,如图步骤4。

最后一步,pilot 通过 xDS 协议向数据平面推送变更的配置。

以上为当前常见的微服务架构,那么企业实际改造时应该怎么做呢?我们建议:

  • 不同类型的应用均可以通过微服务能力进化到现代化应用。
  • 需要为传统应用提供一条稳妥的转型路径
  • 需要为SpringCloud应用提供一条贴合云原生的、无需大规模适配的转型路径。

微服务架构如何设计?

首先从微服务的定义来看,微服务是一起合作的独立小服务单元,可以同步异步调用,也可以独立拆分、独立部署、独立升级,后端中间件、存储资源、数据库等也是独立的,最佳实践是每个微服务都有自己的database,真正意义上实现微服务应用解耦。

接下来,我们从微服务的必备基础理论,也是企业进行微服务所需遵循的一大原则——康威定律来看:

组织形式等同系统设计。设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构。

第一定律:Communication dictates design(组织沟通方式会通过系统设计表达出来)。

人与人的沟通是非常复杂的,一个人的沟通精力是有限的,所以当问题太复杂需要很多人解决的时候,我们需要做拆分组织来达成对沟通效率的管理。在团队内部进行频繁的、细粒度的沟通。对于团队外部,定义好接口,契约,只进行粗粒度的沟通。这样可以降低沟通成本,同时也符合高内聚,低耦合原则。

第二定律:There is never enough time to do something right, but there is always enough time to do it over(时间再多一件事情也不可能做的完美,但总有时间做完一件事情)。

复杂的系统需要通过容错弹性的方式持续优化,不要指望一个大而全的设计或架构,好的架构和设计都是慢慢迭代出来的。因此企业需要拥抱变化,解决当下,先完成一个一个小目标。

第三定律:There is a homomorphism from the linear graph of a system to the linear graph of its design organization(线型系统和线型组织架构间有潜在的异质同态特性)。

你想要什么样的系统,就搭建什么样的团队,反之亦然。

第四定律:The structures of large systems tend to disintegrate during development, qualitatively more so than with small systems(大的系统组织总是比小系统更倾向于分解)。

一个大的组织因为沟通成本/管理问题,总会被拆分成一个个小团队(2 pizza team)。

具体来说,企业在进行微服务架构改造时,可以遵循以下标准:

  • 分布式服务组成的系统。
  • 按照业务而不是技术来划分组织。
  • 做有生命的产品而不是项目。
  • 去中心化。
  • 自动化运维(DevOps)。
  • 容错。
  • 快速演化。

同时,根据企业的自身组织架构情况和业务情况进行针对性规划设计。