前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊用于构建微服务的工具和技术

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

作者头像
双愚
发布2018-06-20 11:19:27
1.5K0
发布2018-06-20 11:19:27
举报

原文作者: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 条评论
热度
最新
推荐阅读
相关产品与服务
持续集成
CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档