面向项目经理的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微服务为软件开发过程带来的好处,难怪它们变得越来越流行。但是你应该记住,一切都是为了它的价格,仔细权衡这种架构的优缺点以满足你的需求。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

如何在微服务架构下构建高效的运维管理平台?

黎明带领团队自主研发了全栈 DevOps 运维管理平台—EasyOps,是目前行业领先的智能化运维管理平台。作为前腾讯运维研发负责人,黎明主导了多个运维系统研发...

51690
来自专栏晓晨的专栏

微服务的4个设计原则和19个解决方案

32520
来自专栏软件测试经验与教训

一般系统瓶颈

35050
来自专栏Albert陈凯

Hadoop数据分析平台实战——210项目综述与需求分析离线数据分析平台实战——210项目综述与需求分析

离线数据分析平台实战——210项目综述与需求分析 项目综述 项目分别分为bf_track, bf_transforer和 bf_dataapi。 本次项目...

33160
来自专栏云计算D1net

管理混合云和多云:代理或无代理?

导语 混合云在节省更多IT成本方面提供更多的潜力,并将这些成本节约转向改善业务成果,但却带来了一些独特的挑战。人工手动的流程在一个混合的世界变得难以管理,因为云...

366100
来自专栏腾讯移动品质中心TMQ的专栏

完美组合:用例精简+精准测试

一、 为什么要做用例精简和精准测试 1、 测试用例越来越多,测试效率低下 这是因为在目前的快速迭代开发模式下,测试人员需要不停覆盖不断调整的产品逻辑需求,因此测...

255100
来自专栏养码场

前1号店技术总监黄哲铿揭秘:微服务架构在千万级别日调用量、亿级别海量数据场景下的应用实践

上周,前1号店技术总监、海尔农业电商CTO,《技术管理之巅》作者黄哲铿为大家带来了一场关于微服务架构的分享,包含了微服务架构在千万级别日调用量、亿级别海量数据场...

13120
来自专栏程序员的知识天地

提升 Web 应用的代码质量【干货持续输出】

Web 应用的质量提升,是一个非常有意思的话题。我们明知道有一系列的手段可以提升代码质量,但是限于多种原因,我们并不会去做。在我工作的第一个项目里,由于大家都是...

8810
来自专栏WeTest质量开放平台团队的专栏

你的手游准备好接受“精品”时代的挑战了吗?——三步掌握游戏内存检测技巧

为了避免手机性能成为游戏选择时的壁垒,游戏厂商必须进行更好的游戏性能优化。本文利用WeTest平台的Cube工具,通过三步完成游戏内存检测与分析的过程,希望为游...

13530
来自专栏软件测试经验与教训

自动化测试实施方案

1.2K60

扫码关注云+社区

领取腾讯云代金券