聊聊用于构建微服务的工具和技术

原文作者:Biplab Pal

原文地址:https://dzone.com/articles/tools-and-techniques-to-build-microservices


微服务或微服务架构是一种软件设计技术。这是一种将应用程序构建为一系列松耦合服务的架构风格。它具有许多好处,例如通过简化开发,测试和调试步骤来改进模块化并使开发人员的工作变得轻松。它在CI/CD上也有帮助。本文将主要关注RESTful微服务,而且,无论使用何种语言/体系结构,下面说到的大多数工具/技术都可以使用。

现在让我们看看一些技巧和可用的工具:

  • 技术选择:每个微服务可以用任何编程语言实现,并可以使用不同的基础设施。主要的技术选择是微服务通信(同步,异步等)以及他们使用哪种协议(REST,消息传递等)的方式。根据业务需求,我们需要选择通信机制和协议。架构组件可以大致分为1)API网关,2)负载平衡器,3)服务发现,4)服务,以及5)数据库/缓存。本文章讨论了不同组织正在使用的技术栈,大家可以作为参考。
  • 文档:我们都知道记录任何服务的体系结构和设计的重要性,但是我们经常会对记录什么和如何记录感到困惑。其实有很多模板可用; 其中之一是arc42,一个免费的开源工具。除了体系结构文档外,如果服务公开API,则有SwaggerApiaryReDoc等工具可以帮助我们自动生成文档。
  • 开发:开发过程与任何其他类型的应用程序开发类似。任何开发人员选择的IDE,如EclipseIntelliJ,文本编辑器,如atom(开源)或sublime text,以及客户端 - 服务器模型(svn,perforce)或分布式模型(Git, Visual Studio Team Service)可以使用。为了构建和运行测试,我们需要像MavenAnt等软件项目管理工具。有像NexusArtifactory这样的开源工具用于存储生成的文件。为了使构建和测试自动化,我们需要使用像JenkinsBamboo这样的自动化工具。
  • 代码审查:代码审查是对用任何语言编写的源代码进行的系统审查。执行代码审查是为了检查明显的逻辑错误以满足要求,确认最佳实践等。审核可以通过两人互相编程审查,非正式审阅或正式审阅流程来实现。有一个正式的审查流程总是很好的。SmartBear的Collaborator(10人团队免费)是支持几乎所有VCS(SCM)(如Git,Subversion,Perforce和ClearCase)的软件,可用于Windows,Linux和Mac。Crucible是Atlassian另一个支持VCS的流行工具,如Git,svn,CVS,Perforce等。GerritPhabricator 是许多免费/开源代码审查工具中的两个。除此之外,我们还应该重点关注代码质量的持续检查,以静态分析代码来执行自动检查,以检测错误,代码异常,这些可以通过SonarqubePMD等工具进行帮助检查。
  • 日志记录:日志记录是任何服务中最重要的方面之一。对于任何服务,我们都需要访问日志和服务日志。如果我们只存储日志,它不会产生价值,除非我们有一些机制来分析这些日志并从中理解它们背后的意义。
    • 访问日志:通常,所有应用程序/ Web服务器都提供访问日志和错误日​​志。访问日志会跟踪传入的请求,其参数,主机,响应状态等,而错误日志会记录错误。
    • 服务日志:可以在每个服务或基础架构中存储和处理此日志,但是,需要从每个服务生成日志。在编写日志逻辑的同时,我们应该考虑添加时间,源名称(类方法名称等),严重性以及相关内容(如消息,堆栈跟踪等)。这样,当我们看到日志语句时,我们知道哪个服务生成了日志事件以及生成该事件的服务的位置。现在的问题是找出导致该事件的哪些行动。我们需要一种将一系列事件追溯到源的方法,即使它意味着遍历多个服务。解决方法是在请求进入体系结构时使用唯一标识符,并在请求完成之前携带相同的标识符。MDC(映射诊断上下文)是区分来自不同源的交织日志输出的工具。因为当服务器几乎同时处理多个客户端时,日志输出通常是交错的。
      • 服务内部:维护服务中的日志生命周期具有优势; 它完全独立于其他服务,可以选择最适合的日志策略。但同时,它有缺点; 每个服务都需要实现一个日志策略,这是冗余的,并且导致在各种服务之间改变日志行为的复杂性。
      • 从基础设施出发:在这种方法中,每个服务都将日志发送到中央服务,中央服务知道如何处理,存储或向其他日志服务器发送日志。
  • 查看日志:简单地查看日志不是查看日志的正确解决方案。有一些工具可以帮助您更轻松地查看,搜索和分析日志。SplunkKibana(来自ELK堆栈)是就是这样功能的著名工具。Spring Cloud Sleuth是一个基于MDC(Mapped Diagnostic Context)概念的Spring Cloud项目,您可以轻松提取上下文中放置的值并将其显示在日志中。Zipkin是一个分布式跟踪系统,可帮助收集解决延迟问题所需的时间数据。
  • 测试:与单元测试一起,集成测试涵盖所有场景的功能非常重要。我们可能会选择从TDD到BDD或ATD的任何开发方法。像工具RandoopJUnit的工具在Java中生成单元测试帮助我们编码后编写测试,而rest-assured, Postman, KarateZerocode帮助编写集成测试。这篇文章描述了其中的几个。
  • 持续集成和持续交付(CI / CD):CI和CD是实现微服务取得成功的关键要求。没有一个好的CI / CD流程,我们将无法实现微服务承诺的敏捷性。当我们谈论CI / CD时,我们确实在谈论几个相关的流程:持续集成,持续交付和持续部署。有各种工具可以实现这些。XebiaLabs的periodic table提供了行业内可用工具而且很漂亮的界面。
  • 性能测试:除了单元测试和集成测试之外,我们还应该执行其他类型的测试,如负载和性能测试。Apache JMeter是一个很好的例子。Blazemeter是另一个工具,它允许您将目标KPI设置为失败标准并跟踪一段时间的性能,并将多个测试合并为一个来运行,同时还保持精细的报告。为了解决性能瓶颈问题,确定内存泄漏并了解线程问题,我们可以使用jProfiler等应用程序分析器。
  • 监测:与微服务相关的最常讨论的挑战之一是监测。除了知道该服务是否正在响应之外,还需要了解系统的其他部分,如数据库,消息代理等,这些部分是否正常工作。除此之外,我们希望获得各种指标,如已处理请求的数量,吞吐量,负载,错误数量等。为了收集服务的单个操作的统计信息(指标),我们需要使用工具如Coda Hale / Yammer Jave Metrics LibraryPrometheus客户端库。收集指标后,我们可以使用GrafanaPrometheus或者AWS Cloudwatch等软件来监控它们

到目前为止,我们已经讨论了目前可用的各种技术和工具,但是世界正在迅速变化,只知道现有技术是远远不够的。我们必须超越今天的解决方案,并为未来的发展做好准备。

为了保持最新的技术和工具,我们应该做的事情如下:

  1. 利用网络,印刷品和社交媒体获取最新进展
  2. 参加培训
  3. 自己动手实践学习
  4. 参加小组会议或会议
  5. 贡献开源

本文的版权归 阿小庆 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP技术

PHP程序员的技术成长规划

第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟练(核心是安装配置基本操作) 目标:能够完成基本的LNMP系统安装,简单配置维护;能够做基本的简单系...

4869
来自专栏情情说

「4+1视图」学习与理解

之前经常看到文章中提到「4+1视图」,对其也有片面的理解,但一直没有实践过,不清楚其真正的作用,这两天在业务需求分析中运用了其中的一部分,想谈谈自己的粗浅理解。...

39912
来自专栏架构师之路

数据库中间件为何不支持join

有网友对《假如让你来设计数据库中间件》一文中,数据库中间件仅仅支持四类SQL存有疑问: partition key普通查询 partition key上的IN查...

3436
来自专栏互联网杂技

AngularJS 对SEO是硬伤

在过去的2014年, 前端开发因为大量前端框架的出现开发模式有了巨大的改变,MVC这个web服务器端开发的模式,由于angularjs们的出现,变成了前端MVV...

4557
来自专栏华章科技

从 Python 转到 Go 语言的五大理由

“ Python 是非常强大的,特别是 Python3 有了异步功能,但是 GO 将完全取代它在大企业中的存在…”如果你真正理解了引号中的话,你可能会去尝试 G...

603
来自专栏python开发者

软件开发过程自动化原理及技术(完整示例)

软件开发过程自动化原理及技术 一个简单完整的自动化示例 1   概述 关于本文,最开始只是想写一些关于 软件自动化测试开发 的文章,但是后来写着写着,发现不先在...

1985
来自专栏Golang语言社区

Golang语言社区--游戏服务器端开发的一些建议(转载)

大家好,我是Golang语言社区(www.golang.ltd)主编彬哥,本篇给大家转载一篇关于游戏服务器开发的文章。

4567
来自专栏服务端技术杂谈

初页CTO丁乐:分布式架构

初页现有架构 首先介绍一下初页目前的架构。它主要由计算服务和后面的运维与运营系统组成。 ? 计算服务由passport、works(作品服务)、social、m...

2594
来自专栏PPV课数据科学社区

【数据可视化专题】数据可视化:前端数据之美如何展示?

随着 web 技术的蓬勃发展,前端的展示、交互越来越复杂,在用户的访问、操作过程中产生了大量的数据。由此,前端的数据分析也变得尤为重要。当然,对于站长来说,你可...

45010
来自专栏知晓程序

小程序插件审核又没通过?这才是提审的正确姿势

1023

扫码关注云+社区