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

原文作者: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 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

中国深圳一家厂商的智能摄像头曝出漏洞:至少 17.5 万设备可被远程攻击

安全企业 Bitdefender 和 Checkmarx 均发布报告表示,安全研究员在多个常用智能摄像头中发现远程侵入漏洞,涉及 VStarcam、Loftek...

3165
来自专栏EAWorld

DevOps平台中的自动化部署框架设计

本文目录: 一、背景 二、我们的需求是什么? 三、概念澄清 四、概念模型 五、总体设计 六、关键点设计 七、总结 一、背景 说到自动化部署,大家肯定都会想到一些...

4724
来自专栏JAVA高级架构

高并发、高性能 Web 架构

1772
来自专栏nice_每一天

高并发与高可用实战之基础知识大型网站架构特征(一)

系统设计不仅需要考虑实现业务功能,还要保证系统高并发、高可用、高可靠等。同时还应考虑系统容量规划(流量、容量等)、SLA指定(吞吐量、响应时间、可用性、降级方案...

1474
来自专栏猛牛哥的博客

一招去掉所有网站的烦人游戏广告

1982
来自专栏EAWorld

企业级API网关的设计

本文目录: 一、网关简介 二、网关的作用和价值 三、企业级API网关需要具备的条件 四、业界常用的API网关方案 五、如何设计一个好的企业级API网关产品 六、...

9499
来自专栏架构师小秘圈

淘宝高可用高伸缩高性能框架之实现

一,应用无状态(淘宝session框架) 俗话说,一个系 统的伸缩性的好坏取决于应用的状态如何管理。为什么这么说呢?咱们试想一下,假如我们在session中保存...

4558
来自专栏IT技术精选文摘

快速正确的搭建一个微服务架构需要了解的那几个点

1564
来自专栏美团技术团队

微服务拆分过细?“卫星”系统帮你做日志收集无遗漏

背景 随着酒店业务的高速发展,我们为用户、商家提供的服务越来越精细,系统服务化程度、复杂度也逐渐上升。微服务化虽然能够很好地解决问题,但也有副作用,比如,问题定...

4087
来自专栏phodal

如何处理好前后端分离的 API 问题

API 都搞不好,还怎么当程序员?如果 API 设计只是后台的活,为什么还需要前端工程师。 作为一个程序员,我讨厌那些没有文档的库。我们就好像在操纵一个黑盒一样...

2085

扫码关注云+社区