面向项目经理的Java微服务

微服务是一种用于设计复杂软件的架构解决方案,将其分解为可独立部署的小型模块化服务。它通常与传统的单一体系结构形成对比,在这种体系结构中,软件是作为一个单元构建的。通常,微服务通过REST进行通信。

让我们考虑一下如何引入微服务可以帮助Java项目,他们要引入什么样的努力,它带来了什么风险,以及在哪些情况下它不太适合。

微服务架构

优点

Java 微服务架构为项目带来以下好处:

  • 独立部署,重建,重新部署和管理软件模块的机会。它允许您为Java应用程序开发介入不同的项目团队,并以不同编程语言编写微服务代码。
  • 有机会应用最新技术来部署新服务。开发人员可以自由选择任何技术,并且不再需要使用在项目开始时应用的可能过时的技术。
  • 快速的软件部署。开发人员可以独立部署模块,无需等待其他组件准备就绪。
  • 持续的软件交付。软件模块可以连续交付。
  • 易于理解和修改软件。小团队对新团队成员学习更容易,因此他们可以更快地进入项目。
  • 改进的故障隔离。单个模块的故障不会影响应用程序的其余部分。

缺点

随着价格的不断上涨,让我们考虑一下与实现Java微服务相关的一些潜在的痛苦领域:

  • 协调多种服务的困难。开发人员必须在微服务集成方面投入更多精力。
  • 增加运营,部署和监控的工作量。每个微服务都是一个独立的部署单元,必须进行发布,测试和监控。此外,每项服务都需要一个单独的数据库
  • 繁琐的互相依赖服务的变更过程。如果您需要进行影响多个相互依赖的服务的更改,则必须修改所涉及的所有服务。这个程序还需要不同开发团队之间的合作。
  • 复杂而繁琐的测试。您需要测试每项服务以及它所依赖的所有服务。
  • 重复使用内存。几个类和库通常在微服务捆绑中复制,这增加了内存占用。

当微服务不适合时

考虑到Java微服务架构给项目带来的优点和缺点,将其应用于单片架构变得难以管理的复杂演化应用程序中是有意义的。对于简短的项目不需要将部署和测试工作投入到微服务中。

混合的方法可能吗?

你能用一块石头杀死两只鸟,并将单片方法与微服务架构结合起来吗?不幸的是,你不能。但是,如果存在这样的必要性,您可以命令将您的整体应用程序重构为微服务。这个过程相当复杂,但如果你确信你的应用程序将会很快成长,这将是有意义的。

信息安全

Java微服务既可以改善  和减少组织的安全状况。我们来看看微服务如何帮助确保应用程序的安全性。

  • 快速分发安全补丁。由于它们的分布式特性,微服务使补丁部署更容易和更快速。安全更新每周可以发生一次或两次,甚至每天使用微服务发生多次,而单片架构每年会发生一次或两次更新。
  • 小型攻击面。每种微服务都提供了一组受限制的功能,这比单一应用程序的情况下导致了更小的攻击面。
  • 功能屏蔽。微服务分散了软件功能,简化了安全人员的任务。他们可以专注于审查特定服务的功能,而不是总体上跟踪应用程序的功能,从而加速安全审查并使结果更加准确。

然而,微服务可能会为您的Java项目安全性带来一些软点。

  • 更多的攻击面越是模块化的服务软件,它们所具有的潜在漏洞越多。
  • 内部一致性较低开发人员可以在各种引入新微服务的框架之间进行切换,与单一应用程序相比,这导致软件一致性降低。只要有变化,就有可能出现新的安全漏洞。
  • 跨服务交流。微服务通过网络进行通信,这会对传输数据造成更多冲击。

微服务信息安全

如何解决安全问题

通过正确的策略,与微服务架构相关的安全风险可以得到缓解。

首先建立通用的可重复编码标准,以减少可能导致可利用的漏洞或升级的特权的代码差异。然后,注意只为应该拥有它的进程或个人提供软件模块的权限。例如,如果没有必要修改现有信息,那么仅检查库存可用性的微服务应该被授予读取权限,而不是访问数据库的读/写权限。

绘制微服务之间的通信方法。这将有助于识别潜在的问题区域以及应用程序的不规则行为。最后,保持每个微服务的完整记录,包括它所服务的功能,如果每个特定的微服务受到损害,可以对(或通过)每个特定的微服务产生什么样的损害,以及可以调整或保护哪些微服务。

缩小技能差距

让我们考虑一下Java开发人员需要使用微服务的技术知识。

微服务技能

首先,人们应该熟悉分布式计算。微服务是一个分布式系统,比传统的单一体系结构更复杂。所以,每个微服务应该只解决一个问题,而不是让系统过于复杂。此外,项目团队应该准备根据需要重构软件元素。

容器的了解可能是最有用的,比如Docker等。它们允许软件每次可靠地运行,并帮助快速将代码片段插入操作系统。

由于微服务的合作有很多复杂性,所以后端开发经验对开发人员也很有用。

由于Java微服务通常通过HTTP进行REST通信,因此还需要了解REST / HTTP / RAML / Swagger。其他有用的技术包括用于服务编排的Kubernetes,用于高速内部通信的gRPC,用于数据编排的GraphQL等等。在Java中使用微服务的最常用框架包括Spring,Hibernate,Jersey和Netty。这些开源框架因其可靠性,可维护性和高性能而受到称赞。

测试微服务

考虑到微服务架构的模块化特性,测试变得相当棘手,需要多个层。

  1. 单元测试。诸如微服务中的方法等小部分软件都经过测试。
  2. 组件测试。在这个阶段,微服务被孤立地测试。
  3. 集成测试。Interservice通信和交互被测试以检测接口缺陷。
  4. 合同测试。合同测试验证外部服务边界处的交互,以检查系统是否按照合同中的规定运行。
  5. 端到端测试。在这个阶段,测试工程师会检查整个系统是如何工作的,以及它是否满足项目要求。他们还检查微服务之间是否存在高级别的分歧。

后记

考虑到Java微服务为软件开发过程带来的好处,难怪它们变得越来越流行。但是你应该记住,一切都是为了它的价格,仔细权衡这种架构的优缺点以满足你的需求。

赞赏


微信赞赏

支付宝赞赏